1 传统视图合成和NeRF(Neural Radiance Fields)
1.1 联系
传统视图合成和NeRF的共同目标都是从已有的视角图像中生成新的视角图像。两者都利用已有的多视角图像数据来预测或合成从未见过的视角。
1.2 区别
1.2.1 几何表示方式
-
传统视图合成:通常使用显式几何模型(如深度图、网格、点云)或其他图像处理方法(如基于图像拼接或光流的方法)来生成新的视图。这些方法往往依赖于场景的几何信息,并使用插值或重映射技术来生成新的视角。
-
NeRF:NeRF不使用显式几何模型,而是通过神经网络隐式地表示场景。它通过学习从空间位置和视角方向到颜色和密度的映射,使用体积渲染来合成新的视图
1.2.2 渲染质量与细节
-
传统视图合成:渲染质量通常依赖于输入数据的质量和几何模型的准确性,可能会在细节或复杂光照情况下失去精度。
-
NeRF:通过体积渲染,NeRF能够捕捉到细腻的光照变化和材质细节,生成的图像质量通常高于传统方法,尤其是在处理具有复杂材质和光照的场景。
1.2.3 处理复杂场景的能力
-
传统视图合成:在处理简单场景时效果较好,但在处理复杂光照、反射和材质等情况下,可能会产生失真或伪影。此外,显式几何模型的生成和使用可能受到场景复杂度的限制。
-
NeRF:通过神经网络的表达能力,NeRF能够捕捉并重现复杂的光照、反射、折射等效果,生成更加逼真的视图。它不依赖于显式的几何模型,因此在复杂场景中表现更加出色。
2 整体流程
3 NeRF网络
网络的前面 8 层只接受空间坐标的编码(位置编码)输入 ,得到透明度(体密度)输出 σ (不再作为后续节点的输入);在第9层得到前一层输出的特征向量后再 concat 方向编码输入 ,再训练一层,得到辐射度(颜色)输出 c ,即 RGB
4 NeRF的损失函数
NeRF使用的损失函数是 均方误差损失函数(Mean Squared Error, MSE),其定义如下:
其中:
- N 是采样的射线数量。
- 表示第 条射线。
- 是模型预测的该射线的颜色值。
- 是该射线的真实颜色值(即从输入图像中获得的像素值)。
损失函数说明
1. 直接衡量颜色差异:
- MSE损失函数直接计算预测图像和真实图像对应像素值的平方差异。这种直接比较像素值的方式简单且有效,适合用于图像生成任务中。这使得模型能够通过最小化像素级的差异来优化生成的图像质量。
2. 稳定且可解释性强:
- MSE是一个非常常用且成熟的损失函数,在神经网络中应用广泛。其数学形式简单明了,优化过程稳定。对于生成图像质量的衡量,MSE的数值大小直接反映了预测图像和真实图像之间的差距,这使得损失的变化容易理解和分析。
3. 梯度计算的便利性:
- MSE损失函数是一个凸函数,具有良好的数学性质。这使得在训练过程中,梯度计算比较简单且稳定,有助于模型的优化和收敛。
4. 对输出范围的直接约束:
- 由于MSE计算的是预测值和真实值之间的差异平方,因此它对输出值的大小和范围提供了直接的约束。这对于NeRF的输出(图像的RGB值)在0到1之间的范围内进行优化是合适的,确保生成的图像不会超出正常的颜色值范围。
5 体渲染
6 位置编码
NeRF的输入通常包括三维空间坐标 (x,y,z) 和视角方向 (θ,ϕ)。这些输入值通常在 [0,1] 或者 [−1,1]的范围内。然而,直接输入这些低维坐标给神经网络(多层感知机MLP)可能会导致模型难以捕捉场景中的高频细节,如纹理、锐边、光照变化等。
为了解决这个问题,NeRF引入了位置编码,将低维输入坐标映射到一个更高维的空间。这种映射通过使用一组正弦和余弦函数,将低频的输入信号转换为包含高频成分的信号,从而使得神经网络能够更好地学习复杂的空间变化。
NeRF中使用的位置编码公式如下:
其中:
- 是输入的三维坐标或者视角方向向量中的一个分量(例如 x 或 y 等)。
- 是编码的频率级数,即映射后的维度长度。
- 是经过位置编码后的高维向量。
对于一个三维坐标 (x,y,z),经过位置编码后,它将被转换为一个 维的向量(每个维度的坐标都被映射到 维)。视角方向也通过类似的方式进行编码。
7 分层采样
在NeRF中,合成一条射线上的像素颜色值需要对该射线经过的路径进行采样,并累积这些采样点的颜色和密度值。由于场景中的许多区域(如背景、空白区域等)对最终的像素值贡献较小,进行均匀采样会浪费大量计算资源。因此,需要一种更加智能的采样策略,能够在不显著增加计算成本的前提下,提升渲染效果。
NeRF的分层采样通常包括以下两个步骤:
1. 粗采样(Coarse Sampling):
- 首先,在射线上均匀地进行粗采样。假设射线在场景中穿过一段空间,NeRF会在这段空间内选择固定数量的采样点。每个采样点通过神经网络预测其颜色和密度。
- 通过这些采样点的颜色和密度,可以计算出射线的初步颜色值。这一步的目的是快速获取场景的全局信息,确定哪些区域对最终图像有较大贡献。
2. 细采样(Fine Sampling):
- 基于粗采样得到的信息,NeRF会使用一种重要性采样(Importance Sampling)策略,在射线的某些重要区域进行更密集的细采样。
- 这些重要区域通常是密度较高的地方,即物体的表面或边缘,这些地方对射线最终的颜色值贡献较大。
- 通过在这些区域进行更密集的采样,可以更精确地估计射线的最终颜色,提升图像的局部细节和整体质量。