1.主要目标:
利用神经网络将多张多视角的2D图像进行3D重建,并进行渲染合成得到任意新视角的2D图像。
2.动机:
1、之前的方法通常使用Mesh,点云,体素等方式来对3D场景进行显式建模。但因为其是离散表示的,导致其生成结果不够精细化,且由于存储的三维场景的表达信息的数据集巨大,其对内存的消耗也限制了其在较高分辨率复杂场景的应用。
2、通过使用一个复杂函数对3D场景进行隐式表达,同样可以完成3D信息的储存与新视角的合成。这样做的好处是可以通过函数对3D场景进行连续的表达,这使得生成的结果会更加精细;且在表达较高分辨率复杂场景时该方式消耗的内存较少。
3.贡献:
1、提出了一种将拥有复杂几何图形的连续场景表达为一个5D的神经辐射场,并参数化为基本的MLP网络参数的方法。
2、基于经典的体渲染技术设计了一种可微分的渲染过程,能够训练优化相关的网络参数。并提出了一种分层采样策略,能够让有限参数的MILP网络更关注于场景中可见物体的部分。
3、提出了一种位置编码,将每个输入的5D坐标映射到更高的维度空间,这使得神经辐射场能够被更好地被优化以表达高频的场景内容。
4.方法:
1.数据处理:
模型的输入为5D数据,分别为空间中点的3D坐标和相机的方位视角。首先将这些数据进行处理,将多张2D的图像作为输入,通过COLMAP工具可以得到场景的稀疏重建结果,其输出文件包括相机内参,相机外参和3D点的信息。之后经过矩阵的空间变换将2D像素坐标转换为3D的相机坐标,再变换到世界坐标系。最终得到一个经过处理转换之后的3D坐标(X,Y,Z)和光线方向(θ,φ)作为MLP的输入。
2.Positional encoding(位置编码):
由于之前的研究表明,神经网络倾向于学习图像中的低频信息,也即梯度变换平缓的区域。所以当仅仅用上述的5D输入信息时,网络在复杂场景下的最终的生成结果在清晰度与颜色和几何边缘的区域会很差。因为这些信息和区域都是高频区域,所以仅仅使用5D的低维信息输入无法让网络很好地学习到高频信息。
所以文章提出了一种位置编码,即将初始的5D信息映射到高维空间中再输入网络,这样可以使得网络学习到更多的高频信息。具体做法为使用下列的式子进行映射:
其中p代表着上述的5D信息。作者经过试验最终将设置XYZ的对应L为10,θφ的对应L为4。
3.网络结构和渲染流程:
γ(x)代表高维化处理之后的点的坐标信息(X,Y,Z),γ(d)代表对应的高维化之后的光线信息(θ,φ)。首先通过多层MLP将输入的γ(x)转换为该点的体密度σ,之后加入光线信息经过几层MLP得到该点的RGB信息。
3.1.采样方式:
得到最终的2D图像的像素点需要在光线的方向上对每个点进行积分,由于计算机中对于积分的计算是通过多个离散的乘积和进行计算。所以需要对光线上的点进行离散采样。
这里采用的是coarse采样+fine采样流程。首先在光线的边界之间进行深度空间的均匀采样,然后在规定了下界与上界的范围内将采样点进行扰动,最终coarse采样阶段在每条光线上采样了64个样本点。然后基于coarse采样得到的结果进一步指导fine的点采样,即在对最终颜色贡献更大(权重更大)的点附近进行更加密集的点采样。coarse阶段采样了64个点,fine阶段采样了128个点。
两个阶段分别使用两个相同结构不同权重参数的MLP网络。
3.2.渲染流程:
渲染本质上是由3D到2D平面的建模映射过程,利用网络得到的3D点的颜色及体密度(不透明度)沿着光线进行整合得到最终的2D图像像素值。
体渲染公式:
相机光线: r(t) = o + td
其中其中函数T(t)表示射线从 tn到 t 沿射线累积透射率,体密度越高,该点的透射率越低,该点的颜色权重越大。
经过离散采样,该渲染公式可转换为:
δi代表两个采样点之间的距离。 Ti代表光线在到达该点之前的透射率。
3.3.训练流程:
使用损失函数对coarse和fine的两个网络一起进行优化
batchsize采用4096条光线。
4.结果:
可以看到View Dependence和位置编码可以有效改善生成结果。
更多的图像,更高维的位置编码均能提升模型性能。
在定性结果和定量指标中,nerf均能获得sota效果。