分享 | NeRF神经辐射场理解_深兰深延AI的博客-CSDN博客_神经辐射场
githubNeRF总结:https://github.com/yenchenlin/awesome-NeRF
目录
摘要
1.介绍
2.相关工作
2.1.神经三维形状表示
2.2.视图合成和基于图像的渲染
3.神经辐射场场景表示
4.带有辐射字段的体积渲染
5.优化一个神经辐射场
5.1.位置编码
5.2.实施细节
6、结果
6.1、数据集
6.2、比较
6.3、讨论
7、结论
NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis将场景表示为视图合成的神经辐射场
我们提出了一种方法,通过使用稀疏的输入视图集来优化底层的连续体积场景函数,来实现合成复杂场景的新视图的最新结果。我们的算法使用一个全连接(非卷积)深度网络表示一个场景,该网络的输入是一个连续的5D坐标(空间位置(x, y, z)和观看方向(θ, φ)),其输出是该空间位置的体积密度和视图相关的发射辐射。我们通过查询沿着相机光线的5D坐标来合成视图,并使用经典的体积渲染技术将输出的颜色和密度投影到图像中。因为体积渲染是自然可微的,优化我们的表示所需的唯一输入是一组具有已知相机姿态的图像。我们描述了如何有效地优化神经辐射场,以呈现具有复杂的几何形状和外观的场景的逼真的新观点,并展示了优于之前的神经渲染和观点合成工作的结果。
在这项工作中,我们以一种新的方式解决了长期存在的观点综合问题。视图合成是从给定的输入图像及其各自的相机姿态 渲染场景的新视图的问题。从新的角度产生逼真的输出需要正确地处理复杂的几何形状和材料反射特性。许多不同的场景表示和渲染方法已经被提出来解决这一问题;然而,到目前为止,还没有一个人能够通过一个大的相机的基线来实现逼真的质量。我们提出了一种新的场景表示方法,它可以直接优化以再现大量的高分辨率输入视图,并且仍然具有极大的内存效率(见图1)。
我们将一个静态场景表示为一个连续的5D函数,在空间中的每个点(x, y, z)输出每个方向发出的辐射(θ, φ),并在每个点输出一个密度,就像一个微分不透明度,控制 累积多少辐射 by 一个射线通过(x, y, z)。我们的方法优化了一个没有任何卷积层(通常称为多层感知器或MLP),通过从单个5D坐标(x, y, z, θ, φ)回归到单个体积密度和视图依赖的RGB颜色来表示这个函数。为了从一个特定的角度来渲染这个神经辐射场(NeRF),我们:
因为这个过程是自然可微的,我们可以使用梯度下降来优化这个模型,通过最小化每个观察图像和从我们的表示中呈现的相应视图之间的误差。在多个视图中最小化这个错误,可以鼓励网络通过为包含真实的底层场景内容的位置分配高体积密度和准确的颜色来预测场景的连贯模型。图2可视化了这个整体管道。
图2 对我们的神经辐射场场景表示和可微渲染程序的概述。(a)我们通过沿着相机射线采样5D坐标(位置和观看方向)来合成图像,(b)将这些位置输入MLP以产生颜色和体积密度,(c)并使用体积渲染技术将这些值合成成图像.(d)这个渲染函数是可微的,所以我们可以通过最小化合成和地面真实观测图像之间的残差来优化我们的场景表示。
我们发现,优化一个复杂场景的神经辐射场表示的基本实现并没有收敛到一个足够高分辨率的表示。我们通过用位置编码转换输入的5D坐标来解决这个问题,使MLP能够表示更高频率的函数。
我们的方法可以表示复杂的真实世界的几何和外观,非常适合基于梯度的优化。通过在神经网络的参数中存储一个场景,我们的方法克服了在高分辨率建模复杂场景时离散体素网格的高昂的存储成本。
我们定量地证明了我们所得到的神经辐射场方法并且定性上优于最先进的视图合成方法,例如将神经3D表示适合于场景的工作,以及训练深度卷积网络(CNNs)来预测采样的体积表示的工作。本文提出了第一个连续的神经场景表示,能够渲染高分辨率的真实场景从RGB图像的真实物体和场景的自然设置。
计算机视觉的一个很有前途的方向是在MLP的权重中编码对象和场景,它直接从三维空间位置映射到形状的隐式表示,例如该位置的符号距离3。然而,到目前为止,这些方法还无法以与使用三角形网格或体素网格等离散表示场景相同的保真度再现具有复杂几何形状的真实场景。在本节中,我们将回顾这两项工作,并将它们与我们的方法进行对比,这增强了神经场景表示的能力,以产生渲染复杂的现实场景的最先进的结果。
最近的工作通过优化将xyz坐标映射到有符号的距离函数或占用场的深度网络,研究了连续三维形状作为水平集的隐式表示。然而,这些模型受到其访问地面真实三维几何的需求的限制,通常来自合成的三维形状数据集,如ShapeNet。随后的工作通过制定可微渲染函数,放宽了对地面真实三维形状的要求,允许神经隐式形状表示仅使用二维图像进行优化。Niemeyer等人将曲面表示为三维占用场,并使用数值方法找到每条光线的曲面交点,然后使用隐式微分计算精确的导数。每个射线交叉位置作为神经三维纹理域的输入,该域预测该点的漫反射颜色。Sitzmann等人使用一种不那么直接的神经三维表示,只需在每个连续的三维坐标上输出一个特征向量和RGB颜色,并提出一个由沿着每条射线行进来决定表面的位置的递归神经网络组成的可微呈现函数。
虽然这些技术可能代表复杂和高分辨率的几何,但到目前为止,它们仅限于低几何复杂度的简单形状,导致过度平滑渲染。我们展示了一种优化网络编码5维辐射场(具有二维视觉相关外观的三维体积)的替代策略,可以代表更高分辨率的几何形状和外观,以呈现复杂场景的逼真的新视图。
计算机视觉和图像社区通过从观察到的图像中预测传统的几何图形和外观表示,在新视图合成的任务上取得了重大进展。一种流行的方法是使用基于网格的场景表示。可微分栅格器或示踪器可以直接优化网格表示,使用梯度下降复制一组输入图像。然而,基于图像重投影的基于梯度的网格优化往往是困难的,可能是由于局部最小值或损失景观的条件较差。此外,该策略要求在优化之前提供一个具有固定拓扑的模板网格作为初始化,这对于无约束的真实场景通常是不可用的。
另一类方法使用体积表示来解决从一组输入的RGB图像中进行高质量逼真的视点合成的任务。体积方法能够实际地表示复杂的形状和材料,非常适合基于梯度的优化,并且往往比基于网格的方法产生更少的视觉上分散注意力的伪影。早期的体积测量方法使用观察到的图像来直接彩色体素网格。最近,一些方法使用多个场景的大型数据集来训练深度网络,从一组输入图像中预测采样的体积表示,然后使用alpha合成或学习合成在测试时呈现新的视图。其他工作针对每个特定场景优化了 CNN 和采样体素网格的组合,使得 CNN 可以补偿来自低分辨率体素网格的离散化伪影,或者允许预测的体素网格根据输入时间或动画控制而变化。尽管这些体积技术在新视图合成方面取得了令人印象深刻的结果,但由于其离散采样,其扩展到更高分辨率图像的能力受到时间和空间复杂性的根本限制——渲染更高分辨率的图像需要更精细的三维空间采样。我们通过在深度全连接神经网络的参数中编码一个连续的体积来规避这个问题,这不仅产生比之前的体积方法明显更高质量的渲染,而且只需要这些采样体积表示的存储成本的一小部分。
我们将一个连续的场景表示为一个5D向量值函数,它的输入是一个三维位置x=(x,y,z)和2D观看方向(θ,φ),其输出是一个发射的颜色c=(r,g,b)和体积密度σ。在实践中,我们用三维笛卡尔单位向量d来表示方向。我们用MLP网络FΘ:(x,d)→(c,σ)来近似这个连续的5D场景表示,并优化其权重Θ,从每个输入的5D坐标映射到其相应的体积密度和定向发射颜色。
我们为了让表示的多视图一致 通过 限制 网络预测体积密度σ仅作为位置x的函数,同时允许RGB颜色c作为位置和观看方向的函数来预测。为了实现这一点,MLP FΘ首先处理具有8个完全连接层的输入3D坐标x(使用ReLU激活和每层256个通道),并输出σ和一个256维的特征向量。然后,这个特征向量与相机射线的查看方向连接起来,并传递到一个额外的完全连接层(使用ReLU激活和128个通道),输出与视图相关的RGB颜色。
关于我们的方法如何使用输入查看方向 the input viewing direction来表示非兰伯式 non-Lambertian的效果,请参见图3。如图4所示,一个没有视图依赖(只有x作为输入)训练的模型很难表示推测specularities。
图3。一种与视图相关的发射辐射的可视化方法。我们的神经辐射场表示输出RGB颜色作为空间位置x和观察方向d的5D函数。在这里,我们在船舶场景的神经表示中可视化两个空间位置的方向颜色分布。在(a)和(b)中,我们展示了来自两个不同的相机位置的两个固定的3D点的外观:一个在船的一侧(橙色插图),另一个在水面上(蓝色插图)。我们的方法预测了这两个三维点的不断变化的镜面外观,并且在(c)中,我们展示了这种行为如何在观看方向的整个半球连续地推广。
图4。在这里,我们可视化了我们的完整模型如何从表示与视图相关的发射辐射和通过高频位置编码传递输入坐标中受益。删除视图依赖关系可以防止模型在推土机胎面上重新创建镜面反射。去除位置编码大大降低了模型表示高频几何图形和纹理的能力,导致了过度平滑的外观。
我们的5D神经辐射场表示一个场景的体积密度和方向 发射辐射在空间的任何点。我们使用经典体积渲染的原理来渲染任何通过场景的光线的颜色。体积密度σ(x)可以解释为一条射线在x位置的无穷小粒子处终止的微分概率。具有近边界和远边界tn和tf的相机射线r(t)=o+td的预期颜色C(r)为:
函数T(t)表示沿射线从tn到t的累积透过率,即射线从tn传播到t而没有击中任何其他粒子的概率。从我们的连续神经辐射场渲染一个视图,需要估计通过所需的虚拟相机的每个像素跟踪的相机射线的这个积分C(r)。
我们用求积法对这个连续积分进行了数值估计。确定性求交通常用于渲染离散体素网格,它将有效地限制我们的表示的分辨率,因为MLP只能在一个固定的离散位置集上被查询。相反,我们使用分层抽样方法,我们将[tn,tf]划分为N个均匀间隔的箱子,然后从每个箱子中均匀随机抽取一个样本:
虽然我们使用一组离散的样本来估计积分,但分层抽样使我们能够表示一个连续的场景表示,因为它导致MLP在优化过程中在连续的位置进行评估。我们使用这些样本来估计C(r)与Max讨论的体积渲染审查中的求积规则:
在前一节中,我们已经描述了将场景建模为神经辐射场并从这种表示中呈现新视图所需的核心组件。然而,我们观察到,这些组件并不足以实现最先进的质量。我们引入了两个改进来表示高分辨率的复杂场景。第一种是输入坐标的位置编码,帮助MLP表示高频函数。第二种是分层抽样程序,我们在这里没有描述;详情请参见原始论文13。
尽管神经网络是通用的函数逼近器,但我们发现,让网络FΘ直接操作输入坐标xyzθφ,会导致渲染在表示颜色和几何形状的高频变化方面表现不佳。这与Rahaman等人最近的研究结果一致,该研究表明,深度网络倾向于学习低频函数。他们还表明,在将输入数据的高频函数传递给网络之前,使用高频函数将输入映射到高维空间,可以更好地拟合包含高频变化的数据。
这个函数γ(·)分别应用于x中的三个坐标值(它们被归一化为位于[−1,1]中)和笛卡尔观测方向单位向量d的三个分量(通过构造位于[−1,1]中)。在我们的实验中,我们为γ(X)设置L=10,为γ(d)设置L=4。
这种映射将在后续工作中进行更深入的研究,该工作显示了位置编码如何使网络更能更快地表示更高频率的信号。
我们为每个场景优化了一个单独的神经连续体积表示网络。这只需要捕获的场景RGB图像数据集、相应的相机姿态和内在参数以及场景边界(我们使用地面真实相机姿态、本质和边界作为合成数据,并使用COLMAP运动结构包来估计真实数据的这些参数)。在每次优化迭代中,我们从数据集中所有像素的集合中随机抽取一批相机光线。我们在每条射线上的N个随机点上查询网络,然后使用第4节中描述的体渲染过程,使用这些样本来渲染每条射线的颜色。我们的损失只是渲染像素颜色和真实像素颜色之间的总平方误差:
其中R是每批中的射线集合,C(r),Cˆ(r)是射线r的地面真实值和预测的RGB颜色。
在我们的实验中,我们使用了4096条光线的批次大小,每条光线在N=192坐标下采样。(它们被分为两个层次的“粗”和“细”网络;详情请参见原始论文13。) 我们使用Adam优化器,其学习速率从5×10−4开始,并呈指数衰减到5×10−5。对单个场景的优化通常需要大约1-2天的时间才能收敛到单个GPU上。
我们的定量(表1)和定性(见图5和图6)表明,我们的方法优于以前的工作。我们敦促读者观看我们附带的视频,以更好地欣赏我们的方法在呈现新视图的平滑路径时比基线方法的显著改进。视频、代码和数据集可以在https://www.matthew上找到。
表1。我们的方法在定量上优于之前在合成图像和真实图像数据集上的工作。
我们报告了PSNR/SSIM(越高越好)和LPIPS24(越低越好)。DeepVoxels20数据集由4个具有简单几何形状的扩散对象组成。我们的真实合成数据集由8个几何上复杂的物体与复杂的non-Lambertian材料的路径跟踪渲染图组成。真实的数据集由8个真实世界场景的手持式前向捕获组成(NV不能在这个数据上进行评估,因为它只在一个有限的体积内重建对象)。粗体值表示这些指标的最佳性能算法。
对象的合成渲染图。我们首先展示了在两个物体的合成渲染数据集上的实验结果(表1,“漫反射合成360°”和“真实合成360°”)。DeepVoxels20数据集包含四个具有简单几何形状的Lambertian对象。每个对象从上半球采样的视点中呈现为512×512像素(479作为输入,1000用于测试)。此外,我们还生成了我们自己的数据集,其中包含8个物体的路径追踪图像,这些物体显示出复杂的几何形状和真实的non-Lambertian材料。6个是从上半球采样的视点渲染,2个是从全球上采样的视点渲染。我们渲染每个场景的100个视图作为输入,200个用于测试,所有这些都在800×800像素。
复杂场景的真实图像。我们展示了用大致向前的图像捕获的复杂真实世界场景的结果(表1,“真实的面向”)。这个数据集包括用手持手机捕获的8个场景(5个来自局部光场融合local light field fusion (LLFF)纸,3个是我们捕获的),捕获了20到62张图像,并保留其中的1/8作为测试集。所有图像均为1008×756像素。
为了评估我们的模型,我们将当前的视图合成技术进行了比较,详见这里。所有的方法都使用相同的输入视图集为每个场景训练一个单独的网络,除了LLFF12,在一个大数据集上训练单个3D CNN,然后使用相同的训练网络在测试时处理新场景的输入图像。
神经体积Neural Volumes (NV)8综合了一些物体的新视角,这些物体完全位于一个独特的背景前(必须在没有感兴趣的物体的情况下单独捕获)。它优化了一个深度3D CNN来预测一个有1283个样本的离散化RGBα 体素网格voxel grid,以及一个有323个样本的3D翘曲warp grid网格。该算法通过使摄像机光线通过扭曲的体素网格warped voxel grid来呈现新的视图。
场景表示网络(Scene Representation Networks SRN)21将一个连续的场景表示为一个不透明的表面,由一个MLP隐式定义,它将每个(x,y,z)坐标映射到一个特征向量。他们利用任何三维坐标上的特征向量来训练循环神经网络沿着光线的下一步大小,通过场景表示。来自最后一步的特征向量被解码成表面上该点的单一颜色。请注意,SRN是同一作者对DeepVoxels20表现更好的后续研究,这就是为什么我们不包括与DeepVoxels的比较。
LLFF12是设计为采样良好的正面场景产生逼真的新视图。它使用训练过的3D CNN直接预测每个输入视图的 离散的挫折采样 discretized frustum-sampled RGBα网格(多平面图像或MPI25),然后通过alpha合成和混合附近的MPIs到新的视点中来呈现新的视图。
我们完全优于两个基线,它们也优化了每个场景中单独的网络(NV和SRN)。此外,我们只使用它们的输入图像作为我们的整个训练集,在定性和定量上产生了更好的渲染,比LLFF(除了一个指标以外的所有指标)。
SRN方法产生高度平滑的几何和纹理,其视图合成的表示能力受到限制,因为它只选择每个相机射线的单一深度和颜色。NV基线能够捕获合理详细的体积几何和外观,但它使用底层显式1283体素网格使它无法缩放以表示高分辨率的细节。LLFF特别提供了一个不超过输入视图之间差异64像素的“采样指南”,因此它经常无法估计包含多达400-500像素视图之间差异的合成数据集中的正确几何图形。此外,LLFF混合了不同的场景表示,以呈现不同的观点,导致感知上分散注意力的不一致,这在我们的补充视频中很明显。
这些方法之间最大的实际权衡是时间与空间。所有比较的单个场景方法对每个场景至少需要12个小时的训练。相比之下,LLFF可以在10min下处理一个小的输入数据集。然而,LLFF为每个输入图像产生一个大的3D体素网格,导致了巨大的存储需求(一个“现实合成”场景超过15GB)。我们的方法只需要5MB的网络权值(相对于LLFF,相对压缩为3000×),这甚至比我们任何数据集的单个场景的单独输入图像的内存还要少。
我们的工作直接解决了以往使用MLP将对象和场景表示为连续函数的工作的不足。我们证明了将场景表示为5D神经辐射场(一个输出体积密度和视图依赖的发射辐射作为3D位置和2D观看方向的函数的MLP)比以前主要的训练深度CNN输出离散体素表示的方法产生更好的效果。
我们相信,这项工作在基于真实世界图像的图形管道方面取得了进展,其中复杂的场景可以由从实际对象和场景的图像中优化出来的神经辐射场组成。事实上,许多最近的方法已经建立在这项工作中提出的神经辐射场表示的基础上,并将其扩展到实现更多的功能,如重构、变形和动画。
图5。对使用基于物理的渲染器生成的新合成数据集的场景的测试集视图进行比较。我们的方法能够恢复在几何形状和外观上的细节,如船的索具,乐高的齿轮和踏板,麦克风闪亮的支架和网格格栅,以及材料的非兰伯特反射率。LLFF在麦克风支架上展示带状文物,材料的物品边缘,以及在船的桅杆和乐高物体内部的重影物品。SRN在每种情况下都会产生模糊和扭曲的渲染图。神经体积不能捕捉麦克风格栅或乐高齿轮的细节,它完全不能恢复船舶索具的几何形状。
图6。对真实世界场景的测试集视图的比较。LLFF是专门为这个用例(对真实场景的正向捕获)而设计的。与LLFF相比,我们的方法能够在渲染视图中更一致地表示精细的几何图形,如Fern的叶子和T-rex中的骨架肋骨和栏杆所示。我们的方法还正确地重建了LLFF难以清晰渲染的部分封闭区域,如底部蕨类作物叶子后面的黄色架子和底部兰花作物背景下的绿叶。在多个渲染之间混合也会导致LLFF的重复边缘,如在顶级兰花作物中看到的。SRN捕捉了每个场景中的低频几何形状和颜色变化,但不能复制任何精细的细节。