论文精读(三)NeRF神经辐射场
论文精读(三)NeRF: representing scenes as neural radiance fields for view synthesis
Paper:arxiv.org/pdf/2003.08934
github:bmild/nerf: Code release for NeRF (Neural Radiance Fields) (github.com)
Authors: Ben Mildenhall, Pratul P. Srinivasan, Matthew Tancik, Jonathan T. Barron, Ravi Ramamoorthi, Ren NgAuthors Info & Claims
**Paper:**Published: 2020 3
相关资料
【十分钟带你快速入门NeRF原理】https://www.bilibili.com/video/BV1o34y1P7Md?vd_source=bd967f0d540a64617b8b612bc0f0f9a3
都2022年了,我不允许你还不懂NeRF - 知乎 (zhihu.com)
昙花一现的神经网络:从 NeRF 到 3DGS - Double7的文章 - 知乎
https://zhuanlan.zhihu.com/p/699023578
补充知识
渲染与反渲染
摘要
我们提出了一种方法,该方法通过使用稀疏的输入视图集优化底层连续体场景函数来实现用于合成复杂场景的新视图的最新结果。我们的算法使用全连通(非卷积)深度网络来表示场景,其输入是单个连续的5D坐标(空间位置(x,y,z)和观察方向(θ,φ)),其输出是该空间位置处的体积密度和与观察相关的发射辐射。我们通过沿着相机光线查询5D坐标来合成视图,并使用经典的体渲染技术将输出颜色和密度投影到图像中。由于体绘制是自然可微的,优化我们的表示所需的唯一输入是一组具有已知相机姿态的图像。我们描述了如何有效地优化神经辐射场,以绘制具有复杂几何形状和外观的场景的照片级真实感新视图,并展示了优于神经绘制和视图合成的现有工作的结果。
关键词:场景表示,视图合成,基于图像的绘制,体绘制,3D深度学习
图1:我们提出了一种方法,优化一个连续的5D神经辐射场表示(在任何连续位置的体积密度和视图相关的颜色)的场景从一组输入图像。我们使用体绘制的技术来积累这个场景表示沿着射线的样本,以从任何视点渲染场景。在这里,我们可视化了在周围半球上随机捕获的合成Drums场景的100个输入视图的集合,并且我们显示了从优化的NeRF表示渲染的两个新视图。
1 引言
在这项工作中,我们解决了长期存在的问题以视图合成的一种新的方式,直接优化参数的连续5D场景表示,以尽量减少渲染一组捕获的图像的错误。
我们将静态场景表示为连续的5D函数,其输出在空间中的每个点(x,y,z)处在每个方向(θ,φ)上发射的辐射,以及每个点处的密度,其作用类似于控制通过(x,y,z)的射线累积多少辐射的微分不透明度。我们的方法优化了一个没有任何卷积层的深度全连接神经网络(通常称为多层感知器或MLP),通过从单个5D坐标(x,y,z,θ,φ)回归到单个体积密度和视图相关的RGB颜色来表示该函数。为了渲染这个神经辐射场(NeRF),从特定的视点,我们:
1)使照相机射线行进通过场景以生成3D点的采样集,
2)使用这些点及其对应的2D观看方向作为神经网络的输入以产生颜色和密度的输出集,以及
3)使用经典的体绘制技术来将这些颜色和密度累积到2D图像中。
因为这个过程是自然可微的,我们可以使用梯度下降来优化这个模型,通过最小化每个观察到的图像和从我们的表示渲染的相应视图之间的误差。最大限度地减少多个视图中的这种错误,鼓励网络通过为包含真实底层场景内容的位置分配高体积密度和准确的颜色来预测场景的连贯模型。图2显示了整个管道。
我们发现,优化一个复杂场景的神经辐射场表示的基本实现并不收敛到一个足够高的分辨率表示,是低效的,在所需的样本数每相机射线。我们解决这些问题,通过转换输入的5D坐标与位置编码,使MLP表示更高的频率函数,我们提出了一个分层采样过程,以减少所需的查询数量,充分采样这种高频场景表示。
我们的方法继承了体积表示的优点:两者都可以表示复杂的现实世界的几何形状和外观,并且非常适合使用投影图像进行基于梯度的优化。至关重要的是,我们的方法克服了令人望而却步的存储成本的离散体素网格建模时,在高分辨率的复杂场景。总之,我们的技术贡献是:
-
一种将具有复杂几何形状和材料的连续场景表示为5D神经辐射场的方法,参数化为基本MLP网络。
-
一个微分渲染过程的基础上,经典的体绘制技术,我们用它来优化这些表示从标准的RGB图像。这包括分层采样策略,以将MLP的容量分配给具有可见场景内容的空间。
-
将每个输入5D坐标映射到更高维空间的位置编码,这使我们能够成功地优化神经辐射场以表示高频场景内容。
我们证明,我们得到的神经辐射场方法在定量和定性上优于最先进的视图合成方法,包括将神经3D表示与场景相匹配的工作,以及训练深度卷积网络以预测采样体积表示的工作。据我们所知,本文提出了第一个连续的神经场景表示,能够从自然环境中捕获的RGB图像中渲染真实的对象和场景的高分辨率照片级逼真的新视图。
2 相关工作
计算机视觉中一个有前途的最近方向是在MLP的权重中编码对象和场景,该MLP直接从3D空间位置映射到形状的隐式表示,例如该位置的符号距离[6]。然而,这些方法到目前为止还不能再现具有复杂几何形状的逼真场景,其保真度与使用诸如三角形网格或体素网格的离散表示来表示场景的技术相同。在本节中,我们将回顾这两条工作线,并将其与我们的方法进行对比,该方法增强了神经场景表示的能力,以产生渲染复杂现实场景的最先进结果。使用MLP从低维坐标映射到颜色的类似方法也用于表示其他图形功能,例如图像[44],纹理材料[12,31,36,37]和间接照明值[38]。
神经3D形状表示
最近的工作研究了通过优化将xyz坐标映射到有符号距离函数[15,32]或占用字段[11,27]的深度网络来将连续3D形状隐式表示为水平集。然而,这些模型受到其访问地面真实3D几何形状的要求的限制,通常从合成3D形状数据集(如ShapeNet [3])获得。随后的工作通过制定可微分的渲染函数来放松对地面真实3D形状的这一要求,这些函数允许仅使用2D图像来优化神经隐式形状表示。Niemeyer等人。[29]将表面表示为3D占有场,并使用数值方法找到每条射线的表面交点,然后使用隐式微分计算精确导数。每个光线相交位置被提供作为神经3D纹理场的输入,该神经3D纹理场预测该点的漫射颜色。Sitzmann等人。[42]使用一种不太直接的神经3D表示,该表示仅在每个连续3D坐标处输出特征向量和RGB颜色,并提出了一种由递归神经网络组成的可微分渲染函数,该递归神经网络沿沿着每条光线行进以决定表面的位置。
虽然这些技术可以潜在地表示复杂和高分辨率的几何形状,但到目前为止,它们仅限于具有低几何复杂性的简单形状,从而导致过度平滑的渲染。我们表明,优化网络编码5D辐射场(3D体积与2D视图相关的外观)的替代策略可以表示更高分辨率的几何形状和外观,以呈现复杂场景的照片级逼真的新视图。
视图合成和基于图像的渲染
给定视图的密集采样,可以通过简单的光场采样插值技术[21,5,7]重建照片级真实感的新视图。对于具有稀疏视图采样的新颖视图合成,计算机视觉和图形学社区通过从观察到的图像预测传统的几何和外观表示来取得重大进展。一种流行的方法使用基于网格的场景表示,具有漫射[48]或视图相关[2,8,49]外观。可微分光栅化器[4,10,23,25]或路径跟踪器[22,30]可以直接优化网格表示,以使用梯度下降再现一组输入图像。然而,基于图像重投影的基于梯度的网格优化通常是困难的,可能是因为局部极小值或损失景观的不良条件。此外,该策略需要在优化之前提供具有固定拓扑的模板网格作为初始化[22],这通常不适用于无约束的真实世界场景。
另一类方法使用体积表示来解决从一组输入RGB图像合成高质量照片级真实感视图的任务。体积方法能够真实地表示复杂的形状和材料,非常适合基于梯度的优化,并且往往比基于网格的方法产生更少的视觉干扰。早期的体积方法使用观察到的图像直接对体素网格进行着色[19,40,45]。最近,几种方法[9,13,17,28,33,43,46,52]使用多个场景的大型数据集来训练深度网络,该深度网络从一组输入图像预测采样的体积表示,然后使用alpha合成[34]或沿沿着光线学习合成以在测试时渲染新视图。其他工作已经优化了卷积网络(CNN)和每个特定场景的采样体素网格的组合,使得CNN可以补偿来自低分辨率体素网格的离散化伪影[41]或允许预测的体素网格基于输入时间或动画控件而变化[24]。虽然这些体积技术在新颖的视图合成方面取得了令人印象深刻的结果,但由于它们的离散采样,它们扩展到更高分辨率图像的能力从根本上受到时间和空间复杂性的限制-渲染更高分辨率的图像需要更精细的3D空间采样。我们通过在深度全连接神经网络的参数内对连续体积进行编码来规避这个问题,这不仅比以前的体积方法产生更高质量的渲染,而且只需要这些采样体积表示的一小部分存储成本。
3 神经辐射场场景表示
我们将连续场景表示为5D向量值函数,其输入是3D位置x =(x,y,z)和2D观看方向(θ,φ),并且其输出是发射颜色c =(r,g,B)和体积密度σ。在实践中,我们将方向表示为3D笛卡尔单位向量d。我们用MLP网络FΘ:(x,d)→(c,σ)来近似这种连续的5D场景表示,并优化其权重Θ,以从每个输入5D坐标映射到其对应的体积密度和定向发射颜色。
图2:我们的神经辐射场场景表示和可微分渲染过程的概述。我们通过沿沿着相机射线采样5D坐标(位置和观察方向)(a),将这些位置馈送到MLP中以产生颜色和体积密度(B),并使用体积渲染技术将这些值合成为图像(c)来合成图像。该渲染函数是可微分的,因此我们可以通过最小化合成图像和地面实况观察图像(d)之间的残差来优化我们的场景表示。
我们通过限制网络预测体积密度σ仅作为位置x的函数,同时允许RGB颜色c作为位置和观看方向的函数进行预测,从而鼓励表示具有多视图一致性。为了实现这一点,MLP FΘ首先用8个完全连接的层(使用ReLU激活和每层256个通道)处理输入的3D坐标x,并输出σ和256维特征向量。然后,该特征向量与相机光线的观看方向连接在一起,并传递到一个额外的全连接层(使用ReLU激活和128个通道),该层输出与视图相关的RGB颜色。
参见图3,以了解我们的方法如何使用输入观看方向来表示非朗伯效应的示例。如图4所示,在没有视图依赖性的情况下训练的模型(仅x作为输入)难以表示镜面反射。
4 辐射场体绘制
我们的5D神经辐射场将场景表示为空间中任何点的体积密度和定向发射辐射。我们使用经典体绘制[16]的原理来绘制穿过场景的任何光线的颜色。体积密度σ(x)可以解释为射线终止于位置x处的无穷小粒子的微分概率。具有近边界tn和远边界tf的相机光线r(t)= o + td的预期颜色C(r)为:
图3:视向相关的发射辐射的可视化。我们的神经辐射场表示输出RGB颜色作为空间位置x和观看方向d的5D函数。在这里,我们在船舶场景的神经表示中可视化了两个空间位置的示例方向颜色分布。在(a)和(B)中,我们显示了来自两个不同相机位置的两个固定3D点的外观:一个在船的侧面(橙色插图),一个在水面上(蓝色插图)。我们的方法预测了这两个3D点的变化的镜面外观,并且在(c)中,我们展示了这种行为如何在整个观察方向的半球上连续推广。
函数T(t)表示沿着从tn到t的射线的累积透射率,即,射线从tn到t不击中任何其他粒子的概率。从我们的连续神经辐射场渲染视图需要估计通过所需虚拟相机的每个像素跟踪的相机射线的积分C(r)。
我们用求积法数值估计这个连续积分。确定性求积通常用于渲染离散体素网格,它将有效地限制我们的表示的分辨率,因为MLP将仅在一组固定的离散位置处被查询。相反,我们使用分层采样方法,将[tn,tf]划分为N个均匀间隔的bin,然后从每个bin中随机抽取一个样本:
虽然我们使用一组离散样本来估计积分,但分层采样使我们能够表示连续的场景表示,因为它导致在优化过程中在连续位置处评估MLP。我们使用这些样本来估计C(r),其中使用Max [26]的体绘制评论中讨论的求积规则:
其中δi = ti+1 − ti是相邻样本之间的距离。这个从(ci,σi)值的集合计算C(r)的函数是平凡可微的,并简化为传统的alpha合成,alpha值为αi = 1−exp(−σiδi)。
图四:在这幅图中,我们可视化我们的完整模型如何受益于代表viewdependent发射的辐射,并通过一个高频位置编码通过我们的输入坐标。删除视图相关性可防止模型在推土机踏板上重新创建镜面反射。去除位置编码会大大降低模型表示高频几何和纹理的能力,从而导致过度平滑的外观。
5 优化神经辐射场
在前一节中,我们已经描述了将场景建模为神经辐射场并从该表示中渲染新视图所需的核心组件。然而,我们观察到这些组件不足以达到最新技术水平的质量,如第6.4节所示。我们引入了两个改进,使代表高分辨率的复杂场景。第一个是输入坐标的位置编码,帮助MLP表示高频函数,第二个是分层采样过程,允许我们有效地对这种高频表示进行采样。
5.1 位置编码
我们在神经场景表示的背景下利用了这些发现,并表明将FΘ重新表达为两个函数FΘ = F θ o γ的组合,一个是已学习的,另一个是未学习的,可以显着提高性能(见图4和表2)。这里γ是从R到高维空间R2L的映射,而F θ仍然只是一个正则MLP。形式上,我们使用的编码函数是:
该函数γ(·)分别应用于x中的三个坐标值中的每一个(其被归一化为位于[-1,1]中)和笛卡尔观察方向单位向量d的三个分量(其通过构造位于[-1,1]中)。在我们的实验中,我们对γ(x)设L = 10,对γ(d)设L = 4。
流行的Transformer架构[47]中使用了类似的映射,其中它被称为位置编码。然而,Transformer使用它来实现不同的目标,即提供序列中标记的离散位置,作为不包含任何顺序概念的架构的输入。相比之下,我们使用这些函数将连续输入坐标映射到更高维的空间,使我们的MLP能够更容易地近似更高频率的函数。关于从投影[51]建模3D蛋白质结构的相关问题的并行工作也利用了类似的输入坐标映射。
5.2 分层体积抽样
我们的渲染策略是在沿着每个相机射线的N个查询点处密集地评估神经辐射场网络,这是低效的:对渲染图像没有贡献的自由空间和遮挡区域仍然被重复采样。我们从体绘制的早期工作中汲取灵感[20],并提出了一种分层表示,通过按最终渲染的预期效果成比例分配样本来提高渲染效率。
我们不是只使用单个网络来表示场景,而是同时优化两个网络:一个“粗”,一个“细”。我们首先使用分层采样对Nc个位置的集合进行采样,并且如等式1中所描述的那样在这些位置处评估“粗略”网络。2和3给定这个“粗糙”网络的输出,我们然后沿着每条射线产生一个更有信息的点采样,其中样本偏向于体积的相关部分。为了做到这一点,我们首先重写等式n中粗糙网络C c(r)的alpha合成颜色。3作为沿射线沿着的所有采样颜色ci的加权和:
将这些权重标准化为$ \check{w_i} = w_i/\sum_{j=1}^{N_c}w_j$会沿射线产生分段常数PDF沿着。我们使用逆变换采样从该分布中采样第二组Nf个位置,在第一组和第二组样本的并集处评估我们的“精细”网络,并使用等式(1)计算光线C_f(r)的最终渲染颜色。3,但使用所有Nc+Nf个样本。此过程将更多样本分配给我们期望包含可见内容的区域。这解决了与重要性采样类似的目标,但我们使用采样值作为整个积分域的非均匀离散化,而不是将每个样本视为整个积分的独立概率估计。
5.3 实现细节
我们为每个场景优化了单独的神经连续体表示网络。这只需要场景的捕获RGB图像的数据集、相应的摄像机姿态和内在参数以及场景边界(我们使用合成数据的地面真实摄像机姿态、内在参数和边界,并使用COLMAP运动结构包[39]来估计真实的数据的这些参数)。在每次优化迭代中,我们从数据集中所有像素的集合中随机采样一批相机光线,然后按照第5.2以查询来自粗略网络的Nc个样本和来自精细网络的Nc + Nf个样本。然后,我们使用在第1.2节中描述的体绘制程序。4来渲染来自两组样本的每条光线的颜色。我们的损失只是粗略和精细渲染的渲染和真实像素颜色之间的总平方误差:
其中,R是每个批次中的光线集合,C(r)、C c(r)和C f(r)分别是光线r的基础真值、粗略体积预测和精细体积预测RGB颜色。注意,即使最终的渲染来自C f(r),我们也最小化了C c(r)的损失,这样粗网络的权重分布就可以用来在细网络中分配样本。在我们的实验中,我们使用4096条射线的批量大小,每条射线在粗略体积中的Nc = 64个坐标处采样,并且在精细体积中的Nf = 128个附加坐标处采样。我们使用亚当优化器[18],学习率从5 × 10 - 4开始,在优化过程中以指数衰减到5 × 10 - 5(其他亚当超参数的默认值为β1 = 0.9,β2 = 0.999,和= 10 - 7)。单个场景的优化通常需要大约10 - 30万次迭代才能在单个NVIDIA V100 GPU上收敛(大约1-2天)。
6 结果(略)
我们定量(表1)和定性(图1)。8和6)表明,我们的方法优于先前的工作,并提供了广泛的消融研究,以验证我们的设计选择(表2)。我们敦促读者查看我们的补充视频,以更好地欣赏我们的方法的显着改善基线方法时,渲染平滑路径的新颖的意见。
表1:我们的方法在合成和真实的图像的数据集上定量地优于先前的工作。我们报告了PSNR/SSIM(越高越好)和LPIPS [50](越低越好)。DeepVoxels [41]数据集由4个具有简单几何形状的漫射对象组成。我们的真实合成数据集由8个几何复杂对象的路径跟踪渲染组成,这些对象具有复杂的非朗伯材料。真实的数据集由8个真实世界场景的手持前向捕获组成(NV无法在此数据上进行评估,因为它仅重建有界体积内的对象)。虽然LLFF实现了稍微好一点的LPIPS,但我们敦促读者查看我们的补充视频,其中我们的方法实现了更好的多视图一致性,并且产生的伪影比所有基线都少。
7 结论
我们的工作直接解决了以前的工作,使用MLP表示对象和场景作为连续函数的不足。我们证明,将场景表示为5D神经辐射场(一种MLP,输出体积密度和与视图相关的发射辐射,作为3D位置和2D观看方向的函数)比之前训练深度卷积网络以输出离散化体素的主导方法产生更好的渲染。
虽然我们已经提出了一种分层采样策略,使渲染更有效的样本(训练和测试),仍然有更多的研究技术,以有效地优化和渲染神经辐射场的进展。未来工作的另一个方向是可解释性:采样表示,如体素网格和网格,允许对渲染视图的预期质量和故障模式进行推理,但当我们在深度神经网络的权重中编码场景时,如何分析这些问题尚不清楚。我们相信,这项工作取得了进展的图形管道的基础上真实的世界的图像,复杂的场景可以组成的神经辐射场优化的图像的实际对象和场景。
然后过两年就给3DGS爆了。