aoi学院

Aisaka's Blog, School of Aoi, Aisaka University

学习报告:神经辐射场将场景表示用于视图合成

背景

《NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis》是2020年发表在ECCV上的一篇论文,这篇论文是介绍神经场景的第一篇论文。NeRF由此展开了在计算机图形学中对与3D的渲染任务,并从中得到了很好的结果。

Neural Radiance Fields的缩写就是NeRF ,它实际上是一种隐式的三维场景表示,之所以是隐式的原因在于NeRF 不能像点云、网格那样以直接的三维模型让人看见。NeRF将场景以空间中任何点的volume density(体积密度σ)和有向的颜色值Color (c) 的方式来表示,在此基础上,通过对场景进行渲染,从而得到新视角的模拟图。


算法概括

图1 优化一个连续5D神经辐射场的方法,通过对输入的试图集合运用NeRF进行优化,最终呈现出两个新的试图。

可以将NeRF简要总结为一个隐式的静态三维场景用一个MLP神经网络进行学习。想要训练一个MLP神经网络需要大量的相机拍摄的图片,通过这些图片训练好MLP,最后就可以从各个角度渲染了。


算法细节

用神经辐射场来表示场景

NeRF指的是将一个连续场景表示为一个输入为单个连续5D向量的函数。Neural Radiance Fields里面的Radiance Fields指的是映射函数gθ,Neural Radiance Fields则是指用神经网络拟合映射函数gθ。

映射函数输入的是x和d,而输出是δ和c 。NeRF是一种场表示,其映射函数的输入x是三维空间某个顶点的三维坐标,输入d是观察角度。而映射函数的输出δ是Volume Density体积密度作用于确定影响最终颜色确定的程度,c是Color即颜色表示每个3D体积具有的RGB值。

具体的实现中,x首先被输入MLP神经网络中,得到δ和中间特征,再将d和中间特征输入到另外的全连接层中并与测验颜色。由此证明δ之和空间位置相关,而颜色则于观察角度和空间位置都有关系。


基于辐射场的体素渲染算法

虽然通过NeRF函数就可以得到3D空间点的颜色和密度,但实际上当用单目相机针对场景成相时,得到的2D 场景图像上的一个像素实际上对应了一条从相机出发的射线上的所有的连续空间点。面对这种情况,则需要运用渲染算法通过这条射线上的所有点得到这条射线的最终渲染颜色。同时,需要在NeRF中采用可微的渲染方法。

NeRF通过将2D场景表示为体积密度和颜色值,在此基础上在对生成的场景进行渲染。

图2 输入5D向量通过映射函数得到颜色值和体积密度

体积密度σ(x)可以解释为一条射线r在经过x位置处终止于无穷小粒子的微分概率,这可以理解为由于一条射线上的点是连续的,因此可以微分。这里将摄像机射线标记为r(t)=o+td,o是射线原点,d是之前相机射线的角度,其近、远端边界为tn和tf。因此这条射线的的期望颜色C(r)可以用积分的方式表示为:

从5D连续神经辐射场呈现视图需要估计通过所需虚拟相机的每个像素的相机光线的积分C(r),通过上述分析使用求积对该连续积分进行数值估计。其中确定性求积(Deterministic quadrature)通常用于渲染离散体素网格,这一方式将有效地限制我们表示的分辨率,这主要因为MLP只会在固定的离散位置集上查询。在该函数中T(t)表示一条射线从tn到t所积累的全部的透明度,这也就意味着该射线从tn到t之间都没有击中任何粒子的概率。T(t)的表现形式为:

由此可知想要得到一张用NeRF渲染合成的完整图片,需要做的就是计算通过虚拟相机的光线的所有像素来计算得到像素的颜色值。


NeRF优化

通过上述所描述的内容,现在已经详细的描述了将场景建模为神经辐射场和从该表示中渲染新视图的核心部分。但是,考虑到主要用这部分来实现成果的实际效率并不突出。因此在这部分中选择加入两个改进来提高当前的效率,第一种是帮助MLP表示高频函数的输入坐标的位置编码,第二种是分层采样过程,这可以更有效地采样高频表示。

位置编码(Positional Encoding)

通过实验发现直接将位置和角度输入MLP网络操作会导致渲染效果很差,无法表示颜色和几何的高频变化。在此基础上进一步研究发现将输入传递到网络之前,使用高频函数将其映射到高维空间可以实现更好地拟合包含高频变化的数据。因此,将这一发现应用到NeRF 的表示中,选用位置编码的方式将连续输入坐标映射到更高维空间,使MLP网络更容易逼近更高频率的函数,这大大提高了清晰度。

多层级采样(Hierarchical Volume Sampling)

由于该方法的渲染策略是在每个摄像机光线的N个查询点上对神经辐射场网络进行密集评估,这样渲染的工作量太大导致效率很低。针对此问题提出了一种分层表示法,通过将样本按比例分配给最终渲染的预期效果,提高了渲染效率。这一部分的优化,作者选用了一种“coarse to fine”的方法,即同时优化两个网络:一个“粗略”和一个“精细”。这种方法减小采样计算开销,加快训练速度。


总结

该研究运用一个MLP网络输出体积密度和辐射度将场景表示为5D神经辐射度。由于深层网络偏向于学习低频函数,导致渲染效果很差,针对此现象选择采用类似于傅里叶变换位置编码的方法,这大大提升网络捕捉高频信息的能力同时,通过提出一种分层采样策略,使渲染更符合样本要求。


参考链接

https://www.scholat.com/teamwork/showPostMessage.html?id=10382
[1] Mildenhall B, Srinivasan P P, Tancik M, et al. Nerf: Representing scenes as neural radiance fields for view synthesis[C]//European Conference on Computer Vision. Springer, Cham, 2020: 405-421.