它要处理的任务是新视角合成。会围绕物体采集不同角度的图像,之后计算每个采集角度的相机位姿,将采集的图像序列以及它们对应的位姿送入到NeRF,就可以合成一些新的视角。简单理解为通过已知相机位姿下的视图,学习推测未知相机位姿下的视图。
本文做法是将静态场景表示为连续的 5D 函数,该函数输出空间中每个点 (x, y, z) 处每个方向 ( θ , ϕ ) (\theta, \phi) (θ,ϕ)发射的辐射亮度,以及每个点的密度,其作用类似于控制累积穿过 (x, y, z) 的光线辐射量的微分不透明度**(这里不太容易理解,后面会有提到点的密度的作用)**。
本文优化了一个没有任何卷积层(通常称为多层感知器或 MLP)的深度全连接神经网络,通过从单个 5D 坐标 ( x , y , z , θ , ϕ ) (x, y, z, \theta, \phi) (x,y,z,θ,ϕ) 回归到体积密度和与视图相关的 RGB 颜色来表示该函数。
回归出辐射场之后,从特定视点渲染此神经辐射场的方法如下:
将得到的结果与GroundTruth计算误差以监督优化模型。
将连续场景表示为 5D 向量值函数,其输入是 3D 位置 x = (x, y, z) 和 2D 观看方向 ( θ , ϕ ) (\theta, \phi) (θ,ϕ),其输出是发射颜色 c = ( r , g , b ) c = (r, g ,b) c=(r,g,b) 和体积密度 σ \sigma σ。
这部分的公式推导和理解,我单独写了一篇关于NeRF的体渲染的博客,可供参考【NeRF】体渲染,这里不再赘述。
本文引入了两项改进来能够表示高分辨率的复杂场景。
由于神经网络难以学习到高频信息,直接将位置和视角作为网络的输入,渲染效果分辨率低;使用位置信息编码的方式将输入先映射到高频可以有效地解决这个问题。这里引用论文On the Spectral Bias of Neural Networks
γ \gamma γ用于将输入映射到高维空间中,论文中使用的是正余弦周期函数的形式:
位置和视角先进行归一化,到[-1,1]之间。对3D位置, γ ( x ) \gamma(x) γ(x)设置 L=10;视角信息 γ ( d ) \gamma(d) γ(d)设置 L=4。
NeRF的渲染策略是对相机出发的每条射线都进行N个采样,将颜色加权的求和,得到该射线颜色。由于大量的对渲染没有贡献的空的或被遮挡的区域仍要进行采样计算,占用了过多的计算量。
这里采用了粗采样和细采样,简单理解为对整个场景先进行粗采样,然后对于物体表面附近的位置进行细采样。
详细内容可以参考2。