【ACM_2023】3D Gaussian Splatting for Real-Time Radiance Field Rendering

【ACM_2023】3D Gaussian Splatting for Real-Time Radiance Field Rendering

  • 一、前言
  • Abstract
  • [1 INTRODUCTION](#1 INTRODUCTION)
  • [2 RELATED WORK](#2 RELATED WORK)
    • [2.1 Traditional Scene Reconstruction and Rendering](#2.1 Traditional Scene Reconstruction and Rendering)
    • [2.2 Neural Rendering and Radiance Fields](#2.2 Neural Rendering and Radiance Fields)
    • [2.3 Point-Based Rendering and Radiance Fields](#2.3 Point-Based Rendering and Radiance Fields)
  • [3 OVERVIEW](#3 OVERVIEW)
  • [4 DIFFERENTIABLE 3D GAUSSIAN SPLATTING](#4 DIFFERENTIABLE 3D GAUSSIAN SPLATTING)
  • [5 OPTIMIZATION WITH ADAPTIVE DENSITY CONTROL OF 3D GAUSSIANS](#5 OPTIMIZATION WITH ADAPTIVE DENSITY CONTROL OF 3D GAUSSIANS)
    • [5.1 Optimization](#5.1 Optimization)
    • [5.2 Adaptive Control of Gaussians](#5.2 Adaptive Control of Gaussians)
  • [6 FAST DIFFERENTIABLE RASTERIZER FOR GAUSSIANS](#6 FAST DIFFERENTIABLE RASTERIZER FOR GAUSSIANS)
  • [7 IMPLEMENTATION, RESULTS AND EVALUATION](#7 IMPLEMENTATION, RESULTS AND EVALUATION)
    • [7.1 Implementation](#7.1 Implementation)
    • [7.2 Results and Evaluation](#7.2 Results and Evaluation)
    • [7.3 Ablations](#7.3 Ablations)
    • [7.4 Limitations](#7.4 Limitations)
  • [8 DISCUSSION AND CONCLUSIONS](#8 DISCUSSION AND CONCLUSIONS)
  • [A DETAILS OF GRADIENT COMPUTATION](#A DETAILS OF GRADIENT COMPUTATION)
  • [B OPTIMIZATION AND DENSIFICATION ALGORITHM](#B OPTIMIZATION AND DENSIFICATION ALGORITHM)
  • [C DETAILS OF THE RASTERIZER](#C DETAILS OF THE RASTERIZER)
  • [D PER-SCENE ERROR METRICS](#D PER-SCENE ERROR METRICS)

一、前言

Bernhard Kerbl, Georgios Kopanas, Thomas Leimkühler, George Drettakis

【Paper_arxiv】 > 【Github_Code】 > 【Project】

  1. 引入了三个关键要素,能够在保持有竞争力的训练时间的同时实现最先进的视觉质量,并且重要的是允许以 1080p 分辨率进行高质量实时(≥ 30 fps)新颖的视图合成。首先 ,从相机校准期间产生的稀疏点开始,用 3D 高斯表示场景,保留连续体积辐射场的所需属性以进行场景优化,同时避免在空白空间中进行不必要的计算;其次 ,对 3D 高斯进行交错优化/密度控制,特别是优化各向异性协方差以实现场景的准确表示;第三,开发了一种快速可见性感知渲染算法,该算法支持各向异性泼溅,既加速训练又允许实时渲染。

Abstract

背景问题:辐射场方法最近彻底改变了用多张照片或视频捕获的场景的新颖视图合成。然而,实现高视觉质量仍然需要训练和渲染成本高昂的神经网络,而最近更快的方法不可避免地会牺牲速度来换取质量。对于无界且完整的场景(而不是孤立的物体)和1080p分辨率渲染,当前没有方法可以实现实时显示速率。
介绍:我们引入了三个关键要素,使我们能够在保持有竞争力的训练时间的同时实现最先进的视觉质量,并且重要的是允许以 1080p 分辨率进行高质量实时(≥ 30 fps)新颖的视图合成。首先 ,从相机校准期间产生的稀疏点开始,我们用 3D 高斯表示场景,保留连续体积辐射场的所需属性以进行场景优化,同时避免在空白空间中进行不必要的计算;其次 ,我们对 3D 高斯进行交错优化/密度控制,特别是优化各向异性协方差以实现场景的准确表示;第三 ,我们开发了一种快速可见性感知渲染算法,该算法支持各向异性泼溅,既加速训练又允许实时渲染。
实验:我们在几个已建立的数据集上展示了最先进的视觉质量和实时渲染。

CCS Concepts: • Computing methodologies → Rendering; Point-based models; Rasterization; Machine learning approaches.

其他关键词和短语:新颖的视图合成、辐射场、3D 高斯、实时渲染

1 INTRODUCTION

网格和点是最常见的 3D 场景表示,因为它们是显式的并且非常适合基于 GPU/CUDA 的快速光栅化(rasterization)。相比之下,最近的神经辐射场(NeRF)方法建立在连续场景表示的基础上,通常使用体积光线行进(volumetric ray-marching)来优化多层感知器(MLP),以对捕获的场景进行新颖的视图合成。类似地,迄今为止最有效的辐射场解决方案通过对存储在体素等中的值进行插值来构建连续表示[Fridovich-Keil 和 Yu 等人。 2022] 或哈希 [Müller 等人。 2022] 网格或点 [Xu 等人。 2022]。虽然这些方法的连续性质有助于优化,但渲染所需的随机采样成本高昂,并且可能会导致噪声。我们引入了一种结合了两全其美的新方法:我们的 3D 高斯表示允许通过最先进的 (SOTA) 视觉质量和有竞争力的训练时间进行优化,而我们基于图块的(tile-based)泼溅解决方案可确保实时渲染在几个先前发布的数据集上达到 1080p 分辨率的 SOTA 质量 [Barron 等人。 2022 年;赫德曼等人。 2018;纳皮奇等人。 2017](见图1)。

我们的方法实现了辐射场的实时渲染,其质量与之前的方法的最佳质量相当[Barron 等人。 2022],同时只需要与之前最快的方法竞争的优化时间[Fridovich-Keil 和 Yu 等人。 2022 年;穆勒等人。 2022]。此性能的关键是新颖的 3D 高斯场景表示与实时可微分渲染器,它为场景优化和新颖的视图合成提供了显着的加速。请注意,对于与 InstantNGP 相当的训练时间 [Müller 等人。 2022],我们达到了与他们相似的质量;虽然这是他们达到的最高质量,但通过 51 分钟的训练,我们实现了最先进的质量,甚至比 Mip-NeRF360 稍好一些 [Barron 等人。 2022年]。

我们的目标是允许对使用多张照片捕获的场景进行实时渲染,并以与典型真实场景的最有效的先前方法一样快的优化时间创建表示。最近的方法实现了快速训练\cite{plenoxels,mueller2022instant},但很难达到当前 SOTA NeRF 方法(即 Mip-NeRF360 \cite{barron2022mipnerf360})获得的视觉质量,这需要长达 48 小时的训练时间。快速但质量较低的辐射场方法可以根据场景实现交互式渲染时间(每秒 10-15 帧),但达不到实时渲染 {( ≥ \geq ≥ 30~fps )} 高分辨率。

我们的解决方案基于三个主要组件。我们首先引入 3D 高斯作为灵活且富有表现力的场景表示 。我们从与之前类似 NeRF 的方法相同的输入开始,即使用运动结构 (SfM) 校准的相机 [Snavely 等人。 2006] 并使用作为 SfM 过程的一部分免费生成的稀疏点云来初始化 3D 高斯集。与大多数需要多视图立体 (MVS) 数据 的基于点的解决方案相比 [Aliev 等人。 2020;科帕纳斯等人。 2021 年;吕克特等人。 2022],我们仅使用 SfM 点作为输入就获得了高质量的结果。请注意,对于 NeRF 合成数据集,我们的方法即使在随机初始化的情况下也能达到高质量。我们证明 3D 高斯是一个很好的选择,因为它们是可微分的体积表示,但也可以通过将它们投影到 2D 并应用标准混合(使用与 NeRF 等效的图像形成模型)来非常有效地进行光栅化。我们方法的第二个组成部分是优化 3D 高斯的属性 - 3D 位置、不透明度、各向异性协方差和球谐(SH)系数 - 与自适应密度控制步骤交错 ,其中我们在优化过程中添加和偶尔删除 3D 高斯。优化过程产生相当紧凑、非结构化且精确的场景表示(所有测试场景为 1-5 百万高斯)。我们方法的第三个也是最后一个元素是我们的实时渲染解决方案 ,它使用快速 GPU 排序算法,并受到基于图块的光栅化(tile-based rasterization)的启发,遵循最近的工作 [Lassner 和 Zollhofer 2021]。然而,借助我们的 3D 高斯表示,我们可以执行尊重可见性排序的各向异性泼溅(得益于排序和混合),并通过跟踪所需数量的排序泼溅的遍历来实现快速、准确的向后传递。

总而言之,我们提供以下贡献:

  • 引入各向异性3D 高斯作为辐射场的高质量、非结构化表示。
  • 3D 高斯属性的优化方法,与自适应密度控制相结合,为捕获的场景创建高质量的表示。
  • GPU 的快速、可微分渲染方法具有可见性,允许各向异性泼溅和快速反向传播,以实现高质量的新颖视图合成。

我们对之前发布的数据集的结果表明,我们可以通过多视图捕获来优化 3D 高斯,并获得与之前最佳质量的隐式辐射场方法相同或更好的质量。我们还可以实现与最快方法类似的训练速度和质量,重要的是为新视图合成提供第一个高质量的实时渲染。

我们首先简要概述传统重建,然后讨论基于点的渲染和辐射场工作,讨论它们的相似性;辐射场是一个广阔的领域,因此我们只关注直接相关的工作。

有关该领域的完整报道,请参阅最近的精彩调查\cite{tewari2022advances,xie2022neural}。

2.1 Traditional Scene Reconstruction and Rendering

第一个新颖的视图合成方法基于光场,首先是密集采样的 [Gortler 等人。 1996; Levoy 和 Hanrahan 1996] 然后允许非结构化捕获(unstructured capture) [Buehler 等人。 2001]。运动结构 (SfM) 的出现 [Snavely 等人。 2006]启用了一个全新的领域,可以使用一组照片来合成新颖的视图。 SfM 在相机校准期间估计稀疏点云,最初用于 3D 空间的简单可视化。随后的多视图立体 (MVS) 多年来产生了令人印象深刻的全 3D 重建算法 [Goesele 等人。 2007],使得多种视图合成算法的开发成为可能[Chaurasia 等人。 2013年;艾斯曼等人。 2008年;赫德曼等人。 2018;科帕纳斯等人。 2021]。所有这些方法都将输入图像重新投影并混合到新颖的视图相机中,并使用几何形状来指导这种重新投影。这些方法在许多情况下产生了出色的结果,但当 MVS 生成不存在的几何体时,通常无法从未重建区域或"过度重建"中完全恢复。最近的神经渲染算法 [Tewari 等人。 2022]大大减少了此类伪影,并避免了将所有输入图像存储在 GPU 上的巨大成本,在大多数方面都优于这些方法。

2.2 Neural Rendering and Radiance Fields

深度学习技术早期被用于新视图合成 [Flynn et al. 2016; Zhou et al. 2016];CNNs 用于估计混合权重 [Hedman et al. 2018],或用于纹理空间解决方案 [Riegler and Koltun 2020; Thies et al. 2019]。使用基于 MVS 的几何图形是大多数这些方法的主要缺点;此外,使用 CNNs 进行最终渲染经常会导致时间闪烁。

新颖视图合成的体积表示由 Soft3D 发起[Penner 和Zhang 2017];随后提出了与体积射线行进(volumetric ray-marching)相结合的深度学习技术[Henzler et al.。 2019;西茨曼等人。 2019]建立在连续可微密度场上来表示几何。由于查询体积需要大量样本(samples ),因此使用体积光线行进进行渲染的成本很高 。神经辐射场 (NeRF) [Mildenhall 等人。 2020]引入了重要性采样和位置编码(importance sampling and positional encoding)来提高质量,但使用了大型多层感知器对速度产生了负面影响。 NeRF 的成功导致了解决质量和速度问题的后续方法的激增,通常是通过引入正则化策略;当前用于新颖视图合成的最先进的图像质量是 Mip-NeRF360 [Barron 等人。 2022]。虽然渲染质量非常出色,但训练和渲染时间仍然非常长;我们能够达到或在某些情况下超过这种质量,同时提供快速训练和实时渲染。

最新的方法主要通过利用三种设计选择来专注于更快的训练和/或渲染:使用空间数据结构来存储随后在体积光线行进期间插值的(神经)特征不同的编码和 MLP 容量 。此类方法包括

空间离散化的不同变体、\cite{nglodcvpr2021,plenoxels,yu2021plenoctrees,hedman2021snerg,chen2022mobilenerf,garbin2021fastnerf,Reiser2021ICCV,tensorf-eccv2022,wu2022snisr},密码本\cite{takikawa2022variable},

以及哈希表等编码\cite{mueller2022instant},允许使用更小的 MLP 或完全前述的(foregoing)神经网络\cite{plenoxels,dvgo-cvpr2022}。

这些方法中最值得注意的是 InstantNGP [Müller 等人。 2022]它使用哈希网格和占用网格(a hash grid and an occupancy grid )来加速计算,并使用更小的MLP来表示密度和外观;和 Plenoxels [Fridovich-Keil 和 Yu 等人。 2022]使用稀疏体素网格来插值连续密度场,并且能够完全放弃(forgo)神经网络。两者都依赖于球谐函数(Spherical Harmonics):前者直接表示方向效应,后者将其输入编码到颜色网络。虽然两者都提供了出色的结果,但这些方法仍然难以有效地表示空白空间部分取决于场景/捕获类型 。此外,图像质量在很大程度上受到用于加速的结构化网格的选择的限制,并且渲染速度由于需要查询给定光线行进步骤的许多样本而受到阻碍。我们使用的非结构化、显式 GPU 友好的 3D 高斯函数无需神经组件即可实现更快的渲染速度和更好的质量。

2.3 Point-Based Rendering and Radiance Fields

基于点的方法有效地渲染断开连接和非结构化的几何样本(即点云)[Gross and Pfister 2011]。在最简单的形式中,点样本渲染 [Grossman and Dally 1998] 光栅化(rasterizes)具有固定大小的非结构化点集,为此它可以利用图形 API 的本机支持的点类型 [Sainz and Pajarola 2004] 或 GPU 上的并行软件光栅化(rasterization )[莱恩和卡拉斯 2011;舒茨等人。 2022]。虽然符合底层数据,但点样本渲染存在漏洞,导致锯齿,并且是严格不连续的。高质量基于点渲染的开创性工作通过"喷射"("splatting")大于像素的点基元(point primitives)(例如圆形或椭圆盘、椭球体或面元 circular or ellipticdiscs, ellipsoids, or surfels)来解决这些问题[Botsch 等人,2017]。 2005年;菲斯特等人。 2000;任等人。 2002年;茨威克等人。 2001b]。

最近人们对可微分的基于点的渲染技术产生了兴趣[Wiles 等人。 2020;一帆等人。 2019]。点已通过神经特征进行了增强,并使用 CNN 进行了渲染 [Aliev 等人。 2020;吕克特等人。 2022] 实现快速甚至实时视图合成;然而,它们仍然依赖于 MVS 来获取初始几何形状,因此继承了它的伪影,最明显的是在困难情况下的过度或不足重建,例如无特征/闪亮区域或薄结构。

基于点的 α \alpha α 混合和 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 ) , \begin{equation} C = \sum_{i=1}^N T_i(1-\exp(-\sigma_i\delta_i))\mathbf{c}i \hspace{0.5em} \text{ with } \hspace{0.5em} T_i = \exp\left(-\sum{j=1}^{i-1}\sigma_j\delta_j\right), \end{equation} C=i=1∑NTi(1−exp(−σiδi))ci with Ti=exp(−j=1∑i−1σjδj),其中密度 σ \sigma σ、透射率(transmittance) T T T 和颜色 c \mathbf{c} c 的样本是沿着射线按一定间隔 δ i \delta_i δi采集的.

这可以重写为
C = ∑ i = 1 N T i α i c i , \begin{equation} C = \sum_{i=1}^N T_i\alpha_i\mathbf{c}i, \end{equation} C=i=1∑NTiαici,with
α i = ( 1 − exp ⁡ ( − σ i δ i ) ) and T i = ∏ j = 1 i − 1 ( 1 − α i ) . \begin{equation*} \alpha_i = (1-\exp(-\sigma_i\delta_i)) \hspace{0.5em} \text{and} \hspace{0.5em} T_i = \prod
{j=1}^{i-1}(1-\alpha_i). \end{equation*} αi=(1−exp(−σiδi))andTi=j=1∏i−1(1−αi).典型的基于神经点的方法(例如\cite{kopanas21,kopanas22})通过混合与像素重叠的 N \mathcal{N} N 有序点来计算像素的颜色 C C C:
C = ∑ i ∈ N c i α i ∏ j = 1 i − 1 ( 1 − α j ) , \begin{equation} C = \sum_{i \in \mathcal{N}} c_{i}\alpha_{i} \prod_{j=1}^{i-1}(1-\alpha_{j}), \end{equation} C=i∈N∑ciαij=1∏i−1(1−αj),其中 c i \mathbf{c}_i ci 是每个点的颜色, α i \alpha_i αi 是通过评估协方差 Σ \Sigma Σ \cite{yifan19} 乘以学习的每点不透明度(opacity)来评估二维高斯给出的。

从等式 2 和等式3所示,我们可以清楚地看到成像模型是相同的。然而,渲染算法却非常不同。 NeRF 是隐式表示空/占用空间的连续表示;需要昂贵的随机抽样才能找到方程式2中的样本,随之而来的噪声和计算费用。相比之下,点是一种非结构化、离散的表示形式,它足够灵活,可以像 NeRF 一样创建、破坏和位移几何图形。这是通过优化不透明度和位置来实现的,如之前的工作所示 [Kopanas 等人,2017]。 2021],同时避免了完整体积表示的缺点。

Pulsar [Lassner 和 Zollhofer 2021] 实现了快速球体光栅化,这启发了我们基于图块和排序的渲染器。然而,考虑到上面的分析,我们希望在排序的图上保持(近似)传统的 α − \alpha- α−混合,以具有体积表示的优点:与顺序无关的方法相比,我们的光栅化尊重可见性顺序。此外,我们在像素中的所有片(splats)上反向传播梯度并对各向异性片(anisotropic splats)进行光栅化。这些元素都有助于我们结果的高视觉质量(参见第 7.3 节)。此外,上面提到的先前方法也使用CNNs进行渲染,这导致时间不稳定。尽管如此,Pulsar [Lassner 和 Zollhofer 2021] 和 ADOP [Rückert 等人] 的渲染速度。 2022] 成为开发我们的快速渲染解决方案的动力。

在关注镜面反射效果(specular effects,)的同时,Neural Point Catacaustics(神经点灾难) 的基于漫反射点的渲染轨迹 [Kopanas 等人。 2022]通过使用 MLP 克服了这种时间不稳定性,但仍然需要 MVS 几何形状作为输入。最新的方法[Zhang et al. 2022]此类别不需要MVS,也使用SH作为方向;然而,它只能处理一个对象的场景,并且需要掩码进行初始化。虽然对于小分辨率和低点数来说速度很快,但尚不清楚它如何扩展到典型数据集的场景 [Barron 等人。 2022 年;赫德曼等人。 2018;纳皮奇等人。 2017]。我们使用 3D 高斯函数来实现更灵活的场景表示,避免了对 MVS 几何体的需求,并通过我们用于投影高斯函数的基于图块的渲染算法实现了实时渲染。

最近的一种方法[Xu 等人。 2022]使用点通过径向基函数(radial basis function)方法来表示辐射场。他们在优化过程中采用点修剪和致密化(point pruning and densification)技术,但使用体积光线行进并且无法实现实时显示速率。

在人体表演捕捉领域,3D 高斯已被用来表示捕捉到的人体 [Rhodin et al. 2017]。 2015年;斯托尔等人。 2011];最近,它们已与体积光线行进一起用于视觉任务 [Wang 等人。 2023]。神经体积基元已在类似的背景下被提出[Lombardi 等人。 2021]。虽然这些方法启发了我们选择 3D 高斯作为我们的场景表示,但它们专注于重建和渲染单个孤立对象(人体或面部)的特定情况,从而导致场景的深度复杂度较小。相比之下,我们对各向异性协方差的优化、交错优化/密度控制以及用于渲染的高效深度排序使我们能够处理完整、复杂的场景,包括室内和室外的背景,并且具有较大的深度复杂性。

3 OVERVIEW

我们方法的输入是一组静态场景的图像,以及由 SfM [Schönberger 和 Frahm 2016] 校准的相应相机,这会产生稀疏点云作为副作用。从这些点出发,我们创建了一组 3D 高斯(第 4 节) ,由位置(均值)、协方差矩阵和不透明度 α \alpha α定义,这允许非常灵活的优化机制。这导致了 3D 场景的相当紧凑的表示,部分原因是高度各向异性的体积图(anisotropic volumetric splats)可以用来紧凑地表示精细结构。辐射场的方向外观分量(颜色)通过球谐函数 (SH) 表示,遵循标准实践 [Fridovich-Keil 和 Yu 等人。 2022 年;穆勒等人。 2022]。我们的算法继续通过 3D 高斯参数的一系列优化步骤(即位置、协方差和 SH 系数)与高斯密度自适应控制的操作交织来创建辐射场表示**(第 5 节)**。我们方法效率的关键是基于图块的光栅化器(第 6 节 ),它允许 α − \alpha - α−混合各向异性图块,通过快速排序尊重可见性顺序。快速光栅化器还包括通过跟踪累积 α \alpha α值的快速向后传递,而对可以接收梯度的高斯数量没有限制。我们的方法的 概述如图2所示

4 DIFFERENTIABLE 3D GAUSSIAN SPLATTING

我们的目标是优化场景表示,从一组没有法线(normals)的稀疏 (SfM) 点开始,实现高质量的新颖视图合成。为此,我们需要一个基元(primitive),它继承可微分体积表示的属性,同时是非结构化和显式的,以允许非常快速的渲染。我们选择 3D 高斯,它是可微分的,可以轻松投影到 2D splats,从而实现快速 α − \alpha - α−混合渲染。

我们的表示与以前使用 2D 点的方法有相似之处 [Kopanas 等人。 2021 年;一帆等人。 2019]并假设每个点都是一个具有法线的小平面圆。鉴于 SfM 点极其稀疏,很难估计法线。同样,从这样的估计中优化非常嘈杂的法线将非常具有挑战性。

相反,我们将几何体建模为一组不需要法线的 3D 高斯函数。我们的高斯由在世界空间中定义的完整 3D 协方差矩阵 Σ \Sigma Σ 定义\cite{zwicker2001ewa} 以点(平均值) μ \mu μ 为中心:
G ( x ) = e − 1 2 ( x ) T Σ − 1 ( x ) \begin{equation} G(x)~= e^{-\frac{1}{2}(x)^{T}\Sigma^{-1}(x)} \end{equation} G(x) =e−21(x)TΣ−1(x)

\CORRECTION{并且 ∣ Σ ∣ |\Sigma| ∣Σ∣ 是 Σ \Sigma Σ 的行列式, Σ \Sigma Σ 是对称 3 × \times × 3 矩阵}{}。在我们的混合过程中,该高斯乘以 α \alpha α。

然而,我们需要将 3D 高斯投影到 2D 进行渲染。

茨威克等人。 \shortcite{zwicker2001ewa} 演示如何对图像空间进行投影。给定一个视图变换 W W W

相机坐标中的协方差矩阵 Σ ′ \Sigma' Σ′ 给出如下:
Σ ′ = J W Σ W T J T \begin{equation} \Sigma' = J W ~\Sigma ~W ^{T}J^{T} \end{equation} Σ′=JW Σ WTJT其中 J J J 是射影变换(projective transformation)的仿射近似( affine approximation)的雅可比行列式。 {Zwicker 等人。 \shortcite{zwicker2001ewa}} 还表明,如果我们跳过 Σ ′ \Sigma' Σ′ 的第三行和第三列,

我们获得了一个 2 × \times × 2 方差矩阵,其结构和属性与我们从法线的平面点(planar points)开始一样,如之前的工作\cite{kopanas21}。

一个明显的方法是直接优化协方差矩阵 Σ \Sigma Σ 以获得表示辐射场的 3D 高斯分布。然而,协方差矩阵仅在半正定时(positive semi-definite)才具有物理意义。

为了优化所有参数,我们使用梯度下降,它不能轻易地被约束来产生这样的有效矩阵,并且更新步骤和梯度可以很容易地创建无效的协方差矩阵。

因此,我们选择了一种更直观、但同样具有表达能力的表示方式来进行优化。

3D 高斯的协方差矩阵 Σ \Sigma Σ 类似于描述椭球体(ellipsoid)的配置。

给定一个缩放矩阵 S S S和旋转矩阵 R R R,我们可以找到对应的 Σ \Sigma Σ:
Σ = R S S T R T \begin{equation} \Sigma = RSS^TR^T \end{equation} Σ=RSSTRT

为了允许对这两个因素进行独立优化,我们将它们分开存储:用于缩放的 3D 向量 s s s 和表示旋转的四元数 q q q。这些可以简单地转换为各自的矩阵并组合,确保标准化 q q q 以获得有效的单位四元数(unit quaternion)。

为了避免训练过程中自动微分带来的巨大开销,我们显式地导出所有参数的梯度。精确导数计算的详细信息在附录A中。

\CORRECTION{接下来我们讨论 3D 高斯的缩放和旋转(即形状)的具体情况。}{}

\CORRECTION{可微分渲染器输出
2 × 2 2\times2 2×2 屏幕空间协方差矩阵 Σ ′ \Sigma' Σ′。

给定损失的梯度 d L d Σ ′ \frac{dL}{d\Sigma'} dΣ′dL

我们假设它是可微渲染器的输出,

我们可以应用链式法则来计算梯度并传播损失。}{}

这种各向异性协方差的表示(适合优化)允许我们优化 3D 高斯以适应捕获场景中不同形状的几何形状,从而产生相当紧凑的表示。
图3说明了这种情况。

我们通过将优化后的 3D 高斯缩小 60%(最右侧)来可视化。这清楚地显示了优化后紧凑地表示复杂几何形状的 3D 高斯的各向异性形状。留下了实际渲染的图像。

5 OPTIMIZATION WITH ADAPTIVE DENSITY CONTROL OF 3D GAUSSIANS

我们方法的核心是优化步骤,它创建一组密集的 3D 高斯函数,准确地表示自由视图合成的场景。

除了位置 p p p、 α \alpha α 和协方差 Σ \Sigma Σ 之外,我们还优化表示每个高斯颜色 c c c 的 SH 系数,以正确捕获场景的视图相关外观。

这些参数的优化与控制高斯密度的步骤交织在一起,以更好地表示场景。

5.1 Optimization

优化基于渲染的连续迭代并将生成的图像与捕获的数据集中的训练视图进行比较。由于 3D 到 2D 投影的模糊性,几何图形不可避免地可能会被错误放置。因此,我们的优化需要能够 create 几何体,并且还能够 destroymove 几何体(如果其位置不正确)。 3D 高斯协方差参数的质量对于表示的紧凑性至关重要,因为可以用少量大的各向异性高斯函数捕获大的均匀区域。

我们使用随机梯度下降技术进行优化,充分利用标准 GPU 加速框架,以及为某些操作添加自定义 CUDA 内核的能力,遵循最近的最佳实践\cite{plenoxels,dvgo- CVPR2022}。特别是,我们的快速光栅化(参见 Sec.6)对于优化的效率至关重要,因为它是优化的主要计算瓶颈。

我们对 α \alpha α 使用 sigmoid 激活函数将其限制在 [ 0 − 1 ) [0-1) [0−1) 范围内并获得平滑梯度,出于类似的原因,我们对协方差尺度使用指数激活函数。

我们将初始协方差矩阵估计为具有轴的各向同性高斯矩阵等于到最近的三个点的距离的平均值。

我们使用类似于 Plenoxels \cite{plenoxels} 的标准指数衰减调度技术,但仅适用于位置。损失函数是 L 1 \mathcal{L}_1 L1 与 D-SSIM 项的结合:
L = ( 1 − λ ) L 1 + λ L D-SSIM \begin{equation} \mathcal{L} = (1 - \lambda) \mathcal{L}1 + \lambda \mathcal{L{\textrm{D-SSIM}}} \end{equation} L=(1−λ)L1+λLD-SSIM我们在所有测试中都使用 λ = 0.2 \lambda~=~0.2 λ = 0.2。

我们在 Sec.7.1 中提供了learning schedule和其他元素的详细信息。

5.2 Adaptive Control of Gaussians

我们从 SfM 的初始稀疏点集开始,然后应用我们的方法自适应控制高斯的数量及其在单位体积上的密度,允许我们从最初的稀疏高斯集变为更密集的集,以更好地表示场景并具有正确的参数。优化预热后(参见第 7.1 节),我们每 100 次迭代进行一次致密化,并删除任何本质上透明的(transparent)高斯分布,即 α \alpha α 小于阈值 ϵ α \epsilon_{\alpha } ϵα 的高斯分布。

\footnote{当然,高斯密度不应与 NeRF 文献中的密度 σ \sigma σ混淆。}

我们对高斯的自适应控制需要填充(populate)空白区域。它重点关注缺少几何特征的区域("重建不足"),但也关注高斯覆盖场景中大面积的区域(通常对应于"过度重建")。

我们观察到两者都有 large 视图空间位置梯度。

直观上,这可能是因为它们对应于尚未很好重建的区域,并且优化尝试移动高斯来纠正这一点。

由于这两种情况都是致密化(densification)的良好候选者,所以我们使用高于阈值~ τ pos \tau_{\textrm{pos}} τpos 的视空间位置梯度的平均幅度来致密高斯,我们在测试中将其设置为 0.0002 0.0002 0.0002。

接下来我们介绍这个过程的细节,如图4所示。

我们的自适应高斯致密化方案。顶行(重建不足):当小规模几何体(黑色轮廓)未被充分覆盖时,我们克隆相应的高斯。底行(过度重建):如果小规模几何体由一个大的板表示,我们将其分成两部分。

对于重建不足区域中的小高斯,我们需要覆盖必须创建的新几何形状。

为此,最好通过简单地创建相同大小的副本并将其沿位置梯度的方向移动来克隆高斯。

另一方面,具有高方差的区域中的大高斯需要被分割成更小的高斯。我们用两个新的来替换这些高斯,并将它们的尺度除以我们通过实验确定的系数 ϕ = 1.6 \phi~=~1.6 ϕ = 1.6 。我们还通过使用原始 3D 高斯作为 PDF 进行采样来初始化它们的位置。

在第一种情况下,我们检测并处理增加系统总体积和高斯数量的需要,而在第二种情况下,我们保留总体积但增加高斯数量。

与其他体积表示类似,我们的优化可能会因靠近输入摄像机的浮动体而陷入困境;在我们的例子中,这可能会导致高斯密度的不合理增加。

缓和高斯数量的增加的有效方法是每 N = 3000 N=3000 N=3000 迭代将 α \alpha α 值设置为接近于零。然后,优化会在需要时增加高斯函数的 α \alpha α,同时允许我们的剔除(culling )方法删除 α \alpha α 小于 ϵ α \epsilon_{\alpha} ϵα 的高斯函数,如上所述。 高斯可能会缩小或增长,并且与其他高斯有相当大的重叠,但我们会定期(periodically)删除在世界空间中非常大的高斯以及在视空间中具有较大足迹的高斯。该策略可以总体上很好地控制高斯总数。

我们模型中的高斯始终在欧几里得空间中保持原语;与其他方法不同[Barron 等人。 2022 年;弗里多维奇-凯尔和于等人。 2022],我们不需要针对远距离或大高斯的空间压缩、扭曲或投影策略。

6 FAST DIFFERENTIABLE RASTERIZER FOR GAUSSIANS

我们的目标是实现快速的整体渲染和快速排序,以允许近似的 α \alpha α 混合------包括各向异性的 splats------并避免对可以接收先前工作中存在的梯度的 splats 数量的硬性限制 \cite {拉斯纳_2021_CVPR}。

为了实现这些目标,我们受最新软件光栅化方法的启发,为高斯图设计了一个基于图块的光栅化器 \cite{Lassner_2021_CVPR},一次对整个图像的基元进行预排序,避免了对每个像素进行排序的费用,这会阻碍之前的排序 α \alpha α-混合解决方案 \cite{kopanas21,kopanas22}。我们的快速光栅化器允许在任意数量的混合高斯上进行有效的反向传播,并且附加内存消耗低,每个像素只需要恒定的开销。

我们的光栅化管道是完全可微分的,并且给定到 2D 的投影(Sec.4)可以对各向异性 splats 进行光栅化,类似于之前的 2D splatting 方法 \cite{kopanas21}。

我们的方法首先将屏幕分割成 16 × \times × 16 个图块,然后根据视锥体(view frustum)和每个图块( tile)剔除 3D 高斯。

具体来说,我们只保留与视锥体相交的置信区间为 99 % 的高斯分布。

此外,我们使用保护带来简单地拒绝极端位置(即那些均值接近近平面且远离视锥体的位置)的高斯分布,因为计算它们的投影 2D 协方差将不稳定。

然后,我们根据每个高斯重叠的图块数量来实例化它们,并为每个实例分配一个结合了视图空间深度和图块 ID 的键。然后,我们使用单个快速 GPU 基数排序(Radix sor)基于这些键对高斯进行排序 \cite{merrill2010revisiting}。

请注意,没有额外的每像素点排序,并且混合是基于此初始排序执行的。 因此,我们的 α \alpha α 混合在某些配置中可以是近似的。

然而,当图块接近单个像素的大小时,这些近似值变得可以忽略不计。我们发现这种选择极大地增强了训练和渲染性能,而不会在融合场景中产生可见的伪影。

对高斯进行排序后,我们通过识别第一个和最后一个映射到给定图块的深度排序条目来为每个图块生成一个列表。对于光栅化,我们为每个图块启动一个线程块。每个块首先协作地将 Gaussians 数据包加载到共享内存中,然后对于给定像素,通过从前到后遍历列表来累积颜色和 α \alpha α 值,从而最大化并行性增益两者都用于数据加载/共享和处理。

当我们达到像素中 α \alpha α 的目标饱和度时,相应的线程就会停止。每隔一段时间,就会查询图块中的线程,并且当所有像素都饱和时(即 α \alpha α 变为 1),整个图块的处理就会终止。 %

附录C中给出了排序的详细信息和总体光栅化方法的高级概述。

在光栅化过程中, α \alpha α 的饱和度是唯一的停止标准。与之前的工作相比,我们不限制接收梯度更新的混合基元的数量。我们强制执行此属性,以允许我们的方法处理具有任意、不同深度复杂性的场景并准确地学习它们,而不必求助于特定于场景的超参数调整。

因此,在后向传递过程中,我们必须恢复前向传递中每个像素的混合点的完整序列。一种解决方案是在全局内存中存储任意长的每个像素的混合点列表 \cite{kopanas21}。为了避免隐含的动态内存管理开销,我们选择再次遍历每个图块列表;我们可以重用前向传递中的高斯排序数组和平铺范围。为了便于梯度计算,我们现在从后到前遍历它们。

遍历从影响图块中任何像素的最后一个点开始,并且再次将点加载到共享内存中协同发生。此外,如果每个像素的深度低于或等于前向传递过程中对其颜色有贡献的最后一个点的深度,则每个像素只会开始(昂贵的)点重叠测试和处理。

Sec.4 中描述的梯度计算需要原始混合过程中每个步骤的累积不透明度值。

我们可以通过在前向传递结束时仅存储累积的总不透明度来恢复这些中间不透明度,而不是在后向传递中遍历逐渐缩小的不透明度的显式列表

具体来说,每个点存储的是前向过程中最终累积的不透明度 α \alpha α;我们在从后到前的遍历中将其除以每个点的 α \alpha α 以获得梯度计算所需的系数。

7 IMPLEMENTATION, RESULTS AND EVALUATION

接下来我们讨论一些实现细节、当前结果以及与之前的工作和消融研究相比对我们算法的评估。

7.1 Implementation

我们使用 PyTorch 框架在 Python 中实现了我们的方法,并编写了用于光栅化的自定义 CUDA 内核,它们是以前方法的扩展版本 \cite{kopanas21},并使用 NVIDIA CUB 排序例程进行快速基数排序 \cite{merrill2010revisiting}。

我们还使用开源 SIBR \cite{sibr2020} 构建了一个交互式查看器,用于交互式查看。 {我们使用此实现来测量我们实现的帧速率}。

源代码和我们的所有数据均可在以下位置获取:https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting

Optimization Details. 为了稳定性,我们以较低的分辨率"预热"计算。具体来说,我们使用 4 倍小的图像分辨率开始优化,并在 250 次和 500 次迭代后上采样两次。

SH 系数优化对角度信息的缺乏很敏感。对于典型的"类似 NeRF"通过在其周围的整个半球拍摄的照片来捕捉中心物体的观察位置,优化效果很好。

但是,如果捕获丢失了角度区域(例如,当捕获场景的角落或执行"由内而外" \cite{HRDB16} 捕获时)SH 的零阶分量的值完全不正确(即,基础颜色或漫反射颜色)可以通过优化产生。

为了克服这个问题,我们首先仅优化零阶分量,然后每 1000 次迭代后引入一个 SH 频带,直到表示所有 4 个 SH 频带。

7.2 Results and Evaluation

Results. 我们在总共 13 个真实场景上测试了我们的算法,这些场景取自之前发布的数据集和合成 Blender 数据集 [Mildenhall 等人。 2020]。特别是,我们在 Mip-Nerf360 中呈现的全套场景上测试了我们的方法 [Barron 等人。 2022],这是 NeRF 渲染质量的当前SOTA技术水平,来自 Tanks&Temples 数据集 [2017] 的两个场景和 Hedman 等人提供的两个场景。 [赫德曼等人。 2018]。我们选择的场景具有非常不同的捕捉风格,并且涵盖有界的室内场景和大型无界的室外环境。我们在评估中对所有实验使用相同的超参数配置。所有结果均报告在 A6000 GPU 上运行,Mip-NeRF360 方法除外(见下文)。

在补充中,我们显示了包含远离输入照片的视图的精选场景的渲染视频路径。

Real-World Scenes. 就质量而言,当前最先进的是 Mip-Nerf360 [Barron 等人。 2021]。我们将此方法作为质量基准进行比较。我们还与两种最新的快速 NeRF 方法进行比较:InstantNGP [Müller 等人。 2022] 和 Plenoxels [Fridovich-Keil 和 Yu 等人。 2022]。

我们对数据集使用训练/测试分割,使用 Mip-NeRF360 建议的方法,每 8 张照片进行测试,以进行一致且有意义的比较,以生成误差指标,并使用所使用的标准 PSNR、L-PIPS 和 SSIM 指标最常见于文献中;请参阅Tab.1 。表中的所有数字均来自我们自己运行的作者之前所有方法的代码,除了 Mip-NeRF360 在其数据集上的数字,我们从原始出版物中复制了数字,以避免对当前的 SOTA 产生混淆。

对于图中的图像,我们使用了我们自己的 Mip-NeRF360 运行:这些运行的数字在附录 D 中。

我们还显示了平均训练时间、渲染速度以及用于存储优化参数的内存。我们报告了运行 35K 次迭代的 InstantNGP (Base) 基本配置以及作者建议的稍大的网络 (Big) 的结果,以及我们的两种配置(7K 和 30K 迭代)的结果。

我们在图6中展示了两种配置的视觉质量差异。在许多情况下,7K 迭代的质量已经相当不错了。

对于某些场景(上图),我们可以看到,即使在 7K 次迭代(该场景约 5 分钟)下,我们的方法也能很好地捕获列车。在 30K 次迭代(~35 分钟)时,背景伪影已显着减少。对于其他场景(如下),差异几乎不可见; 7K 迭代(∼8 分钟)已经是非常高质量的了。

训练时间因数据集而异,我们单独报告。请注意,图像分辨率也因数据集而异。在项目网站中,我们提供了用于计算所有场景上所有方法(我们的和以前的工作)的统计数据的测试视图的所有渲染。请注意,我们保留了所有渲染的本机输入分辨率。

该表显示,我们的完全融合模型的质量与 SOTA Mip-NeRF360 方法相当,有时甚至略好;请注意,在相同的硬件上,他们的平均训练时间为 48 小时(),而我们的训练时间为 35-45 分钟,并且他们的渲染时间为 10 秒/帧。经过 5-10m 的训练后,我们达到了与 InstantNGP 和 Plenoxels 相当的质量,但额外的训练时间使我们能够达到 SOTA 质量,而其他快速方法则不然。对于 Tanks & Temples,我们在相似的训练时间(在我们的案例中约为 7 分钟)内实现了与基本 InstantNGP 相似的质量。

我们在 4-GPU A100 节点上训练 Mip-NeRF360 12 小时,相当于在单个 GPU 上训练 48 小时。请注意,A100 GPU 比 A6000 GPU 更快。

我们还在图 5 中展示了我们的留出测试视图和之前选择用于比较的渲染方法的视觉结果;我们的方法的结果是 30K 次训练迭代的结果。我们发现,在某些情况下,甚至 Mip-NeRF360 也存在我们的方法避免的残留伪影(例如,自行车、树桩中或房间墙壁上的植被模糊)。在补充视频和网页中,我们提供了远距离路径的比较。我们的方法倾向于保留覆盖良好的区域的视觉细节,即使是从远处看,这对于以前的方法来说并不总是如此。

我们展示了我们的方法与之前的方法以及来自测试视图的相应地面实况图像的比较。这些场景从上到下分别是:来自 Mip-NeRF360 数据集的自行车、花园、树桩、柜台和房间; Playroom,来自深度混合数据集的 DrJohnson [Hedman 等人。 2018] 以及 Tanks&Temples 的卡车和火车。箭头/插图突出显示质量上不明显的差异。

Synthetic Bounded Scenes. 除了现实场景之外,我们还在合成 Blender 数据集 \cite{mildenhall2020nerf} 上评估我们的方法。所讨论的场景提供了一组详尽的视图,尺寸有限,并提供了精确的相机参数。在这种情况下,即使使用随机初始化,我们也可以实现最先进的结果:我们从包围场景边界的体积内的 100K 均匀随机高斯函数开始训练。我们的方法可以快速、自动地将它们修剪为大约 6--10K 有意义的高斯。经过 30K 次迭代后,训练模型的最终大小达到每个场景约 200--500K 高斯。我们在 Tab.2中报告并比较我们获得的 PSNR 分数与以前的方法,使用白色背景以实现兼容性。示例可以在Fig.10(左起第二张图片)和补充材料中看到。 经过训练的合成场景以 180--300 FPS 渲染。

Compactness. 与之前的显式场景表示相比,我们优化中使用的各向异性高斯能够使用较少数量的参数来建模复杂的形状。我们通过根据 [Zhang 等人获得的高度紧凑的、基于点的模型] 评估我们的方法来展示这一点。 2022]。我们从他们的初始点云开始,该点云是通过使用前景掩模进行空间雕刻获得的,并进行优化,直到我们与他们报告的 PSNR 分数持平。这通常会在 2-4 分钟内发生。我们使用大约四分之一的点数来超越他们报告的指标,导致平均模型大小为 3.8 MB,而不是他们的 9 MB。我们注意到,在这个实验中,我们只使用了两度的球谐函数,与他们的相似。

7.3 Ablations

我们隔离了我们做出的不同贡献和算法选择,并构建了一组实验来衡量它们的效果。具体来说,我们测试了算法的以下方面:SfM 的初始化、我们的致密化策略、各向异性协方差、我们允许无限数量的图块具有梯度的事实以及球谐函数的使用。表 3 总结 了每种选择的定量影响。
Initialization from SfM. 我们还评估了从 SfM 点云初始化 3D 高斯的重要性。对于这种消融,我们对一个大小等于输入相机边界框范围三倍的立方体进行均匀采样。我们观察到我们的方法表现相对较好,即使没有 SfM 点也避免了完全失败。相反,它主要在背景中退化,见图 7 。此外,在训练视图没有很好覆盖的区域中,随机初始化方法似乎有更多无法通过优化去除的漂浮物。另一方面,合成 NeRF 数据集没有这种行为,因为它没有背景并且受到输入摄像机的良好约束(请参见上面的讨论)。

Densification. 接下来我们评估我们的两种致密化方法,更具体地说是第 5 节中描述的克隆和分割(clone and split)策略。 我们分别禁用每个方法,并使用该方法的其余部分不变进行优化。结果表明,分割大高斯对于实​​现背景的良好重建非常重要,如图 8 所示,而克隆小高斯而不是分割它们可以实现更好更快的收敛,尤其是当场景中出现薄结构时。

Unlimited depth complexity of splats with gradients. 我们评估在 N N N 最前面的点之后跳过梯度计算是否会在不牺牲质量的情况下提高速度,如 Pulsar \cite{Lassner_2021_CVPR} 中所建议的。在本次测试中,我们选择N=10,比~Pulsar中的默认值高两倍,但由于梯度计算中的严重近似,导致优化不稳定。对于 Truck 场景,PSNR 质量下降了 11dB(参见表 3,Limited-BW),而 Garden 的视觉结果如图 9 所示。

Anisotropic Covariance. 我们的方法中一个重要的算法选择是 3D 高斯的完整协方差矩阵的优化。为了演示此选择的效果,我们执行消融,通过优化控制所有三个轴上 3D 高斯半径的单个标量值来消除各向异性。这种优化的结果如图 10 所示。我们观察到,各向异性显着提高了 3D 高斯与表面对齐的能力的质量,这反过来又允许在保持相同数量的点的同时实现更高的渲染质量。

Spherical Harmonics. 最后,球谐函数的使用提高了我们的整体 PSNR 分数,因为它们补偿了视图相关的影响(表 3)。

7.4 Limitations

我们的方法并非没有局限性。在场景观察不佳的区域,我们会出现伪影;在这些区域,其他方法也很困难(例如图 11 中的 Mip-NeRF360)。尽管各向异性高斯函数具有如上所述的许多优点,但我们的方法可以创建拉长的伪影或"斑点"高斯函数(见图 12);同样,以前的方法在这些情况下也很困难。

当我们的优化产生较大的高斯分布时,我们偶尔也会出现突出的伪影;这往往发生在外观依赖于视图的区域。这些弹出伪影的原因之一是通过光栅化器中的保护带对高斯函数进行了微不足道的拒绝。更有原则的剔除方法将减轻这些伪影。另一个因素是我们简单的可见性算法,这可能导致高斯突然切换深度/混合顺序。这个问题可以通过抗锯齿来解决,我们将其留作未来的工作。此外,我们目前没有对我们的优化应用任何正则化;这样做将有助于处理看不见的区域和弹出的伪影。

虽然我们使用相同的超参数进行全面评估,但早期实验表明,为了在非常大的场景(例如城市数据集)中收敛,降低位置学习率可能是必要的。

尽管与以前的基于点的方法相比,我们非常紧凑,但我们的内存消耗明显高于基于 NeRF 的解决方案。在大型场景的训练过程中,在我们未经优化的原型中,峰值 GPU 内存消耗可能超过 20 GB。然而,通过仔细的低级优化逻辑实现(类似于 InstantNGP),这个数字可以显着减少。渲染经过训练的场景需要足够的 GPU 内存来存储完整模型(大型场景需要数百兆字节),并需要额外的 30-500 MB 内存用于光栅化器,具体取决于场景大小和图像分辨率。我们注意到,有很多机会可以进一步减少我们方法的内存消耗。点云压缩技术是一个经过充分研究的领域 [De Queiroz and Chou 2016];看看这些方法如何适应我们的代表将会很有趣。

8 DISCUSSION AND CONCLUSIONS

我们提出了第一种真正允许在各种场景和捕捉风格中进行实时、高质量辐射场渲染的方法,同时需要与之前最快的方法相媲美的训练时间。

我们选择的 3D 高斯基元保留了体积渲染的属性以进行优化,同时直接允许快速基于 splat 的光栅化。我们的工作表明,与广泛接受的观点相反,连续表示对于快速、高质量的辐射场训练来说并不是严格必要的。

我们的大部分(∼80%)训练时间都花在 Python 代码上,因为我们在 PyTorch 中构建了我们的解决方案,以便其他人可以轻松使用我们的方法。仅光栅化例程被实现为优化的 CUDA 内核。我们期望将剩余的优化完全移植到 CUDA,例如在 InstantNGP 中完成的[Müller 等人。 2022],可以使性能至关重要的应用程序进一步显着加速。

我们还展示了基于实时渲染原理、利用 GPU 的强大功能和软件光栅化管道架构的速度的重要性。这些设计选择是训练和实时渲染性能的关键,与以前的体积光线行进相比,在性能上具有竞争优势。

看看我们的高斯是否可以用于对捕获的场景进行网格重建,这将是很有趣的。除了考虑到网格的广泛使用的实际意义之外,这将使我们能够更好地理解我们的方法在体积表示和表面表示之间的连续体中到底处于什么位置。

总之,我们提出了第一个针对辐射场的实时渲染解决方案,其渲染质量可与之前最昂贵的方法相匹配,并且训练时间可与最快的现有解决方案相媲美。

A DETAILS OF GRADIENT COMPUTATION

回想一下, Σ \Sigma Σ/ Σ ′ \Sigma' Σ′ 是高斯的世界/视图空间协方差矩阵, q q q 是旋转, s s s 是缩放, W W W 是视图变换, J J J 是射影变换的仿射近似的雅可比行列式。

我们可以应用链式法则来求缩放和旋转的导数:
d Σ ′ d s = d Σ ′ d Σ d Σ d s \begin{equation} \frac{d\Sigma'}{ds} = \frac{d\Sigma'}{d\Sigma}\frac{d\Sigma}{ds} \end{equation} dsdΣ′=dΣdΣ′dsdΣ

and
d Σ ′ d q = d Σ ′ d Σ d Σ d q \begin{equation} \frac{d\Sigma'}{dq} = \frac{d\Sigma'}{d\Sigma}\frac{d\Sigma}{dq} \end{equation} dqdΣ′=dΣdΣ′dqdΣ

使用 U = J W U = JW U=JW 和 Σ ′ \Sigma' Σ′ 简化方程 5 , Σ ′ \Sigma' Σ′ 是 U Σ U T U \Sigma U^T UΣUT 的(对称)左上角 2 × 2 2\times2 2×2 矩阵,表示矩阵元素通过下标,我们可以求出偏导数
∂ Σ ′ ∂ Σ i j = ( U 1 , i U 1 , j U 1 , i U 2 , j U 1 , j U 2 , i U 2 , i U 2 , j ) \frac{\partial \Sigma'}{\partial \Sigma_{ij}} = \left(\begin{smallmatrix} U_{1,i}U_{1,j} & U_{1,i} U_{2,j}\\ U_{1,j} U_{2,i} & U_{2,i}U_{2,j} \end{smallmatrix}\right) ∂Σij∂Σ′=(U1,iU1,jU1,jU2,iU1,iU2,jU2,iU2,j)

接下来,我们求导数 d Σ d s \frac{d\Sigma}{ds} dsdΣ 和 d Σ d q \frac{d\Sigma}{dq} dqdΣ。由于 Σ = R S S T R T \Sigma = RSS^TR^T Σ=RSSTRT,我们可以计算 M = R S M = RS M=RS并重写 Σ = M M T \Sigma = MM^T Σ=MMT。因此,我们可以写成 d Σ d s = d Σ d M d M d s \frac{d\Sigma}{ds} = \frac{d\Sigma}{dM} \frac{dM}{ds} dsdΣ=dMdΣdsdM 和 d Σ d q = d Σ d M d M d q \frac{d\Sigma}{dq} = \frac{d\Sigma}{dM} \frac{dM}{dq} dqdΣ=dMdΣdqdM。由于协方差矩阵 Σ \Sigma Σ (及其梯度)是对称的,因此共享的第一部分可以通过 d Σ d M = 2 M T \frac{d\Sigma}{dM} = 2M^T dMdΣ=2MT 紧凑地找到。为了缩放,我们进一步有
∂ M i , j ∂ s k = { R i , k if j = k 0 otherwise } \frac{\partial M_{i,j}}{\partial s_k} = \left\{\begin{array}{lr} R_{i,k} & \text{if j = k}\\ 0 & \text{otherwise} \end{array}\right\} ∂sk∂Mi,j={Ri,k0if j = kotherwise}

为了导出旋转梯度,我们回顾从实部 q r q_r qr 和虚部 q i 、 q j 、 q k q_i、q_j、q_k qi、qj、qk 到旋转矩阵 R R R 的单位四元数 q q q 的转换:
R ( q ) = 2 ( 1 2 − ( q j 2 + q k 2 ) ( q i q j − q r q k ) ( q i q k + q r q j ) ( q i q j + q r q k ) 1 2 − ( q i 2 + q k 2 ) ( q j q k − q r q i ) ( q i q k − q r q j ) ( q j q k + q r q i ) 1 2 − ( q i 2 + q j 2 ) ) \begin{equation} R(q) = 2\begin{pmatrix} \frac{1}{2} - (q_j^2 + q_k^2) & (q_i q_j - q_r q_k) & (q_i q_k + q_r q_j)\\ (q_i q_j + q_r q_k) & \frac{1}{2} - (q_i^2 + q_k^2) & (q_j q_k - q_r q_i)\\ (q_i q_k - q_r q_j) & (q_j q_k + q_r q_i) & \frac{1}{2} - (q_i^2 + q_j^2) \end{pmatrix} \end{equation} R(q)=2 21−(qj2+qk2)(qiqj+qrqk)(qiqk−qrqj)(qiqj−qrqk)21−(qi2+qk2)(qjqk+qrqi)(qiqk+qrqj)(qjqk−qrqi)21−(qi2+qj2)

结果,我们发现 q q q 的分量具有以下梯度:
∂ M ∂ q r = 2 ( 0 − s y q k s z q j s x q k 0 − s z q i − s x q j s y q i 0 ) , ∂ M ∂ q i = 2 ( 0 s y q j s z q k s x q j − 2 s y q i − s z q r s x q k s y q r − 2 s z q i ) ∂ M ∂ q j = 2 ( − 2 s x q j s y q i s z q r s x q i 0 s z q k − s x q r s y q k − 2 s z q j ) , ∂ M ∂ q k = 2 ( − 2 s x q k − s y q r s z q i s x q r − 2 s y q k s z q j s x q i s y q j 0 ) \begin{equation} \begin{aligned} &\frac{\partial M}{\partial q_r} = 2 \left(\begin{smallmatrix} 0 & -s_y q_k & s_z q_j\\ s_x q_k & 0 & -s_z q_i\\ -s_x q_j & s_y q_i & 0 \end{smallmatrix}\right), &\frac{\partial M}{\partial q_i} = 2\left(\begin{smallmatrix} 0 & s_y q_j & s_z q_k\\ s_x q_j & -2 s_y q_i & -s_z q_r\\ s_x q_k & s_y q_r & -2 s_z q_i \end{smallmatrix}\right) \\ &\frac{\partial M}{\partial q_j} = 2\left(\begin{smallmatrix} -2 s_x q_j & s_y q_i & s_z q_r\\ s_x q_i & 0 & s_z q_k\\ -s_x q_r & s_y q_k & -2s_z q_j \end{smallmatrix}\right), &\frac{\partial M}{\partial q_k} = 2\left(\begin{smallmatrix} -2 s_x q_k & -s_y q_r & s_z q_i\\ s_x q_r & -2s_y q_k & s_z q_j\\ s_x q_i & s_y q_j & 0 \end{smallmatrix}\right) \end{aligned} \end{equation} ∂qr∂M=2(0sxqk−sxqj−syqk0syqiszqj−szqi0),∂qj∂M=2(−2sxqjsxqi−sxqrsyqi0syqkszqrszqk−2szqj),∂qi∂M=2(0sxqjsxqksyqj−2syqisyqrszqk−szqr−2szqi)∂qk∂M=2(−2sxqksxqrsxqi−syqr−2syqksyqjszqiszqj0)

导出四元数归一化的梯度很简单。

B OPTIMIZATION AND DENSIFICATION ALGORITHM

算法 1 总结了我们的优化和致密化算法。

C DETAILS OF THE RASTERIZER

Sorting. 我们的设计基于小 splats 高负载的假设,并且我们通过在开始时使用基数排序对每个帧对 splats 进行一次排序来对此进行优化。我们将屏幕分成 16x16 像素图块(或箱)。我们通过实例化每个重叠的 16×16 图块中的每个 splat 来创建每个图块的 splat 列表。这导致处理的高斯数适度增加,但通过更简单的控制流和优化的 GPU 基数排序的高并行性来摊销 [Merrill 和 Grimshaw 2010]。我们为每个 splats 实例分配一个最多 64 位的密钥,其中较低的 32 位编码其投影深度,较高的位编码重叠图块的索引。索引的确切大小取决于有多少块适合当前分辨率。因此,与单个基数排序并行地直接解决所有图块的深度排序。

排序之后,我们可以通过识别具有相同瓦片 ID 的排序数组中范围的开始和结束来有效地生成要处理的每个瓦片列表。这是并行完成的,每个 64 位数组元素启动一个线程来将其高 32 位与其两个邻居进行比较。与 [Lassner 和 Zollhofer 2021] 相比,我们的光栅化完全消除了顺序基元处理步骤,并生成更紧凑的每图块列表以在前向传递期间遍历。我们在算法 2 中展示了光栅化方法的高级概述。

Numerical stability. 在后向传递过程中,我们通过重复地将前向传递中累积的不透明度除以每个高斯的 α \alpha α 来重建梯度计算所需的中间不透明度值。简单地实现,这个过程很容易出现数值不稳定(例如,除以 0)。为了解决这个问题,在前向和后向传递中,我们跳过任何混合更新 α < ϵ \alpha < \epsilon α<ϵ (我们选择 ϵ \epsilon ϵ 为 1 255 \frac{1}{255} 2551),并用上面的 0.99 0.99 0.99 钳制 α \alpha α。最后,在前向光栅化通道中包含高斯之前,我们计算累积的不透明度(如果我们要包含它)并在其超过 0.9999 之前停止前后混合。

D PER-SCENE ERROR METRICS

表 4-9 列出了我们对所有考虑的技术和现实场景进行评估时收集的各种错误指标。我们列出了复制的 Mip-NeRF360 编号以及用于生成论文中图像的运行的编号;整个 Mip-NeRF360 数据集的平均值为 PSNR 27.58、SSIM 0.790 和 LPIPS 0.240。





相关推荐
ljh_a17 分钟前
Django 和 Django REST framework 创建对外 API
python·http·django·flask·tornado
syluxhch8 分钟前
Pycharm的终端(Terminal)中切换到当前项目所在的虚拟环境
ide·python·pycharm
yjjpp23019 分钟前
Django REST Framework(四)DRF APIVIEW
后端·python·django
铁匠匠匠13 分钟前
django学习入门系列之第三点《BootSrap初了解》
前端·经验分享·笔记·python·学习·django·前端框架
2401_8570262321 分钟前
【Conda与Pip的完美融合】在Conda环境中优雅使用pip指南
python·conda·pip
CodeArtisanX33 分钟前
高效管理 TensorFlow 2 GPU 显存的实用指南
人工智能·python·tensorflow
__Watson__38 分钟前
【django项目使用easycython编译】Cannot convert Unicode string to ‘str‘ implicitly.
python·django
谢欣燕40 分钟前
基于轨迹信息的图像近距离可行驶区域方案验证
python·opencv·计算机视觉
45度看我41 分钟前
数据库-python SQLite3
数据库·python
编程刘明1 小时前
学会拥抱Python六剑客,提高编程效率
开发语言·数据库·python·程序人生·职场和发展·学习方法