【论文阅读】NeRF: Representing Scenesas Neural Radiance Fieldsfor View Synthesis

NeRF是一篇发表在ECCV 2020的一篇文章,并获得了当年Best Paper称号。该技术一经提出就惊艳了众人,NeRF目前也是计算机视觉领域一个非常有趣并且火热开展的研究方向。博主本人后续的研究方向也将围绕NeRF进行,欢迎各位对神经辐射场感兴趣的大佬一起交流学习!

Paper: NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis

Code: https://github.com/bmild/nerf 

什么是NeRF?

NeRF全称是Neural Radiance Fields(神经辐射场),他使用神经辐射场作为场景表征对新视图进行合成。NeRF作为一个使用神经网络的项目,采用了比较简单的多层感知机(MLP)作为网络部分,因此它是一种可微的渲染方法,可微渲染简单的理解就是在其使用的技术中,其运算部分可以微分可以求导。

NeRF受到很大关注的原因是它渲染出了很好的效果和精细的细节。NeRF主要使用了体渲染技术,体渲染是对光线进行追踪,并对光线进行积分或者累计来生成图像的方法。NeRF使用MLP将光线上的点位编码成颜色和密度值,将表现的场景存储在MLP的权值中,输入是很多已知相机位姿的图片,将其进行训练得到场景表征,之后可以渲染出在之前从未出现过的视角的图片。

核心内容:

  1. 体渲染(Volume Rendering)
  2. MLP
  3. Positional Encoding
  4. Hierarchical Sampling

NeRF原理

NeRF的输入为一组5维数据:三维坐标 (x,y,z) 和二维视角方向(\theta ,\phi )

辐射场-体渲染

光线公式:

r(t)=o+td

其中 o 是光线起始位置,t 是光线经过的距离,d 是光线的方向。根据光线公式可以求出二维视角方向(\theta ,\phi )

光线的颜色值公式:

C(r)是一条光线所呈现的颜色,这个公式就是体渲染中的光学模型。Sigma是体积密度(消光系数),是 上 位置对 方向的光强,是从 tn 到 累积的透明度。

关于此处的公式推导可以参考另一位大佬的blog:NeRF中的数学公式推导

Positional Encoding

论文中提到两种优化神经辐射场的方法,第一种是高频位置编码。如果将五维数据直接输入到神经网络中,会导致渲染图在颜色和几何的高频区域表示不佳,因为神经网络的特性就是倾向于学习低频函数,网络中如果缺少高频信息,这个现象会更加明显。作者将五维数据都映射到含有高频信号的向量。

这个方法类似于傅里叶变换,文章中作者通过实验得出:空间坐标的三项 L=10, 方向的两项 L=4。这样一来空间坐标的输入变为 3*2*10=60 个输入量,方向的输入变为 3*2*4= 24 个输入量(此处θ和φ映射到一个三维空间向量所以是三维输入)。

使用位置编码和不使用位置编码的区别:

Hierarchical Sampling

另一个优化神经辐射场的方法是分层采样,对一条光线平均采样64个点的话可能有很多点是没有达到目标(处于空气之中),并且可能对含有物体的区域欠采样,如果单纯线性增加采样点,并没有在根本上解决问题。

分层采样使用两层MLP,计算两个批次的采样点,第二个批次的采样点采样依据来自于第一网络输出结果。第一个网络称为粗网络(coarse),第二个网络称为精细网络(Fine)。

分层采样:将 [tn,tf] 分成 个均匀间隔

 光线颜色估计值:

权重可以看成沿着射线的分段常数概率密度函数(Piecewise-constant PDF)。

Network

NeRF的网络由8层MLP组成,输入为(x,y,z,θ,φ),输出为RGB和体积密度σ。

Loss

NeRF的损失函数就是一个均方误差:

NeRF的劣势

  1. 它的训练和推理速度都很慢,我使用一张2080ti需要训练8.5h,推理速度大概1s一帧;
  2. 只能处理静态场景;
  3. 对光照的处理并不理想;
  4. 训练的模型都仅能代表一个场景, 没有泛化能力。

总结

抛开NeRF的缺点,它的效果还是非常炫酷的,而且随着研究的深入已经诞生了许许多多优化版本的NeRF,NeRF和SLAM、自动驾驶等方向的融合还是一个非常有意思的研究方向。

博主后续还会继续发布复现NeRF的blog,欢迎感兴趣的朋友们多多关注、讨论和学习!

猜你喜欢

转载自blog.csdn.net/MARCOLU6/article/details/129927962
今日推荐