
NeRF(Neural Radiance Fields,神经辐射场)是一种用于视图合成的技术,它可以从一系列2D图像中学习一个静态3D场景的隐式表示,然后从任意角度渲染出新的2D图像。NeRF的核心思想是用一个多层感知机(MLP)来表示一个连续的场景,输入是一个空间点的3D坐标和一个观察方向,输出是该点的颜色和密度。NeRF的渲染过程是基于体渲染(Volume Rendering)的,它将每条从相机发出的射线上的点的颜色和密度进行加权求和,得到该射线的最终颜色。NeRF的训练过程是通过最小化渲染结果和真实图像之间的L2损失来优化MLP的参数。
NeRF还使用了一些技巧来提高效果和效率,比如位置信息编码(Positional Encoding),多层级体素采样(Coarse-to-Fine Sampling),分层抽样(Stratified Sampling)等。NeRF是一种创新的视图合成技术,它可以实现高质量的3D场景重建和新视角合成,但它也有一些局限性,比如需要大量的训练数据,渲染速度较慢,难以处理动态场景等。
我们一个简单的理解为:
使用一个NeRF神经网络采取体积雾的渲染(volume rendering)方式。通过已知的视角的图片进行训练,然后输入其他相机视角,从而去预测出未出现视角的图片。那么这个物体的3为模型就已经变成了这个模型本身,从而称之为模型信息会隐式地存储在F中去。或者可以将一个3D模型想象成一个魔方一样的透明的立方体,其中的每一个小块就是一个像素点。我们的使用NeRF神经网络去猜测每一个小块(即像素)的RGB颜色和σ透明度。最终我们通过每一个像素的RGB颜色和其透明度就能够得到一个3D模型。

1、输入输出

如图所示,我们可以看到图(a)中的每一个小黑点都是是个输入,又可以称之为采样点。在论文中其包含了五个信息:(x, y, z)+ (θ, Φ),前者表示的是采样点的三维位置坐标,红色的箭头表示采样点的视角(即方向),论文中使用的是极坐标系的方法表示视角。而实际的操作中将使用单位向量的方式来表示视角。这样我们就构成了一个输入的信息,输出信息就是这个采样点所对应的RGB和不透明度值。然而,在一个方向上会有多个采样点,那么将会生成n个像素。
那么NeRF神经网络该如何进行训练呢?我们输入了n个采样点,获得了n个输出。后面将会使用到体渲染的方式,将这个方向上的所有输出的结果映射回一个像素,利用MSE Loss(均方差损失函数)计算该像素和原像素之间的损失,从而更新神经网络的参数。

2、位置编码

从图中的结果可以看出没有加入位置编码之前图象是模糊不清的,加入了位置编码之后,图像的边界更加清晰。NeRF利用的是sin和cos进行位置编码,能够大幅度的提高图片的细节质量。

O表示的就是原点,P代表的是与O点间隔t的采样点。假设某个方向上用L维来描述一个变量,当L=10时,某一个维度上就会编码成102 = 20维,三个维度就是203 = 60维,再加上三个原来的变量就变成了63维。相对应上图的公式γ(p) = (sin(2^0pai p), cos(2^0pai p), ..., sin(2^9pai p), cos(2^9pai p)),其中p:(x, y, z)。同理我们也能够将方向向量进行编码,使用L=4维进行编码,最终将输出:423 + 3 = 27,p为该方向的单位向量。
3、体渲染

NeRF采用的是一种体积雾的染方式,在获取一定范围采样点的(r,g,b,a)之后需要再进行特定积分运算,最终得到对应像素最终的(r,g,b,a),在训练时通过光线采样点积分的得到的像素值代码在这一部分定义采样点实际采样的区域,并将这一组采样点进行积分的方式处理输出为rgb图像
我们可以看第一个公式,这是利用了积分取计算某个方向上的所有的输出,来获得空间某个位置的RGB图像。然而在实际情况下,是利用求和的方式去近似积分的结果。
4、NeRF神经网络结构

NeRF神经网络就是一个简单的MLP(全连接神经网络),前面的63是位置编码,后面就是全为256个神经元的全连接层。并且利用残差结构在网络的第6层加入了原始数据信息。为什么一开始不加入方向信息呢?因为作者认为方向信息对透明度是没有影响的,所以在输出透明度之后才会将方向信息加入到神经网络进行特征提取。最终能够输出颜色值。
5、分层采样

粗网络这种均匀采样的方法有可能会存在点位浪费和钱财阿姨那个的问题,例如,空气部分和变化较为急剧的部分。
于是使用了精细网络,经过粗网络的计算过后,会有得到一组权重,这个权重的意思就是公式中ci的前面就是权重,在权重较重的地方多采样一些点,从而解决这个问题。

综上所述,Loss的定义如上图所示
6、优点:
(1)简洁:NeRF只需要一个神经网络和一种可微渲染的流程,不需要复杂的算法和步骤,也不需要显式的几何或纹理信息。
(2)逼真:NeRF可以生成细节丰富、无空洞、光照逼真的三维模型,能够从任意视角合成高质量的图像。
(3)连续:NeRF是一种连续的场景表示,能够适应大分辨率的场景,而且不需要3D信号进行监督
7、缺点:
(1)仅针对静态场景:一个模型只能够存储一个场景的信息,或者说NeRF只能建模静态场景。
(2)速度慢:NeRF需要对每个像素进行大量的神经网络计算,这使得它的渲染速度非常慢,难以实现实时或交互式的应用.
(3)泛化性差:NeRF需要对每个场景单独训练一个神经网络,这使得它的泛化能力很差,难以适应不同的场景或数据集。如果场景的结构或视角与训练数据有较大差异,NeRF的效果会下降。
(4)需要大量视角:对于数据采集和存储提出了较高的要求。
(5)无法处理透明或反射物体:NeRF假设场景中的物体是不透明的,且只有漫反射的光照效果,因此它无法处理透明或反射物体,如玻璃、水、镜子等
(6)难以实现物理仿真:由于NeRF是在神经网络中进行隐式重建的,它没有输出像传统三维重建一样的表面、纹理等显式结构,也就很难实现物理仿真
8、应用场景
总体应用:
- 数字遗产:NeRF可以用来重建历史建筑或文物的三维模型,从不同的角度观看它们,或者将它们嵌入到虚拟现实中。
- 数字人体:NeRF可以用来捕捉人体的形状、姿态、表情和服装,从而生成逼真的人体动画或视频。
- 多模态:NeRF可以用来融合多种模态的数据,如声音、深度、光流等,从而增强视觉效果或提供更多的信息。
- 图像处理:NeRF可以用来进行图像的修复、去噪、超分辨率、风格迁移等操作,从而提高图像的质量或创造性。
- 视频处理:NeRF可以用来进行视频的稳定、插帧、编辑、合成等操作,从而提高视频的流畅性或逼真度。
NeRF在医疗成像中的应用:
NeRF和神经场在一些特殊领域也有用武之地。这些特殊领域包括:1、机器人;2、医疗成像;3、偏微分方程求解。这里我主要展示了医疗成像的一些应用。
在医疗成像中,如CT和MRI,传感器探测的数据是人不可读的,需要经过离散采样并重建成体数据(3D)或者切片(2D)供人类观看。如果能够减少采样率,则可以减少CT和MRI的时间。NeRP[19]提出一种在稀疏采样下进行神经场重建的框架,并证明可以推广到医疗图像中。

NeRF在牙科方面的应用还比较少,但是有一些可能的方向,例如:
- 牙齿重建:NeRF可以用来从牙齿的照片或X光图像重建出牙齿的三维模型,从而帮助牙医进行诊断、治疗或设计假牙等。
- 口腔扫描:NeRF可以用来从口腔内的视频或图像序列重建出口腔的三维结构,从而避免使用传统的口腔扫描仪,提高扫描的速度和舒适度。
- 口腔仿真:NeRF可以用来生成口腔的三维动画,从而模拟口腔的运动、变形、光照等效果,用于教学、演示或娱乐等目的。
9、相关内容
-
Principle & engineer related
- Model Speed Up:FastNeRF、KiloNeRF、Instant NGP、MERF
- Sparse View:pixelNeRF、MVSNeRF、DSNeRF
- Dynamic:D-NeRF、Nerfies、HyperNeRF
- Generative&Composition****:NeRF++、GRAF、GRIFFEE、Conditional NeRF
- Anti-Aliased(quality):Mip-NeRF、Mip-NeRF-360
- Video****:NSFF、videoNeRF
- No-MLP:Plenoxels、TensorRF、IBRNet
- No camera-****param****:NeRF--、BARF
-
Application related
- Unbounded big scene:NeRF-W、BlockNeRF、MegaNeRF
- Multi-modal:ClipNeRF、EditNeRF、CodeNeRF
- Low level:NeRF in the dark、HDR-NeRF、DeblurNeRF、NeRF-SR
- Human:HeadNeRF、Neural Body、HumanNeRF、Animatable NeRF
- Text-to-XD****:Dream Fields、DreamFusion、Magic3D、Dream3D、MAV3D(Text-to-4D)

学习视频链接:
【1】https://www.bilibili.com/video/BV1o34y1P7Md/?spm_id_from=333.337.search-card.all.click
NeRF论文链接:Https://arxiv.org/abs/2003.08934
git hub代码仓库:
【1】pytorch版本:yenchenlin/nerf-pytorch: A PyTorch implementation of NeRF (Neural Radiance Fields) that reproduces the results. (github.com) 、nerfstudio-project/nerfstudio: A collaboration friendly studio for NeRFs (github.com)
【2】tensorflow版本:bmild/nerf: Code release for NeRF (Neural Radiance Fields) (github.com) 、
参考文献:
【1】Shen L, Pauly J, Xing L. NeRP: Implicit Neural Representation Learning with Prior Embedding for Sparsely Sampled Image Reconstruction[J]. arXiv preprint arXiv:2108.10991, 2021.