NeRF—神经辐射场
本文介绍了三维重建相关技术,特别是神经辐射场(NeRF)的进步,它通过深度学习实现逼真的三维场景重建。NeRF在计算机图形学、自动驾驶和元宇宙等领域展现出广阔的应用前景,通过改进传统方法,提供更高质量的渲染和沉浸式体验。
NeRF 是 2020年 ECCV 的 best paper NeRF解决新视图合成问题。
因为其使用了较为简单的神经网络结构,因此属于是可微渲染的一种。NeRF也称为神经辐射场,因为其使用了体渲染的技术来实现的。
NeRF的定义
广义的定义: NeRF是使用神经网络(MLP)来隐式的存储3D信息。
NeRF是隐式的存储3d信息的,也就可以从另外的一个方向说明了,之前的3d信息是通过显示的方式来进行存储的。
显式的3D信息:有明确x,y,z的值(mesh,voxel,点云…等)
隐式的3D信息:无明确的x/y/z的值,只能输出指定角度的2D图片。
我们从论文中就可以得到。
- 模型输入是5D向量(x, y, z, theta, phi) ;
- 模型输出是4D向量, (密度,颜色(
RGB
)); - 模型是8层的MLP
输入为 5D coordinate:空间位置 ( x , y , z ) ,视觉方向 ( θ , ϕ ) 也可以说是粒子的空间位姿, (x, y, z, theta, phi)。视觉方向 ( θ , ϕ )可以说是光线所在的视角的方向。
NERF使用多层感知机,将光线上的点位编码成了颜色以及密度值。它将它所表达的场景存储在了MLP的权值中。它的输入是很多已知姿态的图像将其进行训练得到的场景表征。
推论:
- 模型不具有泛化能力;
- 一个模型只能存储一个3D信息
真实场景与相机模型
体渲染
渲染是指对光线进行追踪或者是积分累积从而生成图像的一种方法。
属于渲染技术的分支目的是解决云/烟/果冻等非刚性
物体的渲染建模
将物质抽象成一团飘忽不定的粒子群光线在穿过时,是光子在跟粒子发生碰撞的过程。
NERF的假设:
-
物体是一团自发光的粒子。
-
粒子有密度和颜色。
-
外射光和内射光抵消。
-
多个粒子被渲染成指定角度的图片。
模型的输入:将物体进行稀疏表示的单个粒子的位姿
模型的输出:该粒子的密度和颜色
粒子采集的原理
首先对于一个自发光的粒子的空间坐标为空间坐标 (x, y, z)。其发射出来的光线会通过相机模型。成为图片上的像素坐标(u,v)粒子颜色即是像素颜色。
这个粒子的颜色即为像素的颜色。
通过将一条光线上的许多(无数
)的点的这些视为向量,进行一个合成的操作,最终就可以的得到该条光线在输出图像上的像素值。将该参数值与真实的图像的参数值进行计算,就会得到我们的LOSS
我们的神经辐射场是将2d的输入表征为一个3d场景的过程。而我们的体渲染Rendering Volume是将3d场景下的许多点位给投射出一个二维图像的过程。
-
输入图像进入网络的部分可以看作是2d转变为3d的一个过程。
-
最后得到的网络的输出在通过
体渲染技术
对点位来进行合成。最终输出到图像上。可以认为是一个3d到2d的过程
首先我们定义一条光线的公式为:r(t)=0+td
r ( t ) = 0 + t d r(t)=0+t d r(t)=0+td
-
O:表示的是光线的起始位置。
-
t:表示在光线上经过的距离
-
d:代表着光线所对应的方向
(选取采样点 t1,t2,t3)例如每间隔多少个点或者说间隔多少的距离。
坐标系转换的计算
在体渲染的过程中,需要涉及到坐标系的相关计算。这里的坐标系分为以下几种类型。
-
世界坐标系
-
相机坐标系
-
像素坐标系(平面坐标系)
光线颜色计算公式 C®我们认为是投射出来的光线所呈现的颜色。
C ( r ) = ∫ t n t f T ( t ) σ ( r ( t ) ) c ( r ( t ) , d ) d t , where T ( t ) = exp ( − ∫ t n t σ ( r ( s ) ) d s ) C(\mathbf{r})=\int_{t_{n}}^{t_{f}} T(t) \sigma(\mathbf{r}(t)) \mathbf{c}(\mathbf{r}(t), \mathbf{d}) d t \text {, where } T(t)=\exp \left(-\int_{t_{n}}^{t} \sigma(\mathbf{r}(s)) d s\right) C(r)=∫tntfT(t)σ(r(t))c(r(t),d)dt, where T(t)=exp(−∫tntσ(r(s))ds)
简单理解为一种体渲染的光学模型。
离散采样公式:
C ^ ( r ) = ∑ i = 1 N T i ( 1 − exp ( − σ i δ i ) ) c i , where T i = exp ( − ∑ j = 1 i − 1 σ j δ j ) \hat{C}(\mathbf{r})=\sum_{i=1}^{N} T_{i}\left(1-\exp \left(-\sigma_{i} \delta_{i}\right)\right) \mathbf{c}_{i}, \text { where } T_{i}=\exp \left(-\sum_{j=1}^{i-1} \sigma_{j} \delta_{j}\right) C^(r)=i=1∑NTi(1−exp(−σiδi))ci, where Ti=exp(−j=1∑i−1σjδj)
t i ∼ U [ t n + i − 1 N ( t f − t n ) , t n + i N ( t f − t n ) ] t_{i} \sim \mathcal{U}\left[t_{n}+\frac{i-1}{N}\left(t_{f}-t_{n}\right), t_{n}+\frac{i}{N}\left(t_{f}-t_{n}\right)\right] ti∼U[tn+Ni−1(tf−tn),tn+Ni(tf−tn)]