NeRF原论文及教程

摘要: NeRF原论文以及相关解读材料。


〓 Table of Contents 〓




原文资源

〓 ReTURN 〓

arxiv地址




Abstract

我们提出了一种方法,通过优化底层连续体积场函数,利用稀疏输入视图集合,在复杂场景的新视图合成方面实现了最先进的结果。我们的算法使用一个全连接(非卷积)的深度网络表示场景,其输入是一个单一的连续5D坐标(空间位置 (x, y, z) 和视角方向 (θ, φ)),输出是该空间位置的体积密度和视角依赖的辐射亮度。

我们通过在相机射线上查询5D坐标并使用经典的体积渲染技术,将输出的颜色和密度投影到图像中来合成视图。由于体积渲染本质上是可微的,因此优化我们表示 所需的唯一输入是一组已知相机姿态的图像。 

我们描述了如何有效地优化神经辐射场,以渲染具有复杂几何和外观的场景的照片真实感新视图,并展示了在神经渲染和视图合成方面优于以往工作的结果。视图合成结果最好以视频形式观看,因此我们强烈建议读者观看我们的补充视频以获得有说服力的比较结果。




Introduction

〓 ReTURN 〓

在这项工作中,我们通过直接优化连续5D场景表示的参数,以最小化渲染一组捕获图像的误差,从而解决了长期存在的视图合成问题。

我们将静态场景表示为一个连续的5D函数,该函数输出空间中每个点 (x, y, z) 在每个方向 (θ, φ) 上发射的辐射亮度,以及每个点的密度,密度类似于差分不透明度,控制通过 (x, y, z) 的光线累积了多少辐射。我们的方法优化了一个没有卷积层的全连接深度神经网络(通常称为多层感知器或 MLP),通过从单个5D坐标 (x, y, z, θ, φ) 回归到单个体积密度和视角依赖的 RGB 颜色来表示该函数。

为了从特定视点渲染这个神经辐射场(NeRF),我们:

  1. 通过场景行进相机光线,生成一组采样的3D点;
  2. 使用这些点及其对应的2D视角方向作为神经网络的输入,产生一组颜色和密度输出;
  3. 使用经典的体积渲染技术将这些颜色和密度累积成2D图像。由于这个过程本质上是可微的,我们可以使用梯度下降来优化该模型,通过最小化每个观察图像与从我们的表示渲染的对应视图之间的误差。

在多个视图上最小化这个误差鼓励网络通过为包含真实底层场景内容的位置分配高体积密度和准确的颜色来预测场景的连贯模型。

我们发现,优化神经辐射场表示复杂场景的基本实现无法收敛到足够高分辨率的表示,并且每条相机光线所需的样本数量效率低下。我们通过位置编码转换输入5D坐标,使 MLP 能够表示更高频率的函数,并提出了一种层次采样程序,以减少充分采样这种高频场景表示所需的查询数量来解决这些问题。

我们的方法继承了体积表示的优点:两者都可以表示复杂的现实世界几何和外观,并且非常适合使用投影图像进行基于梯度的优化。关键是,我们的方法克服了在高分辨率建模复杂场景时离散体素网格的高存储成本。

总之,我们的技术贡献包括:

  • 一种用5D神经辐射场表示具有复杂几何和材料的连续场景的方法,该场景参数化为基本的 MLP 网络;
  • 一种基于经典体积渲染技术的可微渲染过程,我们使用它来从标准 RGB 图像优化这些表示。这包括一种层次采样策略,将 MLP 的容量分配给具有可见场景内容的空间;
  • 一种位置编码,将每个输入5D坐标映射到更高维度空间,使我们能够成功优化神经辐射场以表示高频场景内容。

我们证明了我们的方法在定量和定性上均优于最先进的视图合成方法,包括拟合神经3D表示的工作和训练深度卷积网络以预测采样体积表示的工作。据我们所知,这篇论文首次提出了能够从自然环境中捕获的 RGB 图像渲染高分辨率照片真实感新视图的连续神经场景表示。





〓 ReTURN 〓

计算机视觉领域的一个有前途的新方向是将物体和场景编码到一个 MLP 的权重中,直接从 3D 空间位置映射到形状的隐式表示,例如该位置的签名距离。然而,这些方法迄今为止还无法以与使用离散表示(如三角网格或体素网格)相同的保真度再现具有复杂几何形状的真实场景。

在本节中,我们回顾了这两类工作,并将它们与我们的方法进行对比。我们的方法增强了神经场景表示的能力,以产生复杂真实场景渲染的最先进结果。

使用 MLP 从低维坐标映射到颜色的类似方法也被用于表示其他图形函数,如图像、纹理材料和间接照明值。

神经 3D 形状表示

近期工作通过优化将 xyz 坐标映射到签名距离函数或占用字段的深度网络,研究了连续 3D 形状的隐式表示。然而,这些模型受到需要访问地面真相 3D 几何的限制,通常从合成 3D 形状数据集(如 ShapeNet)获取。

后续工作通过制定可微渲染函数放宽了对地面真相 3D 形状的要求,从而允许仅使用 2D 图像优化神经隐式形状表示。Niemeyer 等人将表面表示为 3D 占用字段,并使用数值方法找到每条光线的表面交点,然后使用隐式微分计算精确导数。Sitzmann 等人使用一种较不直接的神经 3D 表示,仅在每个连续的 3D 坐标上输出特征向量和 RGB 颜色,并提出了一种可微渲染函数,该函数由一个沿每条光线行进的循环神经网络组成,以确定表面位置。

虽然这些技术可以潜在地表示复杂和高分辨率的几何,但它们迄今为止仅限于具有低几何复杂度的简单形状,导致渲染结果过于平滑。我们展示了另一种策略,即优化网络以编码 5D 辐射场(具有 2D 视角依赖外观的 3D 体积),可以表示高分辨率的几何和外观,以渲染复杂场景的照片真实感新视图。

视图合成和基于图像的渲染

在视图密集采样的情况下,可以通过简单的光场采样插值技术重建照片真实感的新视图。对于视图稀疏采样的小说视图合成,计算机视觉和图形学社区通过从观察图像中预测传统几何和外观表示,取得了显著进展。一类流行的方法使用基于网格的场景表示,具有漫反射或视角依赖的外观。可微光栅化器或路径追踪器可以直接优化网格表示,以使用梯度下降重现一组输入图像。然而,基于图像重投影的梯度优化网格通常很困难,可能是因为局部极小值或损失景观的差调。此外,这种策略需要在优化之前提供具有固定拓扑的模板网格初始化,这对于不受限制的真实世界场景通常是不可用的。

另一类方法使用体积表示来从一组输入 RGB 图像中生成高质量的照片真实感视图合成。体积方法能够逼真地表示复杂形状和材料,非常适合基于梯度的优化,并且比基于网格的方法产生的视觉干扰伪影更少。早期的体积方法使用观察到的图像直接为体素网格着色。最近,一些方法使用多个场景的大型数据集训练深度网络,从一组输入图像预测采样体积表示,然后在测试时使用 alpha 混合或沿光线的学习混合来渲染新视图。其他工作优化了每个特定场景的卷积网络(CNN)和采样体素网格的组合,以便 CNN 可以补偿低分辨率体素网格的离散化伪影,或者允许预测的体素网格根据输入时间或动画控制变化。

虽然这些体积技术在新视图合成方面取得了令人印象深刻的结果,但由于其离散采样导致的时间和空间复杂性差,它们在高分辨率图像的扩展能力受到根本限制。我们通过在深度全连接神经网络的参数中编码一个连续体积来规避这个问题,这不仅比以前的体积方法产生显著更高质量的渲染,而且只需要这些采样体积表示的一小部分存储成本。





Neural Radiance Field Scene Representation

〓 ReTURN 〓

我们将连续场景表示为一个5D向量值函数,其输入是3D位置 $x = (x, y, z)$ 和2D视角方向 $(θ, φ)$,输出是发射颜色 $c = (r, g, b)$ 和体积密度 $\sigma$。在实际操作中,我们将方向表示为3D笛卡尔单位向量 $d$。我们用一个MLP网络 $F_Θ : (x, d) → (c, σ)$ 来近似这种连续的5D场景表示,并优化其权重 $\Theta$ 以将每个输入的5D坐标映射到其对应的体积密度和方向发射颜色。

我们通过限制网络预测体积密度 $\sigma$ 仅作为位置 $x$ 的函数,同时允许RGB颜色 $c$ 作为位置和视角方向的函数来鼓励表示多视图一致性。为实现这一点,MLP $F_Θ$ 首先用8个全连接层(使用ReLU激活函数和每层256个通道)处理输入的3D坐标 $x$,并输出 $\sigma$ 和一个256维的特征向量。然后将该特征向量与相机光线的视角方向连接起来,并传递给一个额外的全连接层(使用ReLU激活函数和128个通道),输出视角依赖的RGB颜色。

请参阅图3,了解我们的方法如何使用输入的视角方向来表示非朗伯效应。如图4所示,训练中没有视角依赖(仅以 $x$ 为输入)的模型在表示镜面反射方面存在困难。





Volume Rendering with Radiance Fields

〓 ReTURN 〓

我们的5D神经辐射场表示一个场景中的任何空间点的体积密度和方向发射辐射。我们使用经典体积渲染的原理来渲染穿过场景的光线颜色。体积密度 $\sigma(\mathbf{x})$ 可以解释为光线在位置 $\mathbf{x}$ 处终止于一个微小粒子的微分概率。相机光线 $\mathbf{r}(t)=\mathbf{o}+t \mathbf{d}$ 的预期颜色 $C(\mathbf{r})$ 在近处和远处边界 $t_n$ 和 $t_f$ 之间为:

$$
C(\mathbf{r})=\int_{t_n}^{t_f} T(t) \sigma(\mathbf{r}(t)) \mathbf{c}(\mathbf{r}(t), \mathbf{d}) d t
$$
其中
$$
T(t)=\exp \left(-\int_{t_n}^t \sigma(\mathbf{r}(s)) d s\right)
$$

函数 $T(t)$ 表示沿光线从 $t_n$ 到 $t$ 的累积透射率,即光线从 $t_n$ 到 $t$ 而不碰到任何其他粒子的概率。从我们的连续神经辐射场渲染一个视图需要估计穿过所需虚拟相机的每个像素的相机光线的这个积分 $C(\mathbf{r})$。

我们使用求积法数值估计这个连续积分。确定性求积法通常用于渲染离散体素网格,但这会有效地限制我们的表示的分辨率,因为 MLP 只能在固定的离散位置上查询。相反,我们使用分层采样方法,将 $[t_n, t_f]$ 分成 $N$ 个等间隔的区间,然后从每个区间内随机均匀地抽取一个样本:

$$
t_i \sim \mathcal{U}\left[t_n+\frac{i-1}{N}\left(t_f-t_n\right), t_n+\frac{i}{N}\left(t_f-t_n\right)\right]
$$

虽然我们使用离散样本集来估计积分,但分层采样使我们能够表示一个连续的场景表示,因为它使 MLP 在优化过程中在连续位置上进行评估。我们使用这些样本按照 Max 的体积渲染综述中讨论的求积规则来估计 $C(\mathbf{r})$:

$$
\hat{C}(\mathbf{r})=\sum_{i=1}^N T_i\left(1-\exp \left(-\sigma_i \delta_i\right)\right) \mathbf{c}_i
$$

其中 $$T_i=\exp \left(-\sum_{j=1}^{i-1} \sigma_j \delta_j\right)$$。

再其中 $\delta_i=t_{i+1}-t_i$ 是相邻样本之间的距离。这个函数从一组 $(\mathbf{c}_i, \sigma_i)$ 值计算 $\hat{C}(\mathbf{r})$ 是可微的,并简化为传统的 alpha 混合,alpha 值为 $\alpha_i=1-\exp \left(-\sigma_i \delta_i\right)$。




Optimizing a Neural Radiance Field

〓 ReTURN 〓

在前一节中,我们描述了将场景建模为神经辐射场并从该表示中渲染新视图的核心组件。然而,我们观察到这些组件不足以实现最先进的质量,如第6.4节所示。我们引入了两个改进,以便表示高分辨率复杂场景。首先是输入坐标的位置编码,这有助于MLP表示高频函数;其次是分层采样程序,允许我们高效地采样这种高频表示。

Positional encoding

尽管神经网络是通用函数逼近器,但我们发现让网络 $F_{\Theta}$ 直接操作 $x, y, z, \theta, \phi$ 输入坐标,在表示颜色和几何的高频变化方面表现不佳。这与最近Rahaman等人的研究一致,该研究表明深度网络倾向于学习低频函数。他们进一步表明,在将输入映射到更高维空间后再传递给网络,可以更好地拟合包含高频变化的数据。

我们在神经场景表示的上下文中利用这些发现,并表明将 $F_{\Theta}$ 重新表述为两个函数的组合 $F_{\Theta}=F_{\Theta}^{\prime} \circ \gamma$ ,一个是学习的,一个不是,可以显著提高性能。这里 $\gamma$ 是一个从 $\mathbb{R}$ 到更高维空间 $\mathbb{R}^{2L}$ 的映射, $F_{\Theta}^{\prime}$ 仍然是一个普通的MLP。我们使用的编码函数形式为:

$$
\gamma(p)=\left(\sin \left(2^0 \pi p\right), \cos \left(2^0 \pi p\right), \cdots, \sin \left(2^{L-1} \pi p\right), \cos \left(2^{L-1} \pi p\right)\right).
$$

该函数 $\gamma(\cdot)$ 分别应用于 $\mathbf{x}$ 的三个坐标值(归一化到 $[-1, 1]$)和笛卡尔视角方向单位向量 $\mathbf{d}$ 的三个分量(归一化到 $[-1, 1]$)。在我们的实验中,我们设置 $\gamma(\mathbf{x})$ 的 $L=10$ 和 $\gamma(\mathbf{d})$ 的 $L=4$。

类似的映射也被应用于流行的Transformer架构中,但目的是为序列中的离散位置提供输入,以便于没有顺序概念的架构中使用。相反,我们使用这些函数将连续输入坐标映射到更高维空间,以便我们的MLP更容易逼近高频函数。与研究3D蛋白质结构建模相关的并行工作也利用了类似的输入坐标映射。


Hierarchical volume sampling

我们通过在每条相机光线上评估神经辐射场网络的策略是低效的:自由空间和遮挡区域对渲染图像没有贡献,但仍然被反复采样。我们从早期的体积渲染工作中获得灵感,提出了一种分层表示,通过根据样本对最终渲染的预期影响分配样本来提高渲染效率。

我们同时优化两个网络:一个“粗略的”,一个“精细的”。首先,使用分层采样法采样一组 $N_c$ 位置,并在这些位置评估“粗略的”网络。根据“粗略的”网络的输出,我们沿着每条光线生成一个更有信息量的采样点,这些样本偏向于体积的相关部分。为此,我们首先将“粗略的”网络的alpha混合颜色 $\hat{C}_c(r)$ 重写为沿光线的所有采样颜色 $c_i$ 的加权和:

$$
\hat{C}c(r)=\sum{i=1}^{N_c} w_i c_i
$$,

$$
w_i=T_i\left(1-\exp \left(-\sigma_i \delta_i\right)\right)
$$

将这些权重归一化为$\hat{w}i=\frac{w_i}{ \sum{j=1}^{N_c}w_j}$,生成沿光线的分段常数PDF。我们使用逆变换采样法从该分布中采样第二组 $N_f$ 位置,并在第一组和第二组样本的联合上评估我们的“精细的”网络,使用所有 $N_c + N_f$ 样本计算最终渲染颜色$\hat{C}_f(r)$。这个过程为我们预期包含可见内容的区域分配了更多样本。这个目标与重要性采样相似,但我们将采样值视为整个积分域的非均匀离散化,而不是将每个样本视为整个积分的独立概率估计。

Implementation details

我们为每个场景优化一个独立的神经连续体积表示网络。这仅需要场景的RGB图像数据集、相应的相机姿态和内在参数以及场景边界(对于合成数据,我们使用真实的相机姿态、内在参数和边界;对于真实数据,我们使用COLMAP结构光恢复包来估算这些参数)。

在每次优化迭代中,我们从数据集中所有像素的集合中随机采样一批相机光线,然后按照第5.2节所述的分层采样,从粗网络中查询 $N_c$ 个样本,从精网络中查询 $N_c+N_f$ 个样本。接着,我们使用第4节描述的体积渲染程序,从这两组样本中渲染每条光线的颜色。我们的损失函数是渲染颜色和真实像素颜色之间的总平方误差:

$$
\mathcal{L}=\sum_{\mathbf{r} \in \mathcal{R}}\left[\left|\hat{C}_c(\mathbf{r})-C(\mathbf{r})\right|_2^2+\left|\hat{C}_f(\mathbf{r})-C(\mathbf{r})\right|_2^2\right]
$$

其中 $\mathcal{R}$ 是每批次的光线集合, $C(\mathbf{r}), \hat{C}_c(\mathbf{r})$ 和 $\hat{C}_f(\mathbf{r})$ 分别是光线 $\mathbf{r}$ 的真实RGB颜色、粗体积预测颜色和精体积预测颜色。尽管最终渲染来自 $\hat{C}_f(\mathbf{r})$,我们也最小化 $\hat{C}_c(\mathbf{r})$ 的损失,以便粗网络的权重分布可以用于精网络的样本分配。

在我们的实验中,我们使用4096条光线的批次大小,每条光线在粗体积中采样64个坐标,在精体积中额外采样128个坐标。我们使用Adam优化器,学习率初始为 $5 \times 10^{-4}$ 并在优化过程中指数衰减到 $5 \times 10^{-5}$(其他Adam超参数保持默认值 $\beta_1=0.9, \beta_2=0.999$ 和 $\epsilon=10^{-7}$)。单个场景的优化通常在一张NVIDIA V100 GPU上需要大约100到300千次迭代(约1-2天)才能收敛。




Results

〓 ReTURN 〓

数据集

合成物体渲染 我们首先在两个合成物体渲染数据集上展示实验结果(表1,“Diffuse Synthetic $360^{\circ}$” 和 “Realistic Synthetic $360^{\circ}$”)。DeepVoxels 数据集包含四个具有简单几何形状的朗伯对象。每个对象从上半球的视点渲染,分辨率为512x512像素(479个作为输入,1000个用于测试)。我们还生成了包含八个对象的路径追踪图像的数据集,这些对象展示了复杂的几何形状和现实的非朗伯材料。六个对象从上半球的视点渲染,两个对象从全球的视点渲染。每个场景渲染100个视图作为输入,200个视图用于测试,分辨率为800x800像素。

复杂场景的真实图像 我们展示了用大致前向图像捕获的复杂真实世界场景的结果(表1,“Real ForwardFacing”)。该数据集包含用手持手机捕获的8个场景(5个来自LLFF论文,3个由我们捕获),捕获了20到62张图像,并保留1/8的图像用于测试集。所有图像的分辨率为1008x756像素。

比较

为了评估我们的模型,我们与当前性能最好的视图合成技术进行了比较。所有方法使用相同的输入视图集来为每个场景训练一个单独的网络,除了Local Light Field Fusion (LLFF),它在一个大型数据集上训练单个3D卷积网络,然后使用相同的训练网络处理新场景的输入图像。

Neural Volumes (NV) 合成在一个有界体积内并位于独特背景前的对象的新视图。它优化一个深度3D卷积网络来预测包含128^3个样本的离散化RGB alpha体素网格,以及包含32^3个样本的3D变形网格。算法通过在变形体素网格中行进相机光线来渲染新视图。

Scene Representation Networks (SRN) 将连续场景表示为不透明表面,由MLP隐式定义,该MLP将每个 (x, y, z) 坐标映射到一个特征向量。他们训练一个循环神经网络通过使用任何3D坐标处的特征向量来预测沿光线的下一个步长,从而在场景表示中行进光线。最终步长的特征向量被解码为该表面点的单一颜色。SRN是同一作者在DeepVoxels基础上的更好表现的后续研究,因此我们没有包括DeepVoxels的比较。

Local Light Field Fusion (LLFF) 设计用于为采样良好的前向场景生成照片真实感的新视图。它使用训练好的3D卷积网络直接预测每个输入视图的离散化棱锥采样RGB alpha网格(多平面图像或MPI),然后通过alpha混合和混合附近的MPI来渲染新视图。

讨论

我们在所有场景中全面超越了NV和SRN基线。此外,我们生成的渲染在定量和定性上优于LLFF(除了一个指标),而仅使用它们的输入图像作为我们的整个训练集。SRN方法生成了高度平滑的几何形状和纹理,其视图合成表示能力受限于每条相机光线仅选择单一深度和颜色。NV基线能够捕获合理详细的体积几何和外观,但其使用的128^3体素网格限制了它在高分辨率下表示细节的能力。LLFF提供了一个“采样指南”,建议输入视图之间的视差不超过64像素,因此在合成数据集中包含400-500像素视差时,常常无法估计正确的几何。此外,LLFF在渲染不同视图时在不同场景表示之间进行混合,导致感知上分散的不一致性。

这些方法之间最大的实际权衡是时间与空间。所有比较的单场景方法每个场景的训练时间至少为12小时。相比之下,LLFF可以在10分钟内处理一个小输入数据集。然而,LLFF为每个输入图像生成一个大的3D体素网格,导致巨大的存储需求(一个“Realistic Synthetic”场景超过15GB)。我们的方法只需要5MB的网络权重(相对于LLFF的3000倍压缩),甚至比我们任何数据集中单个场景的输入图像本身所需的内存还少。

消融研究

我们在表2中通过广泛的消融研究验证了算法的设计选择和参数。我们在“Realistic Synthetic $360^{\circ}$”场景上展示结果。第9行显示了作为参考点的完整模型。第1行显示了没有位置编码(PE)、视角依赖(VD)或分层采样(H)的最小化版本模型。在第2-4行中,我们从完整模型中逐一移除这三个组件,观察到位置编码(第2行)和视角依赖(第3行)提供了最大的定量益处,其次是分层采样(第4行)。第5-6行显示了输入图像数量减少时我们的性能下降。请注意,我们的方法使用仅25个输入图像时的性能仍然超过了NV、SRN和LLFF在提供100个图像时的所有指标(见补充材料)。在第7-8行中,我们验证了用于 $\mathbf{x}$ 的位置编码的最大频率 $L$ 的选择(用于 $\mathbf{d}$ 的最大频率按比例缩放)。仅使用5个频率会降低性能,但将频率从10增加到15并不能提高性能。我们认为,随着 $2^L$ 超过采样输入图像中的最大频率(大约1024),增加 $L$ 的益处有限。






Conclusion

〓 ReTURN 〓

我们的工作直接解决了使用MLPs(多层感知器)将物体和场景表示为连续函数的前人工作的不足。我们证明了将场景表示为5D神经辐射场(一个以3D位置和2D视角为函数输出体积密度和视角相关发射辐射的MLP)比之前主流的训练深度卷积网络输出离散体素表示的方法产生更好的渲染效果。

尽管我们提出了分层采样策略以提高渲染的采样效率(适用于训练和测试),但在高效优化和渲染神经辐射场的技术研究方面仍有很大进展空间。未来的另一个研究方向是可解释性:如体素网格和网格这样的采样表示允许对渲染视图的预期质量和失败模式进行推理,但当我们将场景编码在深度神经网络的权重中时,如何分析这些问题尚不明确。

我们相信,这项工作在基于真实世界图像的图形管道方面取得了进展,其中复杂场景可以由从实际物体和场景图像中优化的神经辐射场组成。




参考资料

〓 ReTURN 〓

  1. https://www.bilibili.com/video/BV1CC411V7oq/?spm_id_from=333.337.search-card.all.click&vd_source=79dd75bdbe89b6c71e9e0bb394ba77d4
作者

Jiawei Li

发布于

2024-06-11

更新于

2024-06-11

许可协议