自己做网站的意义,网络设计工资一般多少,徐州设计公司网站的公司,全球做的最好的公司网站NeRF三维重建—神经辐射场Neural Radiance Field#xff08;二#xff09;体渲染相关
粒子采集部分 粒子采集的部分我们可以理解为#xff0c;在已知粒子的情况下#xff0c;对图片进行渲染的一个正向的过程。 空间坐标(x,y,z#xff09;发射的光线通过相机模型成为图片上…NeRF三维重建—神经辐射场Neural Radiance Field二体渲染相关
粒子采集部分 粒子采集的部分我们可以理解为在已知粒子的情况下对图片进行渲染的一个正向的过程。 空间坐标(x,y,z发射的光线通过相机模型成为图片上的像素坐标(u,v)粒子颜色即为像素颜色(u, v)与(x, y, z)的公式如下也就是之前在相机模型中提到的一些有关坐标转化的部分知识。 内参外参来进行的 相反我们的任务是给定一张图片我们需要的是在许多张图片中推导出相机为位姿信息。
可以看作是沿着某一条射线上的无数个发光点的“和”利用相机模型反推射线那么这个射线表示为r(totdO为射线原点d为方向t为距离极坐标表示
总结来说我们的这个过程就是相机模型的一个反向的过程表达。由像素u,v反推出像素的信息来。 在三维的空间中采样射线的信息。
这一部分就是我们有关的粒子采集的部分信息了。可以得到我们的原点和方向的信息。我们通过这两个信息就可以表示出这条射线了。
体渲染
我们最后得到的像素的颜色是无数个发光粒子在该射线长度上经过累计得到的和。作为我们像素最终的颜色。
我们在表示出的这条射线上采用一定的方法取发光粒子的值最后通过积分就可以得出体渲染所得到的像素的位置坐标了。 r ( t ) o t d r(t)otd r(t)otd
在我们计算的时候这个t是离散化的我们如何通过选择这个离散的t来进行计算呢
方法1设置near2far6。在near和far之间均匀采样64个点
通过图像和相机的位姿来计算表示一条射线。在射线上均匀的采样了64个点训练时一张图片取1024个像素得到1024条射线每条射线上采样64个粒子共102464个粒子
我们的输出就是粒子的密度和颜色值
对之前的模型的信息进行一定的补充 γ ( p ) ( sin ( 2 0 π p ) , cos ( 2 0 π p ) , … , sin ( 2 L − 1 ) , cos ( 2 L − 1 π p ) ) \gamma(p)\left(\sin \left(2^{0} \pi p\right), \cos \left(2^{0} \pi p\right), \ldots, \sin \left(2^{L-1}\right), \cos \left(2^{L-1} \pi p\right)\right) γ(p)(sin(20πp),cos(20πp),…,sin(2L−1),cos(2L−1πp))
p需要归一化到[-11]对于空间坐标xL10r(x是60D对于视角坐标dL 4r(d是24D在代码中加上初始值r(x)是63Dr(d)是27D
LOSS
GT是图片某一像素的RGB将该像素对应光线上的粒子颜色进行求和粒子的颜色和该像素颜色的预测值粒子的颜色和]与像素颜色做MSE(均方误差损失) L ∑ r ∈ R ∥ C ^ ( r ) − C ( r ) ∥ 2 2 R 是每个batch的射线(1024条) \begin{array}{l} L\sum_{r \in R}\|\hat{C}(r)-C(r)\|_{2}^{2}\\ R \text { 是每个batch的射线(1024条) } \end{array} L∑r∈R∥C^(r)−C(r)∥22R 是每个batch的射线(1024条)
体渲染连续积分 C ( s ) ^ ∫ 0 ∞ T ( s ) σ ( s ) C ( s ) d s T ( s ) e − ∫ 0 s σ ( t ) d t \begin{array}{l} \hat{C(s)}\int_{0}^{\infty} T(s) \sigma(s) C(s) d s \\ T(s)e^{-\int_{0}^{s} \sigma(t) d t} \end{array} C(s)^∫0∞T(s)σ(s)C(s)dsT(s)e−∫0sσ(t)dt
T(s)在s点之前光线没有被阻碍的概率.o(s)在s点处光线碰击粒子光线被粒子阻碍的概率密度C(s)在s点处粒子光出的颜色各点的颜色和概率密度已知要先求T(s)
每个点的体密度与颜色相乘在结合一下不透明度来进行说明。
理论推导部分说明: 我们对上面的公式进行推导首先推导T的公式 T ( s d s ) T ( s ) [ 1 − σ ( s ) d s ] T ( s d s ) T ( s ) − T ( s ) σ ( s ) d s T ( s d s ) − T ( s ) − T ( s ) σ ( s ) d s d T ( s ) − T ( s ) σ ( s ) d s d T ( s ) T ( s ) − σ ( s ) d s \begin{array}{l} T(sd s)T(s)[1-\sigma(s) d s] \\ T(sd s)T(s)-T(s) \sigma(s) d s \\ T(sd s)-T(s)-T(s) \sigma(s) d s \\ d T(s)-T(s) \sigma(s) d s \\ \frac{d T(s)}{T(s)}-\sigma(s) d s \end{array} T(sds)T(s)[1−σ(s)ds]T(sds)T(s)−T(s)σ(s)dsT(sds)−T(s)−T(s)σ(s)dsdT(s)−T(s)σ(s)dsT(s)dT(s)−σ(s)ds 两边同时积分就可以得到 ∫ 0 t d T ( s ) T ( s ) ∫ 0 t − σ ( s ) d s ∫ 0 t 1 T ( s ) d T ( s ) ∫ 0 t − σ ( s ) d s ln T ( s ) ∣ 0 t ∫ 0 t − σ ( s ) d s ln T ( t ) − ln T ( 0 ) ∫ 0 t − σ ( s ) d s ln T ( t ) ∫ 0 t − σ ( s ) d s T ( t ) e ∫ 0 t − σ ( s ) d s \begin{aligned} \int_{0}^{t} \frac{d T(s)}{T(s)} \int_{0}^{t}-\sigma(s) d s \\ \int_{0}^{t} \frac{1}{T(s)} d T(s) \int_{0}^{t}-\sigma(s) d s \\ \left.\ln T(s)\right|_{0} ^{t} \int_{0}^{t}-\sigma(s) d s \\ \ln T(t)-\ln T(0) \int_{0}^{t}-\sigma(s) d s \\ \ln T(t) \int_{0}^{t}-\sigma(s) d s \\ T(t) e^{\int_{0}^{t}-\sigma(s) d s} \end{aligned} ∫0tT(s)dT(s)∫0tT(s)1dT(s)lnT(s)∣0tlnT(t)−lnT(0)lnT(t)T(t)∫0t−σ(s)ds∫0t−σ(s)ds∫0t−σ(s)ds∫0t−σ(s)ds∫0t−σ(s)dse∫0t−σ(s)ds 因为是离散的数据我们要将之前推导出来的连续形式进行离散化的处理。 计算机只能处理离散化数据将光线[O,s]划分为N个等间距区间[Tn→ Tn1]n0,12…,N间隔长度为on C ^ ( r ) ∑ i 1 N T i ( 1 − e − σ i δ i ) c i where T i e − ∑ j 1 i − 1 σ j δ j \begin{array}{l} \hat{C}(r)\sum_{i1}^{N} T_{i}\left(1-e^{-\sigma_{i} \delta_{i}}\right) c_{i}\\ \text { where } T_{i}e^{-\sum_{j1}^{i-1} \sigma_{j} \delta_{j}} \end{array} C^(r)∑i1NTi(1−e−σiδi)ci where Tie−∑j1i−1σjδj
下面我们补充我们的离散化公式的一个推导过程。
我们对每个光区贡献的光强进行累计操作。 C ^ ∑ n 0 N I ( T n → T n 1 ) \hat{C}\sum_{n0}^{N} I\left(T_{n} \rightarrow T_{n1}\right) C^n0∑NI(Tn→Tn1) I ( T n → T n 1 ) ∫ t n t n 1 T ( t ) σ n C n d t σ n C n ∫ t n t n 1 T ( t ) d t σ n C n ∫ t n t n 1 e − ∫ 0 t σ ( s ) d s d t σ n C n ∫ t n t n 1 e − ( ∫ 0 t n σ ( s ) d s ∫ t n t σ ( s ) d s ) d t σ n C n ∫ t n t n 1 e − ∫ 0 t n σ ( s ) d s e − ∫ t n t σ ( s ) d s d t σ n C n T ( 0 → t n ) ∫ t n t n 1 e − ∫ t n t σ ( s ) d s d t \begin{aligned} I\left(T_{n} \rightarrow T_{n1}\right) \int_{t_{n}}^{t_{n1}} T(t) \sigma_{n} C_{n} d t \\ \sigma_{n} C_{n} \int_{t_{n}}^{t_{n1}} T(t) d t \\ \sigma_{n} C_{n} \int_{t_{n}}^{t_{n1}} e^{-\int_{0}^{t} \sigma(s) d s} d t \\ \sigma_{n} C_{n} \int_{t_{n}}^{t_{n1}} e^{-\left(\int_{0}^{t_{n}} \sigma(s) d s\int_{t_{n}}^{t} \sigma(s) d s\right)} d t \\ \sigma_{n} C_{n} \int_{t_{n}}^{t_{n1}} e^{-\int_{0}^{t_{n}} \sigma(s) d s} e^{-\int_{t_{n}}^{t} \sigma(s) d s} d t \\ \sigma_{n} C_{n} T\left(0 \rightarrow t_{n}\right) \int_{t_{n}}^{t_{n1}} e^{-\int_{t_{n}}^{t} \sigma(s) d s} d t \end{aligned} I(Tn→Tn1)∫tntn1T(t)σnCndtσnCn∫tntn1T(t)dtσnCn∫tntn1e−∫0tσ(s)dsdtσnCn∫tntn1e−(∫0tnσ(s)ds∫tntσ(s)ds)dtσnCn∫tntn1e−∫0tnσ(s)dse−∫tntσ(s)dsdtσnCnT(0→tn)∫tntn1e−∫tntσ(s)dsdt
经过化简就可以得到最后的公式的形式 I ( T n → T n 1 ) σ n C n T ( 0 → t n ) ∫ t n t n 1 e − ∫ t n t σ n d s d t σ n C n T ( 0 → t n ) ∫ t n t n 1 e − σ n ( t − t n ) d t σ n C n T ( 0 → t n ) [ − 1 σ n e − σ n ( t − t n ) ∣ t n t n 1 ] C n T ( 0 → t n ) ( 1 − e σ n δ n ) C n e − ∑ i 0 n − 1 σ i δ i ( 1 − e σ n δ n ) . \begin{aligned} I\left(T_{n} \rightarrow T_{n1}\right) \sigma_{n} C_{n} T\left(0 \rightarrow t_{n}\right) \int_{t_{n}}^{t_{n1}} e^{-\int_{t_{n}}^{t} \sigma_{n} d s} d t \\ \sigma_{n} C_{n} T\left(0 \rightarrow t_{n}\right) \int_{t_{n}}^{t_{n1}} e^{-\sigma_{n}\left(t-t_{n}\right)} d t \\ \sigma_{n} C_{n} T\left(0 \rightarrow t_{n}\right)\left[-\left.\frac{1}{\sigma_{n}} e^{-\sigma_{n}\left(t-t_{n}\right)}\right|_{t_{n}} ^{t_{n1}}\right] \\ C_{n} T\left(0 \rightarrow t_{n}\right)\left(1-e^{\sigma_{n} \delta_{n}}\right) \\ C_{n} e^{-\sum_{i0}^{n-1} \sigma_{i} \delta_{i}}\left(1-e^{\sigma_{n} \delta_{n}}\right). \end{aligned} I(Tn→Tn1)σnCnT(0→tn)∫tntn1e−∫tntσndsdtσnCnT(0→tn)∫tntn1e−σn(t−tn)dtσnCnT(0→tn)[−σn1e−σn(t−tn) tntn1]CnT(0→tn)(1−eσnδn)Cne−∑i0n−1σiδi(1−eσnδn).
粗模型输入均匀采样粒子输出密度细模型根据密度二次采样最后输出采用模型2的输出粗模型和细模型结构相同