NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 精读

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 层只接受空间坐标的编码(位置编码)输入 \gamma (x) ,得到透明度(体密度)输出 σ (不再作为后续节点的输入);在第9层得到前一层输出的特征向量后再 concat 方向编码输入 \gamma (d),再训练一层,得到辐射度(颜色)输出 c ,即 RGB 

4 NeRF的损失函数

NeRF使用的损失函数是 均方误差损失函数(Mean Squared Error, MSE),其定义如下:

其中:

  • N 是采样的射线数量。
  • r_{i}​ 表示第 i 条射线。
  • \hat{C}(r_{i}) 是模型预测的该射线的颜色值。
  • C(r_{i}) 是该射线的真实颜色值(即从输入图像中获得的像素值)。

损失函数说明

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中使用的位置编码公式如下:

其中:

  • p 是输入的三维坐标或者视角方向向量中的一个分量(例如 x 或 y 等)。
  • L 是编码的频率级数,即映射后的维度长度。
  •  \gamma (p) 是经过位置编码后的高维向量。

 对于一个三维坐标 (x,y,z),经过位置编码后,它将被转换为一个 6L 维的向量(每个维度的坐标都被映射到 2L 维)。视角方向也通过类似的方式进行编码。

7 分层采样

在NeRF中,合成一条射线上的像素颜色值需要对该射线经过的路径进行采样,并累积这些采样点的颜色和密度值。由于场景中的许多区域(如背景、空白区域等)对最终的像素值贡献较小,进行均匀采样会浪费大量计算资源。因此,需要一种更加智能的采样策略,能够在不显著增加计算成本的前提下,提升渲染效果。

NeRF的分层采样通常包括以下两个步骤:

1. 粗采样(Coarse Sampling)

  • 首先,在射线上均匀地进行粗采样。假设射线在场景中穿过一段空间,NeRF会在这段空间内选择固定数量的采样点。每个采样点通过神经网络预测其颜色和密度。
  • 通过这些采样点的颜色和密度,可以计算出射线的初步颜色值。这一步的目的是快速获取场景的全局信息,确定哪些区域对最终图像有较大贡献。

2. 细采样(Fine Sampling)

  • 基于粗采样得到的信息,NeRF会使用一种重要性采样(Importance Sampling)策略,在射线的某些重要区域进行更密集的细采样。
  • 这些重要区域通常是密度较高的地方,即物体的表面或边缘,这些地方对射线最终的颜色值贡献较大。
  • 通过在这些区域进行更密集的采样,可以更精确地估计射线的最终颜色,提升图像的局部细节和整体质量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值