最近在做三维重建的相关工作,看了原版论文,做了机翻,自己又润色了一下,应该还算通顺,欢迎各位交流批评;(仅仅是重要部分翻译,没有全篇翻译)
我们的解决方案建立在三个主要组成部分上。首先,我们引入3D高斯作为灵活且富有表现力的场景表示。我们与之前的NeRF类方法使用相同的输入,即通过运动恢复结构(Structure-from-Motion, SfM)校准的相机[Snavely等人,2006],并使用SfM过程中免费产生的稀疏点云初始化一组3D高斯。与大多数需要多视图立体(Multi-View Stereo, MVS)数据的基于点的解决方案不同[Aliev等人,2020; Kopanas等人,2021; Rückert等人,2022],我们仅以SfM点作为输入就能获得高质量的结果。请注意,对于NeRF-合成数据集,即使使用随机初始化,我们的方法也能实现高质量。我们展示了3D高斯是一个很好的选择,因为它们是可微的体积表示,但也可以非常高效地通过将它们投影到2D,并使用标准α-混合,使用与NeRF等效的图像形成模型进行光栅化。我们方法的第二个组成部分是优化3D高斯的属性——3D位置、不透明度α、各向异性协方差和球谐(Spherical Harmonics, SH)系数——与自适应密度控制步骤交错进行,在优化过程中我们添加并偶尔移除3D高斯。优化过程产生了一个相当紧凑、无结构的、精确的场景表示(所有测试场景的1-500万个高斯)。我们方法的第三个也是最后一个要素是我们的实时渲染解决方案,它使用快速的GPU排序算法,并受到基于瓦片的光栅化的启发,遵循最近的工作[Lassner和Zollhofer 2021]。然而,由于我们的3D高斯表示,我们可以执行各向异性splatting,它尊重可见性排序——感谢排序和α-混合——并允许通过跟踪所需的尽可能多的排序splat的遍历来实现快速准确的反向传递。
总之,我们提供了以下贡献:
我们在之前发布的数据集上的结果表明,我们可以从多视图捕获中优化我们的3D高斯,并实现与最佳质量的先前隐式辐射场方法相等或更好的质量。我们还可以达成与最快方法相似的训练速度和质量,并且重要的是,为新视图合成提供了首个具有高质量的实时渲染。
最早的新视图合成方法基于光场,首先是密集采样[Gortler等人,1996;Levoy和Hanrahan,1996],然后允许非结构化捕获[Buehler等人,2001]。运动恢复结构(Structure-from-Motion, SfM)[Snavely等人,2006]的出现开启了一个全新领域,其中可以使用一组照片来合成新视图。SfM在校准相机期间估计了一个稀疏点云,最初用于简单的3D空间可视化。随后的多视图立体(Multi-View Stereo, MVS)在多年来产生了令人印象深刻的完整3D重建算法[Goesele等人,2007],促进了几种视图合成算法的发展[Chaurasia等人,2013;Eisemann等人,2008;Hedman等人,2018;Kopanas等人,2021]。所有这些方法都将输入图像重新投影并混合到新视图相机中,并使用几何体引导这种重新投影。这些方法在许多情况下都取得了优异的结果,但通常无法完全从未重建区域或“过度重建”中恢复,当MVS生成不存在的几何体时。最近的神经渲染算法[Tewari等人,2022]大幅减少了这些伪影,并避免了在GPU上存储所有输入图像的压倒性成本,在大多数方面超越了这些方法。
深度学习技术很早就被用于新视图合成[Flynn等人,2016;Zhou等人,2016];卷积神经网络(CNN)被用来估计混合权重[Hedman等人,2018],或者用于纹理空间解决方案[Riegler和Koltun,2020;Thies等人,2019]。基于多视图立体(MVS)的几何是这些方法的主要缺点;此外,使用CNN进行最终渲染经常导致时间上的闪烁。
Soft3D[Penner和Zhang,2017]首次提出了用于新视图合成的体积表示;随后提出了结合体积光线步进的深度学习技术[Henzler等人,2019;Sitzmann等人,2019],这些技术建立在连续可微的密度场上,以表示几何体。使用体积光线步进进行渲染由于需要查询大量的样本,因此成本显著。**神经辐射场(NeRF)[Mildenhall等人,2020]引入了重要性采样和位置编码来提高质量,但使用了一个大型多层感知器,这对速度产生了负面影响。NeRF的成功导致了大量跟进方法的出现,这些方法通过引入正则化策略来解决质量和速度问题;**目前新视图合成图像质量的最新技术是Mip-NeRF360[Barron等人,2022]。虽然渲染质量非常出色,但训练和渲染时间仍然非常高;我们能够在提供快速训练和实时渲染的同时,达到或在某些情况下超越这种质量。
最近的方法主要关注更快的训练和/或渲染,主要是通过利用三个设计选择:使用空间数据结构来存储(神经)特征,这些特征在体积光线步进期间随后被插值,不同的编码,以及MLP容量。这些方法包括不同变体的空间离散化[Chen等人,2022b,a;Fridovich-Keil和Yu等人,2022;Garbin等人,2021;Hedman等人,2021;Reiser等人,2021;Takikawa等人,2021;Wu等人,2022;Yu等人,2021],码本[Takikawa等人,2022],以及编码,例如哈希表[Müller等人,2022],允许使用更小的MLP或完全放弃神经网络[Fridovich-Keil和Yu等人,2022;Sun等人,2022]。
这些方法中最值得注意的是InstantNGP[Müller等人,2022],它使用哈希网格和占用网格来加速计算,并使用更小的MLP来表示密度和外观;以及Plenoxels[Fridovich-Keil和Yu等人,2022],它们使用稀疏体素网格来插值连续的密度场,并且能够完全放弃神经网络。两者都依赖于球谐函数:前者直接表示方向效应,后者对其颜色网络的输入进行编码。虽然两者都提供了出色的结果,但这些方法在某些情况下仍然难以有效表示空白空间,部分取决于场景/捕获类型。此外,图像质量在很大程度上受到用于加速的结构化网格选择的限制,渲染速度受到对每个光线步进步骤需要查询许多样本的需求的阻碍。我们使用的无结构、显式的GPU友好的3D高斯实现了更快的渲染速度和更好的质量,而无需神经组件。
基于点的方法有效地渲染了不连续和无结构的几何样本(即点云)[Gross和Pfister 2011]。在最简单的形式中,点样本渲染[Grossman和Dally 1998]光栅化一组固定大小的无结构点,它可能利用图形API原生支持的点类型[Sainz和Pajarola 2004]或在GPU上并行软件光栅化[Laine和Karras 2011; Schütz等人 2022]。虽然忠于底层数据,点样本渲染存在空洞,引起混叠,并且是严格不连续的。关于高质量基于点的渲染的开创性工作通过“splatting”比像素大的范围的点原语来解决这些问题,例如圆形或椭圆形光盘、椭球体或surfels[Botsch等人 2005; Pfister等人 2000; Ren等人 2002; Zwicker等人 2001b]。
最近,人们对可微基于点的渲染技术[Wiles等人 2020; Yifan等人 2019]产生了兴趣。点已经通过神经特征增强,并使用CNN进行渲染[Aliev等人 2020; Rückert等人 2022],从而实现快速甚至实时视图合成;然而,它们仍然依赖于MVS进行初始几何体的获取,因此继承了它的伪影,最明显的是在困难情况下的过度或不足重建,例如无特征/反光区域或薄结构。
基于点的α-混合和NeRF风格的体积渲染在本质上共享相同的图像形成模型。具体来说,颜色 C C C是通过沿射线进行体积渲染得到的:
C = ∑ i = 1 N T i ( 1 − exp ( − σ i δ i ) ) c i , with T i = exp ( − ∑ j = 1 i − 1 σ j δ j ) ( 1 ) C=\sum_{i=1}^{N} T_{i}\left(1-\exp \left(-\sigma_{i} \delta_{i}\right)\right) \mathbf{c}_{i} , \text { with } T_{i}=\exp \left(-\sum_{j=1}^{i-1} \sigma_{j} \delta_{j}\right) \quad (1) C=i=1∑NTi(1−exp(−σiδi))ci, with Ti=exp(−j=1∑i−1σjδj)(1)
其中,密度 σ \sigma σ 、透射率 T T T 和颜色 c c c的样本是沿射线以间隔 δ i \delta_i δi取的。可以重写为:
C = ∑ i = 1 N T i α i c i , ( 2 ) C = \sum_{i=1}^{N} T_i \alpha_i c_i, \quad (2) C=i=1∑NTiαici,(2)
其中
α i = ( 1 − exp ( − σ i δ i ) ) and T i = ∏ j = 1 i − 1 ( 1 − α j ) \alpha_i = (1 - \exp(-\sigma_i \delta_i)) \quad \text{and} \quad T_i = \prod_{j=1}^{i-1} (1 - \alpha_j) αi=(1−exp(−σiδi))andTi=j=1∏i−1(1−αj)
一个典型的基于点的神经方法(例如,[Kopanas等人,2022, 2021])通过混合N个有序点来计算像素的颜色 C C C:
C = ∑ i ∈ N c i α i ∏ j = 1 i − 1 ( 1 − α j ) , ( 3 ) C = \sum_{i \in N} c_i \alpha_i \prod_{j=1}^{i-1} (1 - \alpha_j), \quad (3) C=i∈N∑ciαij=1∏i−1(1−αj),(3)
其中 c i c_i ci 是每个点的颜色, α i \alpha_i αi是通过计算具有协方差 Σ \Sigma Σ 的2D高斯函数乘以每个点的学习透明度来给出的[Yifan等人,2019]。
从方程2和方程3,我们可以清楚地看到图像形成模型是相同的。然而,渲染算法却非常不同。NeRF是一种连续表示,隐式地表示空闲/被占用的空间;需要昂贵的随机采样来找到方程2中的样本,从而产生噪声和计算成本。相比之下,点是无结构的、离散的表示,它足够灵活,可以创建、销毁和移动类似于NeRF的几何形状。这是通过优化不透明度和位置来实现的,如Kopanas等人[2021]的先前工作所示,同时避免了完整的体积表示的缺点。
Pulsar[Lassner和Zollhofer 2021]实现了快速的球体光栅化,这启发了我们基于分块和排序的渲染器。然而,鉴于上述分析,我们希望保持(近似)传统的α-混合在排序的splats上,以拥有体积表示的优势:与他们的顺序无关的方法形成对比,我们的光栅化尊重可见性顺序。**此外,我们在像素中的所有splats上反向传播梯度,并光栅化各向异性splats。**所有这些元素都有助于我们结果的高视觉质量(见第7.3节)。此外,上述提到的先前方法也使用CNN进行渲染,这导致时间上的不稳定。尽管如此,Pulsar[Lassner和Zollhofer 2021]和ADOP[Rückert等人 2022]的渲染速度激发了我们开发快速渲染解决方案的动力。
专注于反射效果,Neural Point Catacaustics[Kopanas等人 2022]的漫反射基于点的渲染轨迹通过使用MLP克服了这种时间上的不稳定性,但仍然需要MVS几何作为输入。这一类中的最新方法[Zhang等人 2022]不需要MVS,并且还使用SH表示方向;然而,它只能处理一个物体的场景,并且需要掩模进行初始化。虽然对于小分辨率和低点数很快,但它如何扩展到典型数据集的场景尚不清楚[Barron等人 2022; Hedman等人 2018; Knapitsch等人 2017]。我们使用3D高斯进行更灵活的场景表示,避免了对MVS几何的需求,并得益于我们针对投影高斯的基于瓦片的渲染算法,实现了实时渲染。
一项最近的研究[Xu等人,2022]利用点通过径向基函数方法来封装辐射场。他们在优化过程中整合了点修剪和密集化技术,但他们依赖于体积光线步进来实现,并且无法达到实时显示率。
在人类动作捕捉领域,3D高斯已被用来描绘捕捉到的人体[Rhodin等人,2015; Stoll等人,2011];最近,它们已经与体积光线步进结合用于视觉任务[Wang等人,2023]。神经体积原语的概念也已在类似的背景下提出[Lombardi等人,2021]。虽然这些方法激发了我们采用3D高斯作为场景表示的选择,但它们集中在重建和渲染单个孤立对象(如人体或面部)的特定场景上,这些场景的深度复杂性很小。相比之下,我们对各向异性协方差的优化、我们交叉的优化/密度控制,以及我们高效的渲染深度排序使我们能够处理包括背景在内的完整、复杂的场景,无论是室内还是室外环境,以及具有大量深度复杂性的场景。
我们的输入是一组静态场景的图像,以及通过SfM [Schönberger 和 Frahm 2016] 校准的相应相机,这会产生一个稀疏点云作为副作用。从这些点出发,我们创建了一组3D高斯(第4节),由位置(均值)、协方差矩阵和不透明度 α α α定义,这允许非常灵活的优化机制。这导致了一个相当紧凑的3D场景表示,部分原因是可以使用高度各向异性的体积splat来紧凑地表示细结构。辐射场的方向外观组成部分(颜色)通过球谐函数(SH)表示,遵循标准做法 [Fridovich-Keil 和 Yu 等人 2022; Müller 等人 2022]。我们的算法通过一系列3D高斯参数的优化步骤,即位置、协方差、 α \alpha α和SH系数,以及用于自适应控制高斯密度的操作,来创建辐射场表示(第5节)。我们方法的关键在于我们基于瓦片的光栅化器(第6节),它允许各向异性splat的α-混合,由于快速排序而尊重可见性顺序。我们的快速光栅化器还包括一个快速的反向传递,通过跟踪累积的α值,没有限制可以接受梯度的高斯数量。我们方法的概览在图2中进行了说明。
我们的目标是优化场景表示,以允许从一组没有法线的稀疏的(SfM)点开始进行高质量的新视角合成。为此,我们需要一个原始对象,它继承了不同可微体积表示的属性,同时是无结构和显式的,以允许非常快速的渲染。我们选择了3D高斯,它们是可微的,并且可以轻松地投影到2D splats上,允许快速的α-混合进行渲染。
我们的表现与之前使用2D点[Kopanas等人,2021;Yifan等人,2019]的方法相似,并假设每个点都是一个带有法线的小型平面圆。鉴于SfM点的极端稀疏性,估计法线非常困难。同样地,从这样的估计中优化非常嘈杂的法线将非常具有挑战性。
相反,我们将几何形状建模为一组不需要法线的3D高斯。我们的高斯由在世界空间中定义的完整3D协方差矩阵 Σ \Sigma Σ定义在点(均值) μ μ μ中心:这个高斯在我们混合过程中乘以 α α α。
G ( x ) = e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) G(x) = e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)} G(x)=e−21(x−μ)TΣ−1(x−μ)
然而,我们需要将我们的3D高斯投影到2D以进行渲染。Zwicker等人[2001a]展示了如何将此投影到图像空间。给定视图变换 W W W,相机坐标系中的协方差矩阵 Σ ′ Σ' Σ′如下给出: Σ ′ = J W Σ W T J T \Sigma' = J W \Sigma W^T J^T Σ′=JWΣWTJT ,其中 J J J是投影变换的仿射近似的雅可比矩阵。Zwicker等人[2001a]还表明,如果我们跳过 Σ ′ Σ' Σ′的第三行和列,我们将获得一个 2 × 2 2 \times 2 2×2方差矩阵,具有与从带有法线的平面点开始的先前工作[Kopanas等人,2021]相同的结构和属性。
一个明显的方法将直接优化协方差矩阵Σ以获得代表辐射场的3D高斯。然而,协方差矩阵只有当它们是正半定时才具有物理意义。对于我们所有参数的优化,我们使用梯度下降,这不能很容易地约束以产生这样的有效矩阵,更新步骤和梯度可以很容易生成无效的协方差矩阵。
因此,我们选择了一种更直观但同样富有表现力的表示形式进行优化。一个3D高斯的协方差矩阵 Σ Σ Σ类似于描述一个椭圆体的构造。给定一个缩放矩阵S和旋转矩阵R,我们可以找到相应的 Σ = R S S T R T \Sigma = R S S^T R^T Σ=RSSTRT。为了允许独立地优化这两个因素,我们分别存储它们:一个3D向量 s s s用于缩放,一个四元数 q q q来表示旋转。这些可以轻松地转换为它们各自的矩阵并组合,确保归一化 q q q以获得有效的单位四元数。
为了避免在训练期间由于自动微分而产生的显著开销,我们显式地推导出了所有参数的梯度。确切的导数计算细节在附录A中。这种适用于优化的各向异性协方差表示使我们能够优化3D高斯以适应捕获场景中不同形状的几何形状,从而得到相当紧凑的表示。图3展示了这样的案例。
我们方法的核心是优化步骤,它创建了一组密集的3D高斯,准确代表场景以进行自由视点合成。除了位置 p \mathbf{p} p 、 α \alpha α 和协方差 Σ \Sigma Σ之外,我们还优化代表每个高斯颜色 c \mathbf{c} c的球谐系数,以正确捕获场景的视角依赖性外观。这些参数的优化与控制高斯密度的步骤交错进行,以更好地代表场景。
优化基于连续迭代的渲染过程,将得到的图像与捕获数据集中的训练视图进行比较。由于3D到2D投影的歧义,几何体可能被错误地放置。因此,我们的优化需要能够创建几何体,并且在几何体被错误放置时也能够销毁或移动它。3D高斯协方差的参数质量对表示的紧凑性至关重要,因为可以用少量大型各向异性高斯来捕获大面积的均匀区域。
我们使用随机梯度下降技术进行优化,充分利用标准的GPU加速框架,以及为某些操作添加自定义CUDA内核的能力,遵循最新的最佳实践[Fridovich-Keil 和 Yu 等人 2022; Sun 等人 2022]。特别是,我们的快速光栅化(见第6节)在优化效率中至关重要,因为它是优化的主要计算瓶颈。
我们使用Sigmoid激活函数对α进行约束,将其限制在[0-1)范围内,并获取平滑的梯度,对协方差的尺度使用指数激活函数,原因相同。我们估计初始协方差矩阵为各向同性高斯,其轴等于到最近三个点的平均距离。我们使用与Plenoxels [Fridovich-Keil 和 Yu 等人 2022] 类似的标准指数衰减调度技术,但仅用于位置。损失函数是L1结合D-SSIM项:
L = ( 1 − λ ) L 1 + λ L D − S S I M L = (1 − \lambda )L_1 + \lambda L_{D-SSIM} L=(1−λ)L1+λLD−SSIM
我们从SfM得到的初始稀疏点集开始,然后应用我们的方法来自适应地控制高斯的数量及其在单位体积1上的密度,允许我们从最初的稀疏高斯集合过渡到更好地表示场景的更密集的集合,并具有正确的参数。在优化预热后(见第7.1节),我们每100次迭代进行一次密集化,并移除本质上是透明的高斯,即 α \alpha α小于阈值 ε α \varepsilon_\alpha εα的高斯。
我们对高斯的自适应控制需要填充空白区域。它专注于缺少几何特征的区域(“欠重建”),但也在高斯覆盖场景大面积的区域(通常对应于“过重建”)。我们观察到这两种情况都具有大的视图空间位置梯度。直观地说,这很可能是因为它们对应于尚未很好地重建的区域,优化试图移动高斯以纠正这一点。
由于这两种情况都是密集化的良好候选者,我们对平均视图空间位置梯度大小超过阈值 τ p o s \tau_{pos} τpos的高斯进行密集化,在测试中我们将其设置为0.0002。接下来,我们将介绍这个过程的详细信息,如图4所示。
对于位于欠重建区域的小高斯,我们需要覆盖必须创建的新几何体。为此,克隆高斯是首选,只需创建相同大小的副本,并沿着位置梯度的方向移动它。
另一方面,在方差高的区域的大高斯需要被分成更小的高斯。我们用两个新的高斯替换这样的高斯,并将它们的尺度除以我们在实验中确定的因子 φ = 1.6 φ = 1.6 φ=1.6。我们还使用原始的3D高斯作为PDF(Probability Density Function)来初始化它们的位置。
在第一种情况下,我们检测并处理增加系统总体积和高斯数量的需求,而在第二种情况下,我们保持总体积但增加高斯的数量。**与其他体积表示类似,我们的优化可能会因为靠近输入相机的浮动物而陷入困境;在我们的情况下,这可能导致高斯密度的不合理增加。**调节高斯数量增加的有效方法是每N = 3000次迭代将 α α α值设置接近零。然后优化会增加需要的高斯的 α α α值,**同时允许我们的剔除方法按上述描述剔除 α α α小于 ε α \varepsilon_\alpha εα的高斯。高斯可能会收缩或增长并与其他人重叠,但我们定期移除在worldspace中非常大的高斯和在viewspace中过大的高斯。**这种策略总体上很好地控制了高斯的总数。我们的模型中的高斯始终保持欧几里得空间中的原语;与其他方法[Barron等人,2022;Fridovich-Keil和Yu等人,2022]不同,我们不需要对远距离或大高斯进行空间压缩、变形或投影策略。
我们的目标是实现快速的整体渲染和快速排序,以允许近似α-混合——包括各向异性的splat——并避免之前工作中存在的可以接受梯度的splat数量的限制[Lassner和Zollhofer 2021]。
为了实现这些目标,我们设计了一种基于区块的高斯splat光栅化器,受到最近软件光栅化方法[Lassner和Zollhofer 2021]的启发,该方法预先对整个图像的原语进行排序,避免了每像素排序的成本,这阻碍了之前的α-混合解决方案[Kopanas等人 2022, 2021]。我们的快速光栅化器允许在任意数量的混合高斯上进行高效的反向传播,只需额外的内存消耗,并且每像素的开销是恒定的。我们的光栅化流水线是完全可微的,并且考虑到2D投影(第4节),可以光栅化类似于之前2D splatting方法[Kopanas等人 2021]的各向异性splat。
我们的方法首先将屏幕分割成16×16的区块,然后继续对视锥体和每个区块中的3D高斯进行裁剪。具体来说,我们只保留与视锥体相交的99%置信区间的高斯。此外,我们使用保护范围来删除极端位置的高斯(比如,那些靠近近平面和远在视锥体外的高斯),因为计算它们的投影2D协方差将是不稳定的。然后,我们根据它们覆盖的区块数量实例化每个高斯,并将每个实例分配一个结合视图空间深度和区块ID的键。然后我们使用单个快速GPU基数排序[Merrill和Grimshaw 2010]根据这些键对高斯进行排序。注意,没有额外的逐像素排序,混合是基于这种初始排序执行的。因此,我们的α-混合在某些配置中可以是近似的。然而,当splat接近单个像素的大小时,这些近似变得可以忽略不计。我们发现这种选择在收敛场景中不会产生可见伪影的情况下大大增强了训练和渲染性能。
排序高斯后,我们通过识别每个区块上splat的深度排序的第一个和最后一个元素,为每个区块生成一个列表。对于光栅化,我们为每个区块启动一个线程块。每个块首先协作地将高斯包加载到共享内存中,然后,对于给定的像素,通过从前到后遍历列表,累积颜色和α值,从而最大化数据加载/共享和处理的并行性。当我们在像素中达到目标α饱和度时,相应的线程停止。定期查询区块中的线程,并在所有像素都饱和时(即,α变为1)终止整个瓦片的处理。附录C中详细介绍了排序和整体光栅化方法的高级概述。
在光栅化期间,α的饱和度是唯一的停止标准。与以前的工作不同,我们不限制可以接受梯度更新的混合基元的数量。我们执行此属性,以允许我们的方法处理具有任意、变化深度复杂性的场景,并准确学习它们,而无需进行特定于场景的超参数调整。在反向传递期间,因此我们必须恢复每个像素在前向传递中混合的完整序列。一种解决方案是将每个像素混合点的任意长列表存储在全局内存中[Kopanas等人 2021]。为了避免隐含的动态内存管理开销,我们选择再次遍历每个区块的列表;我们可以重新利用前向传递中排序的高斯数组和区块范围。为了便于梯度计算,我们现在从后向前遍历它们。
遍历从影响区块中任何像素的最后一个点开始,再次协作地将点加载到共享内存中。**此外,每个像素只有在其深度低于或等于前向传递期间对其颜色做出贡献的最后一个点的深度时,才会开始(昂贵的)重叠测试和处理。**计算第4节中描述的梯度需要在原始混合过程中每一步累积的不透明度值。而不是在反向传递中遍历显式的逐渐缩小的不透明度列表,我们可以通过仅在前向传递结束时存储总累积不透明度来恢复这些中间不透明度。具体来说,每个点在前向过程中存储最终累积的不透明度 α α α;在我们的前向后遍历中,我们将其除以每个点的 α α α,以获得梯度计算所需的系数。
我们使用PyTorch框架用Python实现了我们的方法,并编写了自定义的CUDA内核用于光栅化,这些内核是之前方法[Kopanas等人,2021]的扩展版本,并使用了NVIDIA CUB排序例程进行快速基数排序[Merrill和Grimshaw 2010]。我们还使用开源的SIBR[Bonopera等人,2020]构建了一个交互式查看器,用于交互式查看。我们使用此实现来测量我们实现的帧率。源代码和我们所有的数据可在以下网址获取:https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/
优化细节。为了稳定性,我们在较低分辨率下“预热”计算。具体来说,我们使用4倍较小的图像分辨率开始优化,并在250次和500次迭代后分别上采样两次。
球谐系数的优化对缺少角度信息很敏感。对于典型的“类似于NeRF”的捕获,其中中心物体被拍摄在围绕它的整个半球上的照片观察,优化工作良好。然而,如果捕获缺少角度区域(例如,当捕获场景的角落,或执行“内外翻转”[Hedman等人,2016]捕获)时,优化可能会产生完全错误的SH的零阶分量的值(即,基础色或漫反射颜色)。为了克服这个问题,我们首先只优化零阶分量,然后在每1000次迭代后增加SH的一个阶数,直到所有4个SH阶数都被表示。
结果:我们在总共13个真实场景上测试了我们的算法,这些场景来自之前发布的数据集和合成的Blender数据集[Mildenhall等人,2020]。特别是,我们在Mip-Nerf360[Barron等人,2022]中呈现的所有场景上测试了我们的方法,这是当前NeRF渲染质量的最高水平,还有来自Tanks&Temples数据集[2017]的两个场景和由Hedman等人[Hedman等人,2018]提供的两个场景。我们选择的场景具有完全不同的捕获风格,涵盖了有界的室内场景和大型无界的户外环境。我们在评估中对所有实验使用相同的超参数配置。除了Mip-NeRF360方法(见下文),所有结果都在A6000 GPU上运行报告。
在补充材料中,我们展示了一些场景的渲染视频路径,这些场景包含远离输入照片的视图。
现实世界场景:在质量方面,当前的最先进水平是Mip-Nerf360[Barron等人,2021]。我们将此方法作为质量基准进行比较。我们还与两种最新的快速NeRF方法进行了比较:InstantNGP[Müller等人,2022]和Plenoxels[Fridovich-Keil和Yu等人,2022]。
我们对数据集使用训练/测试分割,采用Mip-NeRF360建议的方法,每8张照片取一张进行测试,以生成一致且有意义的比较,使用文献中最常用的标准PSNR、L-PIPS和SSIM指标生成评估指标;请参见表1。表中的所有数字都来自我们运行作者代码的所有先前方法的结果,除了Mip-NeRF360在他们自己的数据集上的结果,我们从原始出版物中复制了这些数字,以避免当前SOTA的混淆。对于我们图表中的图像,我们使用了我们自己的Mip-NeRF360运行:这些运行的数字在附录D中。我们还展示了平均训练时间、渲染速度和用于存储优化参数的内存。我们报告了InstantNGP的基本配置(Base)的结果,它运行了35K次迭代,以及作者建议的略大网络(Big),以及我们的两种配置,7K和30K次迭代。我们在图6中展示了我们两种配置的视觉质量差异。在许多情况下,7K次迭代的质量已经相当不错了。
训练时间在数据集上有所不同,我们分别报告。请注意,图像分辨率也在数据集上有所不同。在项目网站上,我们提供了所有用于计算所有方法(我们的和以前的工作)在所有场景上测试视图的所有渲染图。请注意,我们保持了所有渲染的原生输入分辨率。
表格显示,我们的完全收敛模型实现了与SOTA Mip-NeRF360方法相当,有时略好的质量;请注意,在同一硬件上,他们的平均训练时间是48小时2,与我们的35-45分钟相比,他们的渲染时间是10秒/帧。我们在5-10分钟的训练后实现了与InstantNGP和Plenoxels相当的质量,但额外的训练时间允许我们实现SOTA质量,其他快速方法并非如此。对于Tanks & Temples,我们在类似的训练时间(我们的情况下约7分钟)实现了与基本InstantNGP类似的质量。
我们还展示了我们的方法和选定的先前渲染方法在图5中为我们和之前的渲染方法选择的左出测试视图的这种比较的视觉结果;我们方法的结果是在30K次训练迭代后得到的。我们看到,在某些情况下,即使是Mip-NeRF360也有剩余的伪影,我们的方法避免了(例如,在Bicycle、Stump中的模糊,或在Room的墙壁上的模糊)。在补充视频和网页上,我们提供了从远处的路径比较。我们的方法倾向于保留视觉细节,即使是从远处也能很好地覆盖的区域,这并不总是以前的方法的情况。
合成有界场景:除了现实场景外,我们还评估了我们的方法在合成Blender数据集[Mildenhall等人,2020]上的效果。所讨论的场景提供了一组详尽的视图,尺寸有限,并提供了确切的相机参数。在这种情况下,我们甚至可以在随机初始化下实现最先进的结果:我们从100K个均匀随机高斯开始训练,这些高斯位于包含场景边界的体积内。我们的方法迅速并自动地将它们修剪到大约6-10K个有意义的高斯。经过30K次迭代训练的最终模型大小大约达到每个场景200-500K个高斯。我们在表2中使用白色背景进行兼容性比较,报告并比较了我们实现的PSNR得分与以前的方法。示例可以在图10中看到(从左边数第二张图像)以及在补充材料中。训练的合成场景以180-300 FPS的速度渲染。
紧凑性。与以前的显式场景表示相比,我们优化中使用的各向异性高斯能够用较少的参数建模复杂形状。
我们通过评估我们的方法与[Zhang等人,2022]获得的高度紧凑的基于点的模型来展示这一点。我们从他们通过使用前景掩模进行空间雕刻获得的初始点云开始,优化直到我们达到他们报告的PSNR得分。这通常在2-4分钟内发生。
我们使用大约四分之一的点数超过了他们报告的指标,平均模型大小为3.8 MB,而他们的是9 MB。我们注意到,对于这个实验,我们只使用了我们的球谐函数的两个度数,与他们的类似。
我们分离了我们所做的不同贡献和算法选择,并构建了一系列实验来衡量它们的效果。具体来说,我们测试了算法的以下方面:从SfM初始化,我们的密集化策略,各向异性协方差,我们允许无限数量的splat具有梯度,以及使用球面谐波。每个选择的数量效应在表3中进行了总结。
从SfM初始化:我们还评估了从SfM点云初始化3D高斯的重要性。对于这次消融,我们在输入相机的边界框大小的三倍的立方体内均匀采样。我们观察到,即使没有SfM点,我们的方法也表现得相对较好,避免了完全失败。相反,它主要在背景上降级,见图7。
在训练视图没有很好地覆盖的区域,随机初始化方法似乎有更多的浮动物,这些浮动物无法通过优化来移除。另一方面,合成的NeRF数据集没有这种行为,因为它没有背景,并且由输入相机很好地约束(见上面的讨论)。
密集化:接下来,我们评估了我们的两种密集化方法,更具体地说,是第5节中描述的克隆和分裂策略。我们分别禁用每种方法,并使用其余方法不变进行优化。结果表明,分裂大高斯对于允许背景的良好重建很重要,见图8,而克隆小高斯而不是分裂它们允许更好地和更快地收敛,特别是当场景中出现细结构时。
具有梯度的splat的无限深度复杂性:我们评估了在最前面的N个点之后跳过梯度计算是否会给我们带来速度而不影响质量,正如Pulsar [Lassner和Zollhofer 2021]所建议的。在这个测试中,我们选择N=10,这是Pulsar中默认值的两倍,但这导致了由于梯度计算中的严重近似而不稳定优化。对于Truck场景,质量降低了11dB的PSNR(见表3,Limited-BW),视觉结果在图9中展示了Garden。
各向异性协方差:我们方法中的一个重要算法选择是优化3D高斯的完整协方差矩阵。为了演示这种选择的效果,我们进行了消融,通过优化一个单一的标量值来移除各向异性,该标量值控制所有三个轴上的3D高斯的半径。这种优化的结果在图10中以视觉形式呈现。我们观察到,各向异性显著提高了3D高斯与表面对齐的质量,这反过来又允许在保持相同数量的点的同时,大大提高渲染质量。
球面谐波:最后,使用球面谐波提高了我们的总体PSNR得分,因为它们补偿了视角依赖效应(表3)。
我们的方法并非没有局限性。在场景观察不佳的区域,我们会出现伪影;在这些区域,其他方法也同样面临挑战(例如,参见图11中的Mip-NeRF360)。尽管如上所述,各向异性高斯有许多优点,我们的方法可能会产生拉长的伪影或“斑驳”的高斯(见图12);同样,在这些情况下,先前的方法也面临挑战。
我们的优化偶尔也会产生弹出伪影,这通常发生在创建大高斯的区域,尤其是在视角依赖外观的区域。这些弹出伪影的一个原因是光栅化器中的保护带简单地拒绝了高斯。更系统化的剔除方法可以减轻这些伪影。另一个因素是我们简单的可见性算法,它可能导致高斯突然切换深度/混合顺序。这可以通过抗锯齿来解决,我们将其留作未来的工作。 此外,我们目前没有对我们的优化应用任何正则化;这样做将有助于处理未观察到的区域和弹出伪影。
虽然我们使用了相同的超参数进行了全面评估,但早期实验表明,在非常大的场景(例如,城市数据集)中收敛可能需要降低位置学习率。
尽管与以前的基于点的方法相比,我们非常紧凑,但我们的内存消耗比基于NeRF的解决方案要高得多。在大型场景的训练期间,未优化原型的峰值GPU内存消耗可能超过20 GB。然而,通过仔细实现优化逻辑的低级实现(类似于InstantNGP),这个数字可以显著降低。渲染训练场景需要足够的GPU内存来存储完整模型(对于大规模场景是几百兆字节)和额外的30-500 MB用于光栅化器,这取决于场景大小和图像分辨率。我们注意到,有很多机会进一步减少我们方法的内存消耗。点云的压缩技术是一个研究充分的领域[De Queiroz和Chou 2016];将这些方法适应我们的表示形式将是很有趣的。
我们提出了第一种真正允许实时、高质量辐射场渲染的方法,适用于各种场景和捕获风格,同时所需的训练时间与最快的先前方法具有竞争力。
我们选择的3D高斯基元保留了体积渲染的属性,以便进行优化,同时直接允许快速基于splat的光栅化。我们的工作表明,与广泛接受的观点相反,对于快速和高质量的辐射场训练,连续表示并不是严格必要的。
我们的训练时间的大部分(约80%)花在Python代码上,因为我们在PyTorch中构建了我们的解决方案,以使我们的方法易于被其他人使用。只有光栅化例程是实现为优化的CUDA内核。我们预计,将其余优化完全移植到CUDA,如InstantNGP [Müller等人,2022]中所做的那样,可能能够为性能至关重要的应用实现显著的进一步加速。
我们还展示了利用实时渲染原理的重要性,利用GPU的强大功能和软件光栅化流水线架构的速度。这些设计选择是训练和实时渲染性能的关键,为以前的体积光线步进提供了性能优势。
看看我们的高斯是否可以用于执行捕获场景的网格重建将是很有趣的。除了由于网格的广泛使用而带来的实际意义外,这将使我们能够更好地了解我们的方法在体积和表面表示之间的连续体中究竟处于什么位置。
总之,我们提出了第一个辐射场的实时渲染解决方案,其渲染质量与之前的最昂贵的方法相匹配,训练时间比现有的最快解决方案具有竞争力。