NerF
NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
作者:Ben Mildenhall, Pratul P. Srinivasan, Matthew Tancik, Jonathan T. Barron, Ravi Ramamoorthi, Ren Ng
https://arxiv.org/abs/2003.08934
https://www.matthewtancik.com/nerf
https://youtu.be/JuH79E8rdKc
https://github.com/bmild/nerf
摘要:我们提出了一种通过使用稀疏的输入视图集来优化底层连续体积场景函数来实现复杂场景新视图合成的最先进结果的方法。我们的算法表示使用完全连接(非卷积)深度网络的场景,其输入是单个连续5D坐标(空间位置和观察方向),其输出是该空间位置的体积密度和视角相关的发射辐射(emitted radiance)。我们通过沿相机光线查询5D坐标来合成视图,并使用经典的体绘制(volume rendering)技术将输出颜色和密度投影到图像中。因为体绘制是自然可微的,所以优化表示所需的唯一输入是一组具有已知相机姿势的图像。我们描述了如何有效地优化神经辐射场,以渲染具有复杂几何和外观的场景的照片级真实感新视图,并展示了优于先前神经渲染和视图合成工作的结果。视图合成结果最好以视频形式查看,因此我们敦促读者查看我们的补充视频,以便进行令人信服的比较。
We present a method that achieves state-of-the-art results for synthesizing novel views of complex scenes by optimizing an underlying continuous volumetric scene function using a sparse set of input views. Our algorithm represents a scene using a fully-connected (non-convolutional) deep network, whose input is a single continuous 5D coordinate (spatial location (x,y,z) and viewing direction (θ,ϕ)) and whose output is the volume density and view-dependent emitted radiance at that spatial location. We synthesize views by querying 5D coordinates along camera rays and use classic volume rendering techniques to project the output colors and densities into an image. Because volume rendering is naturally differentiable, the only input required to optimize our representation is a set of images with known camera poses. We describe how to effectively optimize neural radiance fields to render photorealistic novel views of scenes with complicated geometry and appearance, and demonstrate results that outperform prior work on neural rendering and view synthesis. View synthesis results are best viewed as videos, so we urge readers to view our supplementary video for convincing comparisons.
1 引言
在这项工作中,我们以一种新的方式解决了长期存在的视图合成问题,通过直接优化连续5D场景表示的参数来最小化渲染一组捕获图像的误差。
我们将静态场景表示为一个连续的5D函数,该函数输出空间中每个点在每个方向上发射的辐射,以及每个点上的密度,其作用类似于微分不透明度,控制光线通过累积的辐射量。我们的方法通过从单个5D坐标回归到单个体积密度和视角相关的RGB颜色,优化了一个没有任何卷积层的深度全连接神经网络(通常称为多层感知器或MLP)来表示此函数。为了从特定视角渲染此神经辐射场(NeRF),我们:1)让相机光线穿过场景以生成一组采样的3D点,2)使用这些点及其相应的2D观察方向作为神经网络的输入,以生成颜色和密度的输出集,3)使用经典的体绘制技术将这些颜色和密度累积到2D图像中。因为这个过程是自然可微的,我们可以使用梯度下降来优化这个模型,通过最小化每个观察图像和从我们的表示中渲染的相应视图之间的误差。通过在多个视图中最小化此误差,可以鼓励网络通过为位置分配高体积密度和精确的颜色(这包含了真实基础场景内容)来预测场景的一致模型。图2显示了整个流程。
We represent a static scene as a continuous 5D function that outputs the radiance emitted in each direction (θ, φ) at each point (x, y, z) in space, and a density at each point which acts like a differential opacity controlling how much radiance is accumulated by a ray passing through (x, y, z). Our method optimizes a deep fully-connected neural network without any convolutional layers (often referred to as a multilayer perceptron or MLP) to represent this function by regressing from a single 5D coordinate (x, y, z, θ, ϕ) to a single volume density and view-dependent RGB color. To render this neural radiance field (NeRF) from a particular viewpoint we: 1) march camera rays through the scene to generate a sampled set of 3D points, 2) use those points and their corresponding 2D viewing directions as input to the neural network to produce an output set of colors and densities, and 3) use classical volume rendering techniques to accumulate those colors and densities into a 2D image. Because this process is naturally differentiable, we can use gradient descent to optimize this model by minimizing the error between each observed image and the corresponding views rendered from our representation. Minimizing this error across multiple views encourages the network to predict a coherent model of the scene by assigning high volume densities and accurate colors to the locations that contain the true underlying scene content. Figure 2 visualizes this overall pipeline.
图2:我们的神经辐射场场景表示和微分渲染过程的概述。我们通过沿相机光线采样5D坐标(位置和观察方向)(图a),将这些位置输入MLP以生成颜色和体积密度(图b),并使用体绘制技术将这些值合成图像(c),从而合成图像。该渲染函数是可微的,因此我们可以通过最小化合成图像和真值观测图像(d)之间的残差来优化场景表示。我们发现,对于复杂场景,优化神经辐射场表示的基本实现没有收敛到足够高的分辨率表示,并且在每个摄影机光线所需的采样数效率低下。我们通过使用位置编码来转换输入5D坐标来解决这些问题,该位置编码使MLP能够表示更高频率的函数,并且我们提出了一种分层采样过程,以减少对这种高频场景表示进行充分采样所需的查询数。
We find that the basic implementation of optimizing a neural radiance field representation for a complex scene does not converge to a sufficiently highresolution representation and is inefficient in the required number of samples per camera ray. We address these issues by transforming input 5D coordinates with a positional encoding that enables the MLP to represent higher frequency functions, and we propose a hierarchical sampling procedure to reduce the number of queries required to adequately sample this high-frequency scene representation.
我们的方法继承了体积表示的优点:两者都可以表示复杂的真实世界几何体和外观,并且非常适合使用投影图像进行基于梯度的优化。重要的是,我们的方法克服了在高分辨率下建模复杂场景时,离散化体素网格的高昂存储成本。总之,我们的技术贡献是:
(1)一种将具有复杂几何体和外观的连续场景表示为5D神经辐射场的方法,参数化为基本MLP网络。
(2)基于经典体绘制技术的可微分渲染过程,我们使用该过程从一些标准RGB图像来优化这些表示。这包括分层采样策略,用于将MLP的容量分配给具有可见场景内容的空间。A differentiable rendering procedure based on classical volume rendering techniques, which we use to optimize these representations from standard RGB images. This includes a hierarchical sampling strategy to allocate the MLP’s capacity towards space with visible scene content.
(3)将每个输入5D坐标映射到更高维空间的位置编码,使我们能够成功优化神经辐射场以表示高频场景内容。
我们证明,我们得到的神经辐射场方法在定量和定性上都优于最先进的视图合成方法,包括将神经3D表示与场景拟合的工作,以及训练深度卷积网络以预测采样体积表示的工作。据我们所知,本文提出了第一个连续的神经场景表示方法,它能够从自然环境中捕获的RGB图像中渲染真实对象和场景的高分辨率照片级真实感新视图。
2 相关工作
计算机视觉中最近一个很有希望的方向是用MLP的权重对对象和场景进行编码,MLP直接从三维空间位置映射到形状的隐式表示,例如该位置的有符号距离[6]。然而,到目前为止,这些方法无法以与使用离散表示(如三角形网格或体素网格)表示场景的技术相同的保真度再现具有复杂几何体的真实场景。在本节中,我们将回顾这两项工作,并将其与我们的方法进行对比,我们的方法增强了神经场景表示的能力,以产生用于渲染复杂真实场景的最新结果。
使用MLP从低维坐标映射到颜色的类似方法也用于表示其他图形功能,如图像[44]、纹理材质[12,31,36,37]和间接照明值[38]。
神经三维形状表示 最近的工作研究了通过优化将坐标映射到有符号距离函数(15,32)或occupancy fields(11,27)的深层网络,将连续3D形状隐式表示为level sets。然而,这些模型受限于要获取真值三维几何体,这些几何体通常是从ShapeNet等合成三维形状数据集获得的。随后的工作通过制定可微分的渲染函数放松了对真值3D形状的要求,该函数允许仅使用2D图像优化神经隐式形状表示。Niemeyer等人[29]将曲面表示为3D occupancy fields,并使用数值方法找到每条光线的曲面交点,然后使用隐式微分计算精确导数。每个光线相交位置都作为神经3D纹理场的输入,该纹理场预测该点的漫反射颜色。Sitzmann等人[42]使用了一种不太直接的神经3D表示法,只需在每个连续3D坐标处输出一个特征向量和RGB颜色,并提出了一种可微分的渲染函数,该函数由沿每条射线行进的递归神经网络组成,以确定曲面的位置。
虽然这些技术可能表示复杂和高分辨率的几何体,但迄今为止,它们仅限于几何复杂度较低的简单形状,导致渲染过平滑。我们表明,优化网络以编码5D辐射场(具有2D视图相关的外观的3D体积,3D volumes with 2D view-dependent appearance)的替代策略可以表示更高分辨率的几何体和外观,以渲染复杂场景的照片级真实感新视图。
视图合成和基于图像的绘制 给定视图的密集采样,可以通过简单的光场采样插值技术重建照片级真实感的新视图[21,5,7]。对于具有稀疏视图采样的新型视图合成,计算机视觉和图形社区通过从观察图像预测传统几何和外观表示取得了重大进展。一种流行的方法是使用基于网格的场景表示,具有漫反射(48)或依赖于视图(2,8,49)的外观。可微 rasterizers(4,10,23,25)或 pathtracers(22,30)可以直接优化网格表示,以使用梯度下降法再现一组输入图像。然而,基于图像重投影的基于梯度的网格优化往往很困难,可能是因为局部极小值或损失景观条件较差(local minima or poor conditioning of the loss landscape)。此外,该策略要求在优化之前提供具有固定拓扑的模板网格作为初始化[22],这通常不适用于无约束的真实场景。
另一类方法使用体积表示来解决从一组输入RGB图像合成高质量照片级真实感视图的任务。体积方法能够真实地表示复杂的形状和材料,非常适合基于梯度的优化,并且与基于网格的方法相比,产生的视觉干扰(distracting artifacts)较小。早期的体积方法使用观察到的图像直接为体素网格着色[19,40,45]。最近,有几种方法[9,13,17,28,33,43,46,52]使用多个场景的大型数据集来训练深层网络,这些网络从一组输入图像预测采样的体积表示,然后使用alpha合成[34]或沿光线学习合成来在测试时渲染新视图。其他作品优化了每个特定场景的卷积网络(CNN)和采样体素网格的组合,以便CNN可以补偿来自低分辨率体素网格的离散化伪影[41],或者允许预测的体素网格根据输入时间或动画控制发生变化[24]。虽然这些体积技术在新视图合成方面取得了令人印象深刻的成果,但由于其离散采样,其缩放到更高分辨率图像的能力从根本上受到时间和空间复杂性差的限制-渲染更高分辨率图像需要更精细的3D空间采样。我们通过用深度全连接神经网络的参数来编码连续的体积来避免这个问题,这不仅产生比以前的体积方法更高质量的渲染,而且存储成本相比采样体积表示方法占比很小。
3 神经辐射场场景表示
我们将连续场景表示为5D向量值函数,其输入为3D位置和2D观察方向,其输出为发射颜色和体积密度。实际上,我们将方向表示为三维笛卡尔单位向量。我们使用MLP网络近似这种连续的5D场景表示,并优化其权重,以从每个输入5D坐标映射到其相应的体积密度和方向发射颜色。
我们通过这样的限制来鼓励表示具有多视图一致性:将预测体积密度作为仅仅与位置相关的函数,而预测的颜色既与位置相关也与观察方向相关。为了实现这一点,MLP首先用8个全连接层(ReLU激活,每层256通道)处理输入的3D坐标,并输出和256维特征向量。然后将该特征向量与相机光线的观察方向拼接,并传递到另一个全连接层(ReLU激活,128通道),该层输出与视图相关的RGB颜色。
请参见图3,以获取我们的方法如何使用输入观察方向来表示非朗伯效应的示例。如图4所示,在没有视图依赖性的情况下训练的模型(只有x作为输入)很难表示镜面反射。
4 具有辐射场的体绘制
我们的5D神经辐射场将场景表示为空间任意点的体积密度和定向发射辐射(directional emitted radiance)。我们使用经典体绘制的原理渲染穿过场景的任何光线的颜色[16]。体积密度可解释为射线终止于位置处无穷小粒子的微分概率。近边界为、远边界为的相机射线的期望颜色为:
, (1)
其中
Our 5D neural radiance field represents a scene as the volume density and directional emitted radiance at any point in space. We render the color of any ray passing through the scene using principles from classical volume rendering~\cite{kajiya84}. The volume density $\sigma(\mathbf{x})$ can be interpreted as the differential probability of a ray terminating at an infinitesimal particle at location $\mathbf{x}$. The expected color $C(\mathbf{r})$ of camera ray $\mathbf{r}(t)=\mathbf{o} + t\mathbf{d}$ with near and far bounds $\timenear$ and $\timefar$ is:
函数表示沿光线从到的累积透射率(accumulated transmittance),即光线从到传播而不撞击任何其他粒子的概率。从我们的连续神经辐射场渲染视图需要估计通过所需虚拟相机的每个像素跟踪的相机光线的积分。
The function $T(t)$ denotes the accumulated transmittance along the ray from $\timenear$ to $t$, \ie the probability that the ray travels from $\timenear$ to $t$ without hitting any other particle. Rendering a view from our continuous neural radiance field requires estimating this integral $\Ctrue$ for a camera ray traced through each pixel of the desired virtual camera.
我们使用求积法来估计这个连续积分。确定性求积通常用于绘制离散体素网格,这将有效限制我们表示的分辨率,因为MLP只能在固定的离散位置集上查询。相反,我们使用分层抽样方法,将划分为N个均匀间隔的bins,然后从每个bin内均匀随机抽取一个样本:
(2)
虽然我们使用一组离散的样本来估计积分,但分层采样使我们能够表示连续的场景表示,因为它会导致在优化过程中在连续位置对MLP进行评估。我们使用这些样本来估计,并使用Max[26]的volume rendering review中讨论的求积规则[26]:
, (3)
其中
其中是相邻样本之间的距离。这个从集合计算的函数是可微的( trivially differentiable),并简化为传统的合成,值为。
5 优化神经辐射场
在上一节中,我们已经描述了将场景建模为神经辐射场和从该表示中渲染新视图所需的核心组件。然而,我们观察到,如第6.4节所示,这些组件不足以达到最先进的质量。我们引入了两项改进,以支持表示高分辨率复杂场景。第一种是输入坐标的位置编码,有助于MLP表示高频函数,第二种是分层采样过程,允许我们有效地对高频表示进行采样。
5.1 位置编码
尽管神经网络是通用函数逼近器[14],但我们发现,如果网络直接处理输入坐标,则会导致渲染在表示颜色和几何体的高频变化方面表现不佳。这与Rahaman等人[35]最近的工作一致,这表明深层网络倾向于学习低频函数。他们还表明,在将输入传递到网络之前,使用高频函数将输入映射到更高维空间,可以更好地拟合包含高频变化的数据。
(编者注:文献35是 On the spectral bias of neural networks,https://arxiv.org/abs/1806.08734 ,ICML2018,Yoshua Bengio组的工作)
我们在神经场景表示的背景下利用这些发现,并表明将FΘ重新格式化为两个函数的组合,一个是可学习的,一个不是,可显著提高性能(见图4和表2)。这里是从到高维空间的映射,而仍然只是一个常规MLP。形式上,我们使用的编码函数是:
(4)
该函数分别应用于中的三个坐标值(被归一化到[−1, 1])中的每一个和笛卡尔观察方向单位向量的三个分量(其构造为在[−1, 1]之间)。在我们的实验中,我们为设置了L=10,为设置了L=4。
在流行的Transformer架构中使用了类似的映射[47],在这里它被称为位置编码。然而,Transformers将其用于一个不同的目标,即提供序列中令牌的离散位置,作为不包含任何顺序概念的架构的输入。相反,我们使用这些函数将连续输入坐标映射到更高维空间,以使我们的MLP更容易逼近更高频的函数。根据投影建立3D蛋白质结构模型相关问题的并行工作[51]也利用了类似的输入坐标映射。
5.2 分层体积取样 Hierarchical volume sampling
我们的渲染策略是在每个摄影机光线的N个查询点处密集评估神经辐射场网络,这种策略效率低下:对渲染图像没有贡献的自由空间和遮挡区域仍然重复采样。我们从早期的体绘制工作中汲取了灵感[20],并提出了一种分层表示法,通过按最终渲染的预期效果按比例分配样本来提高渲染效率。
Our rendering strategy of densely evaluating the neural radiance field network at N query points along each camera ray is inefficient: free space and occluded regions that do not contribute to the rendered image are still sampled repeatedly. We draw inspiration from early work in volume rendering [20] and propose a hierarchical representation that increases rendering efficiency by allocating samples proportionally to their expected effect on the final rendering.
我们不只是使用单个网络来表示场景,而是同时优化两个网络:一个“粗略”,一个“精细”。我们首先使用分层(stratified)抽样对一组Nc位置进行抽样,并评估这些位置的“粗略”网络,如公式(2)和(3)所述。以这个“粗略”网络的输出作为输入,然后我们沿着每条射线生成一个更informed的点采样,其中样本偏向于体积的相关部分。要做到这一点,我们首先重写公式(3)中粗网络的alpha合成颜色,将其重写为沿光线的所有采样颜色的加权和:
Instead of just using a single network to represent the scene, we simultaneously optimize two networks: one ``coarse'' and one ``fine''. We first sample a set of $\numsamplescoarse$ locations using stratified sampling, and evaluate the ``coarse'' network at these locations as described in Eqns.~\ref{eq:stratified} and \ref{eqn:render_coarse}. Given the output of this ``coarse'' network, we then produce a more informed sampling of points along each ray where samples are biased towards the relevant parts of the volume. To do this, we first rewrite the alpha composited color from the coarse network $\Ccoarse$ in Eqn.~\ref{eqn:render_coarse} as a weighted sum of all sampled colors $c_i$ along the ray:
, (5)
将这些权重归一化为会产生一个沿着光线的分段常数PDF(piecewise-constant PDF)。我们使用逆变换采样从该分布中采样第二组位置,在第一组和第二组采样的并集处评估我们的“精细”网络,并使用公式(3)来计算光线的最终渲染颜色,但使用所有样本。此过程会将更多样本分配给我们希望包含可见内容的区域。这与重要性抽样的目标类似,但我们将抽样值用作整个积分域的非均匀离散化,而不是将每个样本视为整个积分的独立概率估计。
Normalizing these weights as $\normpweight_i = \nicefrac{\pweight_i}{\sum_{j=1}^{\numsamplescoarse} \pweight_j}$ produces a piecewise-constant PDF along the ray. We sample a second set of $\numsamplesfine$ locations from this distribution using inverse transform sampling, evaluate our ``fine'' network at the union of the first and second set of samples, and compute the final rendered color of the ray $\Cfine$ using Eqn.~\ref{eqn:render_coarse} but using all $\numsamplescoarse+\numsamplesfine$ samples. This procedure allocates more samples to regions we expect to contain visible content. This addresses a similar goal as importance sampling, but we use the sampled values as a nonuniform discretization of the whole integration domain rather than treating each sample as an independent probabilistic estimate of the entire integral.
5.3 实施细节
我们为每个场景优化一个单独的神经连续体积表示网络。这只需要场景的捕获RGB图像数据集、相应的相机姿势和内部参数以及场景边界(对于合成数据,我们使用真值相机姿势、内部参数和边界;对于真实数据,我们使用COLMAP structure-from-motion package [39] 来估计这些参数。在每次优化迭代中,我们从数据集中的所有像素集中随机采样一批相机光线,然后按照第5.2节中描述的分层采样,从粗网络查询个样本,从细网络查询个样本。然后,我们使用第4节中描述的体渲染过程,渲染两组样本中每条光线的颜色。我们的损失只是粗略和精细渲染的渲染和真实像素颜色之间的总平方误差:
其中,是每个批量中的光线集,、和分别是光线的真值、粗体积预测和精细体积预测的RGB颜色。请注意,即使最终渲染来自,我们也会尽量减少的损失,以便可以使用粗网络的权重分布在细网络中分配样本。
we also minimize the loss of $\Ccoarse$ so that the weight distribution from the coarse network can be used to allocate samples in the fine network.
在我们的实验中,我们使用的batch size为4096条光线,在粗体积中,每条光线在=64个坐标处采样,在细体积中,每条射线在=128个额外坐标处采样。我们使用Adam优化器,其学习率在优化过程中从指数衰减至(其他Adam超参数保留为默认值β1=0.9、β2=0.999和c=10−7 )。单个场景的优化通常需要大约100–300k次迭代才能在单个NVIDIA V100 GPU上收敛(大约1–2天)。
In our experiments, we use a batch size of 4096 rays, each sampled at $\numsamplescoarse=64$ coordinates in the coarse volume and $\numsamplesfine=128$ additional coordinates in the fine volume. We use the Adam optimizer~\cite{KingmaB15} with a learning rate that begins at $5 \times 10^{-4}$ and decays exponentially to $5 \times 10^{-5}$ over the course of optimization (other Adam hyperparameters are left at default values of $\beta_1=0.9$, $\beta_2=0.999$, and $\epsilon=10^{-7}$). The optimization for a single scene typically take around 100--300k iterations to converge on a single NVIDIA V100 GPU (about 1--2 days).
6 结果
我们定量(表1)和定性(图8和图6)表明,我们的方法优于之前的工作,并提供了广泛的烧蚀研究来验证我们的设计选择(表2)。我们敦促读者观看我们的补充视频,以便更好地欣赏我们的方法在绘制新视图的平滑路径时,比基线方法有了显著的改进。
6.1 数据集
物体的合成渲染
我们首先展示了两个物体合成渲染数据集的实验结果(表1,Diffuse Synthetic360°和Realistic Synthetic360°)。 DeepVoxels[41]数据集包含四个具有简单几何体的Lambertian对象。从上半球采样的视点(479作为输入,1000用于测试)以512×512像素渲染每个对象。此外,我们还生成自己的数据集,其中包含八个对象的路径跟踪图像,这些对象显示复杂的几何体和真实的非朗伯材质。六个从上半球采样的视点渲染,两个从全球体采样的视点渲染。我们渲染每个场景的100个视图作为输入,200个视图用于测试,所有视图均为800×800像素。
We first show experimental results on two datasets of synthetic renderings of objects (Table~\ref{table:results}, ``Diffuse Synthetic $360\degree$'' and ``Realistic Synthetic $360\degree$''). The DeepVoxels~\cite{deepvoxels} dataset contains four Lambertian objects with simple geometry. Each object is rendered at $512\times 512$ pixels from viewpoints sampled on the upper hemisphere (479 as input and 1000 for testing). We additionally generate our own dataset containing pathtraced images of eight objects that exhibit complicated geometry and realistic non-Lambertian materials. Six are rendered from viewpoints sampled on the upper hemisphere, and two are rendered from viewpoints sampled on a full sphere. We render 100 views of each scene as input and 200 for testing, all at $800\times 800$ pixels.
复杂场景的真实图像
我们展示了使用大致前向图像捕获的复杂真实场景的结果(表1,“真实前向”)。该数据集由手持手机拍摄的8个场景组成(5个来自LLFF纸,3个我们拍摄),20到62幅图像,其中1/8用于测试集。所有图像均为1008×756像素。
We show results on complex real-world scenes captured with roughly forward-facing images (Table~\ref{table:results}, ``Real Forward-Facing''). This dataset consists of 8 scenes captured with a handheld cellphone (5 taken from the LLFF paper and 3 that we capture), captured with 20 to 62 images, and hold out $\nicefrac{1}{8}$ of these for the test set. All images are $1008 \times 756$ pixels.
6.2 比较
为了评估我们的模型,我们将其与当前最佳视图合成技术进行比较,详情如下。所有方法都使用相同的输入视图集为每个场景训练单独的网络,但局部光场融合除外[28],局部光场融合在大型数据集上训练单个3D卷积网络,然后使用相同的训练网络在测试时处理新场景的输入图像。
神经体积(Neural Volumes,NV)[24]综合了对象的新颖视图,这些对象完全位于不同背景前的有界体积内(必须在没有感兴趣对象的情况下单独捕获)。它优化了深三维卷积网络,以预测1283个样本的离散化RGBα体素网格以及323个样本的三维扭曲网格。该算法通过将相机光线穿过扭曲的体素网格来渲染新视图。
场景表示网络(Scene Representation Networks,SRN)[42]将连续场景表示为不透明曲面,由MLP隐式定义,MLP将每个坐标映射到特征向量。他们训练一个递归神经网络,通过在任何3D坐标下使用特征向量预测光线下一步的大小,沿着光线在场景表示中行进。最后一步的特征向量被解码为曲面上该点的单色。请注意,SRN是同一作者对DeepVoxels[41]的一个更好的后续研究,这就是为什么我们不包括与DeepVoxels的比较
局部光场融合(LLFF)[28]LLFF设计用于为采样良好的前向场景生成照片级真实感的新视图。它使用经过训练的三维卷积网络直接预测每个输入视图的离散化截锥采样RGBα网格(多平面图像或MPI[52]),然后通过alpha合成并将附近的MPI混合到新视点中来渲染新视图。
6.3 讨论
在所有场景中,我们的性能都优于两个基线,这两个基线还优化了每个场景的单独网络(NV和SRN)。此外,与LLFF相比,我们在质量和数量上都提供了更好的渲染效果(除一个指标外的所有指标),同时仅使用其输入图像作为整个训练集。
SRN方法生成高度平滑的几何体和纹理,其视图合成的表示能力受到限制,因为每个摄影机光线仅选择一个深度和颜色。NV基线能够捕获合理详细的体积几何体和外观,但其使用的基础显式1283体素栅格阻止其缩放以高分辨率表示精细细节。LLFF特别提供了一个“采样准则”,即输入视图之间的视差不超过64像素,因此它经常无法估计合成数据集中包含多达400-500像素视差的正确几何图形。此外,LLFF在不同的场景表示之间进行混合,以渲染不同的视图,导致视觉上的不一致,这在我们的补充视频中很明显。
这些方法之间最大的实际权衡是时间与空间。所有比较过的单场景方法每个场景至少需要12小时的训练。相比之下,LLFF可以在10分钟内处理一个小的输入数据集。然而,LLFF为每个输入图像生成一个大的3D体素网格,导致巨大的存储需求(对于一个“真实合成”场景超过15GB)。我们的方法只需要5 MB的网络权重(与LLFF相比,相对压缩3000倍),这甚至比我们的任何数据集中单个场景的输入图像的内存更少。
6.4 烧蚀研究
我们通过表2中的广泛烧蚀研究验证了我们算法的设计选择和参数。我们在“Realistic Synthetic360°”上展示了结果◦” 场景。第9行显示了作为参考点的完整模型。第1行显示了我们的模型的最简版本,没有位置编码(PE)、视图相关(view-dependence,VD)或分层采样(H)。在第2-4行中,我们从完整模型中一次删除这三个组件,观察到位置编码(第2行)和视图依赖(第3行)提供了最大的量化效益,然后是分层抽样(第4行)。第5-6行显示了随着输入图像数量的减少,我们的性能如何下降。请注意,我们的方法仅使用25个输入图像的性能在所有指标中仍超过使用100张图像的NV、SRN和LLFF,而在提供100个图像。在第7–8行中,我们验证了在的位置编码中使用的最大频率的选择(用于的最大频率按比例缩放)。仅使用5个频率会降低性能,但将频率数从10个增加到15个不会提高性能。我们认为,一旦超过采样输入图像中的最大频率(在我们的数据中大约1024),增加L的好处就会受到限制。
7 结论
我们的工作直接解决了以前使用MLP将对象和场景表示为连续函数的工作的不足。我们证明,将场景表示为5D神经辐射场(作为3D位置和2D观察方向的函数输出体积密度和与视图相关的发射辐射的MLP)比以前主要的训练深度卷积网络以输出离散化体素表示的方法产生更好的渲染。
虽然我们已经提出了一种分层采样策略,以提高渲染样本的效率(用于训练和测试),但在研究有效优化和渲染神经辐射场的技术方面仍有许多进展。未来工作的另一个方向是可解释性:体素网格和网格等采样表示允许对渲染视图的预期质量和故障模式进行推理,但当我们用深度神经网络的权重对场景进行编码时,如何分析这些问题尚不清楚。我们相信,这项工作在基于真实世界图像的图形管道方面取得了进展,其中复杂场景可以由从实际对象和场景的图像优化的神经辐射场组成。
Our work directly addresses deficiencies of prior work that uses MLPs to represent objects and scenes as continuous functions. We demonstrate that representing scenes as 5D neural radiance fields (an MLP that outputs volume density and view-dependent emitted radiance as a function of 3D location and 2D viewing direction) produces better renderings than the previously-dominant approach of training deep convolutional networks to output discretized voxel representations.
Although we have proposed a hierarchical sampling strategy to make rendering more sample-efficient (for both training and testing), there is still much more progress to be made in investigating techniques to efficiently optimize and render neural radiance fields. Another direction for future work is interpretability: sampled representations such as voxel grids and meshes admit reasoning about the expected quality of rendered views and failure modes, but it is unclear how to analyze these issues when we encode scenes in the weights of a deep neural network. We believe that this work makes progress towards a graphics pipeline based on real world imagery, where complex scenes could be composed of neural radiance fields optimized from images of actual objects and scenes.
致谢:
We thank Kevin Cao, Guowei Frank Yang, and Nithin Raghavan for comments and discussions. RR acknowledges funding from ONR grants N000141712687 and N000142012529 and the Ronald L. Graham Chair. BM is funded by a Hertz Foundation Fellowship, and MT is funded by an NSF Graduate Fellowship. Google provided a generous donation of cloud compute credits through the BAIR Commons program. We thank the following Blend Swap users for the models used in our realistic synthetic dataset: gregzaal (ship), 1DInc (chair), bryanajones (drums), Herberhold (ficus), erickfree (hotdog), Heinzelnisse (lego), elbrujodelatribu (materials), and up3d.de (mic).
A 其他实施细节
网络体系结构
图7详细描述了我们简单的全连接的体系结构。
图7 {A visualization of our fully-connected network architecture. Input vectors are shown in green, intermediate hidden layers are shown in blue, output vectors are shown in red, and the number inside each block signifies the vector's dimension. All layers are standard fully-connected layers, black arrows indicate layers with ReLU activations, orange arrows indicate layers with no activation, dashed black arrows indicate layers with sigmoid activation, and ``+'' denotes vector concatenation. The positional encoding of the input location ($\gamma(\mathbf{x})$) is passed through 8 fully-connected ReLU layers, each with 256 channels. We follow the DeepSDF~\cite{deepsdf} architecture and include a skip connection that concatenates this input to the fifth layer's activation. An additional layer outputs the volume density $\sigma$ (which is rectified using a ReLU to ensure that the output volume density is nonnegative) and a 256-dimensional feature vector. This feature vector is concatenated with the positional encoding of the input viewing direction ($\gamma(\mathbf{d})$), and is processed by an additional fully-connected ReLU layer with 128 channels. A final layer (with a sigmoid activation) outputs the emitted RGB radiance at position $\mathbf{x}$, as viewed by a ray with direction $\mathbf{d}$.}我们全连接的网络架构的可视化。输入向量显示为绿色,中间隐藏层显示为蓝色,输出向量显示为红色,每个块内的数字表示向量的维度。所有层都是标准的全连接层,黑色箭头表示具有ReLU激活的层,橙色箭头表示没有激活的层,黑色虚线箭头表示具有sigmoid激活的层,`+''表示向量拼接。输入位置的位置编码()通过8个完全连接的ReLU层,每个层有256个通道。我们遵循DeepSDF[32]体系结构,并包含一个将此输入连接到第五层激活的跳过连接。另一层输出体积密度(使用ReLU校正以确保输出体积密度为非负)和256维特征向量。该特征向量与输入观察方向的位置编码相连,并由另一个具有128个通道的完全连接的ReLU层处理。最后一层(带有sigmoid激活)在位置输出发射的RGB辐射,由方向的光线观察。
Volume Bounds
我们的方法通过查询沿相机光线在连续5D坐标下的神经辐射场表示来渲染视图。对于合成图像的实验,我们缩放场景,使其位于以原点为中心的边长为2的立方体内,并且仅查询此边界体积内的表示。我们的真实图像数据集包含的内容可以存在于最近点和无穷远处的任何位置,因此我们使用归一化设备坐标将这些点的深度范围映射到[−1, 1]. 这会将所有光线原点移动到场景的近平面,将摄影机的透视光线映射到变换体积中的平行光线,并使用视差(逆深度)而不是公制深度,因此所有坐标现在都有界。
训练详细信息
对于真实场景数据,我们通过在优化过程中(在通过ReLU之前)向输出σ值添加具有零均值和单位方差的随机高斯噪声来调整我们的网络,发现这稍微提高了渲染新视图的视觉性能。我们在Tensorflow中实现了我们的模型[1]。
渲染详细信息
为了在测试时渲染新视图,我们通过粗略网络对每条光线采样64个点,通过精细网络对每条光线采样64+128=192个点,总共对每条光线进行256次网络查询。我们的真实合成数据集需要每个图像640k条光线,而我们的真实场景需要每个图像762k条光线,因此每个渲染图像需要1.5亿到2亿次网络查询。在NVIDIA V100上,每帧大约需要30秒。
B其他基线方法详细信息
神经体积(NV)[24]
我们使用作者在https://github.com/facebookresearch/neuralvolumes并按照他们的程序在单个场景上进行训练,无时间依赖性。
场景表示网络(SRN)[42]
我们使用作者在https://github.com/vsitzmann/scene-representation-networks并遵循他们在单一场景中的训练程序。
局部光场融合(LLFF)[28]
我们使用作者在https://github.com/Fyusion/LLFF.
定量比较
作者发布的SRN实现需要大量GPU内存,即使在4个NVIDIA V100 GPU上并行,图像分辨率也限制在512×512像素。我们计算合成数据集的SRN量化指标为512×512像素,真实数据集的SRN量化指标为504×376像素,而其他可在更高分辨率下运行的方法的SRN量化指标分别为800×800和1008×752。
C NDC射线空间求导
我们在标准化设备坐标(NDC)空间中使用“前向”捕获重建真实场景,该空间通常用作三角形光栅化管道的一部分。该空间很方便,因为它在将z轴(相机轴)转换为视差线性时保留了平行线。
这里,我们推导了应用于光线的变换,以将光线从相机空间映射到NDC空间。齐次坐标的标准三维透视投影矩阵为:
其中,n、f是近剪裁平面和远剪裁平面,r和t是近剪裁平面处场景的右边界和上边界。(请注意,这是在约定中,相机在−z方向。)要投影一个齐次点(x,y,z,1)>,我们左乘M,然后除以第四个坐标:
投影点现在位于归一化设备坐标(NDC)空间中,其中原始视锥已映射到立方体[−1, 1]3 .
我们的目标是获取一条射线o+td,并计算NDC空间中的射线原点o 0和方向d 0,以便对于每个t,存在一个新的t 0,其中π(o+td)=o 0+t 0d 0(其中π是使用上述矩阵的投影)。换句话说,原始光线和NDC空间光线的投影追踪出相同的点(但不一定以相同的速率)。
让我们重写等式中的投影点。9组件(axx/z、ayy/z、az+bz/z)>。新原点o 0和方向d 0的组件必须满足:
为了消除自由度,我们决定t 0=0和t=0应映射到同一点。替换t=0和t 0=0等式。10直接给出我们的NDC空间原点o 0:
这就是原始光线原点的投影π(o)。通过将其替换回Eqn。10对于任意t,我们可以确定t 0和d 0的值:
分解出一个只依赖于t的公共表达式,我们可以得到:
注意,根据需要,当t=0时,t 0=0。此外,我们看到t 0→ 1作为t→ ∞. 回到原始投影矩阵,我们的常数是:
使用标准针孔相机模型,我们可以重新参数化为:
其中,W和H是图像的宽度和高度(以像素为单位),fcam是相机的焦距。
在我们真实的前向捕获中,我们假设远场景边界是无穷大的(这花费我们很少,因为NDC使用z维来表示反向深度,即视差)。在此限制条件下,z常数简化为:
将所有内容结合在一起:
在我们的实现中,最后一个细节是:我们将o移动到射线与z=−n(在本次NDC转换之前),采用=o+tnd表示tn=−(氮+盎司)/dz。一旦我们转换为NDC射线,这允许我们简单地从0到1对t 0进行线性采样,以获得从n到∞ 在原始空间中。
D其他结果
每场景细分表3、4、5和6将主要论文中给出的定量结果细分为每场景指标。每场景细分与本文提出的聚合量化指标一致,其中我们的方法在量化上优于所有基线。虽然LLFF实现了略好的LPIPS指标,但我们敦促读者查看我们的补充视频,其中我们的方法实现了更好的多视图一致性,产生的伪影比所有基线都少。