Abstract
辐射场方法最近彻底改变了用多张照片或视频捕获的新颖视图合成,然而实现高视觉质量仍然需要训练和渲染成本高昂的神经网络,而最近更快的方法不可避免地要牺牲速度来换取质量。对于无边界和完整的场景和1080P分辨率的渲染,目前没有任何方法可以实现实时显示速率。我们介绍了三个关键因素,使能够在保持有竞争力的训练时间的同时实现最先进的视觉质量。重要的是可以在1080P分辨率下实现高质量的实时(30 FPS)新视图合成。
- 从相机校准过程中产生的稀疏点开始,用3D高斯表示场景,保留连续体积辐射场的所需属性以进行场景优化,同时避免在空白空间中进行不必要的计算;
- 对3D高斯进行交错优化/密度控制,特别是优化各向异性协方差以实现场景的准确表示;
- 开发了快速可见性感知渲染算法,支持各向异性泼溅,既加速训练又允许实时渲染。
我们在几个已建立的数据集上展示了最先进的视觉质量和实时渲染。
1. Introduction
网格和点是最常见的三维场景表示,因为它们是显式的并且非常适合基于GPU/CUDA的快速光栅化。相比之下,最近的神经辐射场方法NeRF建立在连续场景表示的基础上,通常使用体积光线进行优化多层感知器(MLP),以对捕获的场景进行新视图的合成。类似地,目前最有效的辐射场方法通过对存储在例如voxel、hash grids 或 points 中的值进行插值来构建连续表示。虽然这些方法的连续性质有助于优化,但是渲染所需的随机采样成本高昂,并且可能会导致噪声。
本文引入了一种结合了两者优势的新方法:我们的3D高斯表示可以优化得到最先进的视觉质量和有竞争力的训练时间,而且基于图块的splatting解决方案可以确保在多个数据集上以SOTA质量实现1080p 分辨率的实时渲染。
我们的目标是允许对多张照片拍摄的场景进行实时渲染,并以与典型真实场景的最有效的先前方法一样快的优化时间创建表示。最近的方法实现了快速训练,但是很难达到当前的 SOTA NeRF 方法(Mip-NeRF360)所获得的的视觉质量。但Mip-NeRF360 的训练时间长达48小时,快速但质量较低的辐射场方法可以根据场景实现交互式渲染时间(每秒10-15帧),但在高分辨率下无法实现实时渲染。
本文方法建立在三个主要组件之上。
- 首先介绍3D高斯作为灵活且富有表现力的场景表示。我们从与之前类似NeRF的方法相同的输入开始,即使用运动结构(SfM)校准的相机并使用作为SfM过程一部分的生成稀疏点云初始化3D高斯集。和大多数需要多视图立体(MVS)数据的基于点的方法相比,我们仅使用SfM点作为输入实现了高质量的结果。对于 NeRF-synthetic 数据集,即使随机初始化,我们方法也能得到高质量的结果。我们表明3D高斯是一个很好的选择,因为它们是一个可微的体积表示,它们也可以通过投影到2D并应用标准的 α \alpha α混合来非常有效地光栅化,使用和NeRF相同的图像生成模型。
- 第二个组成部分是优化3D高斯的属性——3D位置、不透明度 α \alpha α、各向异性协方差和球谐系数(SH),和自适应密度控制步骤交错,在优化过程中我们添加和删除3D高斯。优化过程产生了相当紧凑、非结构化的和精确的场景表示(对于所有测试场景,约使用1-5万个高斯)。
- 第三个组成部分是实时渲染解决方案。使用了快速GPU排序算法,并受到基于tile的光栅化的启发。然而,由于我们的3D高斯表示,我们可以执行尊重可见性排序的各向异性splatting——这归功于排序和 α \alpha α混合——并通过跟踪尽可能多的排序splat的遍历,实现快速和准确的后向传播。
综上,本文贡献如下:
- 引入各向异性3D高斯作为辐射场的高质量、非结构化的表示;
- 3D 高斯特性的优化方法,和自适应密度控制交错进行,为捕获的场景创建高质量的表示;
- 针对GPU的快速可微渲染方法,具有可见性感知,允许各向异性splatting和快速反向传播来实现高质量的新视图合成。
我们在先前发布的数据集上的实验结果表明,我们可以从多视图捕获中优化我们的3D高斯,并获得与之前最佳质量的隐式辐射场方法相同或更好的质量。我们还可以达到与最快方法相似的训练速度和质量,重要的是为新视图合成首次提供高质量的实时渲染。
2. 相关工作
首先简要概述传统的重建,然后讨论基于点的渲染和辐射场工作,讨论它们的相似性。辐射场是一个广阔的领域,所以我们只关注直接相关的工作。有关该领域的完全覆盖请参阅最近的综述。
2.1 传统场景重建
第一个新视图合成方法基于光场,首先密集采样,然后允许非结构化捕获。运动结构(SfM)的出现开启了一个新领域,使用一组照片可以用于合成新视图。SfM 在相机校准期间估计稀疏点云,最初用于3D空间的简单可视化,随后多视图立体(MVS)多年来产生了令人印象深刻的三维重建算法,从而发展出一些视图合成算法。所有这些方法都将输入图像重新投影和混合到新的视图相机中,并使用几何图形来指导这种重投影。这些方法在许多情况下产生了出色的结果,但当MVS生成不存在的几何形状时,通常不能完全从未构建的区域或过度重建中恢复。最近的神经渲染算法极大地减少了此类伪影,避免了在GPU上存储所有输入图像的巨大成本,在大多数方面都优于这些方法。
2.2 神经渲染和辐射场
深度学习技术在早期被用于新视图合成;CNNs用于估计混合权重,或纹理空间解决方案。基于 MVS 的几何形状的使用是这些方法中的主要缺点,此外使用CNN 进行最终的渲染通常会导致时间闪烁。
新视角合成的体积表示由Soft3D提出;随后提出了和体积ray-matching相结合的深度学习技术,基于连续可微密度场来表示几何,这种渲染方法具有较高的成本,因为查询体积需要大量的采样点。
神经辐射场(NeRFs)引入了重要性采样和位置编码来提高质量,但使用了大型MLP会对速度产生影响。NeRF 的成功导致了后续方法的爆炸式增长,来解决质量和速度问题,通常是通过引入正则化策略;目前最先进的新视图合成图像质量是 Mip-NeRF360。虽然该方法渲染质量很高,但是训练和渲染时间都非常久;我们的方法可以通过快速的训练和实时的渲染得到和其相当的质量,甚至在某些情况下超过它的质量。
最近的方法主要集中在更快的训练和/或渲染上,主要是通过利用三种设计选择:使用空间数据结构来存储神经特征,这些特征随后在体积ray-matching中进行插值,不同的编码和MLP容量。这种方法包括空间离散化的不同变体,codebooks,以及哈希表编码等,允许完全使用较小的MLP或上述神经网络。
这些方法最显著的是IstantNGP,它使用hash grid和 occupancy grid来加速计算,并使用较小的 MLP 来表示密度和外观。还有Plenoxels 使用稀疏体素网格插值连续密度场,并且能够完全不用神经网络。这二者都利用了球谐系数:前者直接表示方向效应,后者将其输入编码到颜色网络中。虽然两者都提供了出色的结果,但是这些方法仍然难以有效地表示空白空间,部分原因是场景/捕获类型。此外,通过选择用于加速的结构化网格,在很大程度上限制了图像质量,并且对于给定的光线行进步骤需要查询许多样本点来阻碍渲染速度。我们使用的非结构化、显示的GPU友好的3D高斯实现了更快的渲染速度和更好的质量,而无需神经组件。
2.3 基于点的渲染和辐射场
基于点的方法有效地渲染断开连接和非结构化的几何样本(点云)。在最简单的形式中,点样本渲染栅格化一组固定大小的非结构化点,为此它可以利用本地支持的图像API点类型或GPU上的并行软件光栅化。虽然对底层数据为真,但是点样本渲染存在孔洞,导致混叠,并且严格不连续。高质量基于点的渲染的开创性工作通过“splatting”点原语来解决这些问题,其范围大于像素,例如圆形或椭圆圆盘、椭球体或surfels。
最近人们对基于可微点的渲染技术很感兴趣。点已经用神经特征增强并使用CNN渲染,实现快速甚至实时的试图合成。但是它们仍然依赖于初始几何体的MVS,因此继承了其伪影。最显著的是在诸如无特征/增区域或薄结构之类的困难情况下过度重建或重建不足。
基于点的混合和NeRF风格的体绘制使用基本相同的图像形成模型。颜色 C C C由沿光线的体绘制给出:
其中密度为 σ \sigma σ,透光率为 T T T,颜色是 c c c,沿射线采样的间隔为 δ i \delta_i δi。这可以写成:
C = ∑ i = 1 N T i α i c i C=\sum_{i=1}^N T_i \alpha_i \mathbf{c}_i C=i=1∑NTiαici
其中
α i = ( 1 − exp ( − σ i δ i ) ) and T i = ∏ j = 1 i − 1 ( 1 − α i ) . \alpha_i=\left(1-\exp \left(-\sigma_i \delta_i\right)\right) \text { and } T_i=\prod_{j=1}^{i-1}\left(1-\alpha_i\right) \text {. } αi=(1−exp(−σiδi)) and Ti=j=1∏i−1(1−αi).
典型的基于神经点的方法通过混合与像素重叠的N个有序点来计算像素的颜色C:
C = ∑ i ∈ N c i α i ∏ j = 1 i − 1 ( 1 − α j ) , C=\sum_{i\in N} c_i\alpha_i\prod_{j=1}^{i-1}(1-\alpha_j), C=i∈N∑ciαij=1∏i−1(1−αj),
其中 c i c_i ci是每个点的颜色,并且 α i \alpha_i αi是通过评估具有协方差的2D高斯给出的并乘以学习到的不透明度。
从上面两个方程式可以看出图像形成模型一样,但是渲染算法非常不同,NeRFs是一个隐式表示空白/占用空间的连续表示,需要昂贵的随机抽样来找到方程式中的样本,随之而来的是噪声和计算开销;点是非结构化的离散表示,它足够灵活,允许创建、破坏和位移类似于NeRF的几何形状,这是通过优化不透明度和位置来实现的,同时避免完整体积表示的缺点。
Pulsar 实现了快速球体光栅化,启发了我们基于瓦片和排序的渲染器。然而,鉴于上面的分析,我们希望在排序的splat上保持近似传统的 shuffle-blending 具有体积表示的优点:我们的光栅化尊重可见性顺序。此外,我们在一个像素的所有splat上反向传播梯度并栅格化各向异性splats。这些元素都有助于结果的高视觉质量。此外,上述方法用CNN进行渲染,导致时间不稳定。尽管如此,Pulsar和ADOP的渲染速度是我们开发快速渲染解决方案的动机。
虽然专注于镜面效应,但基于漫射点渲染轨迹的神经点光线追踪方法通过使用MLP来克服这种时间不稳定性,但仍需要MVS几何作为输入。这个类别中最新的方法不需要MVS,同时也使用SH作为方向,然而只能处理单个物体的场景,并且需要mask进行初始化。虽然在小分辨率和较少点数的情况下速度较快,但是尚不清楚它如何拓展到典型数据集的场景。我们使用3D高斯函数来实现更灵活的场景表示,避免了对MVS几何的需求,并通过基于tile的渲染算法实现了对投影高斯的实时渲染。
最近的 Xu et al. 2022 方法使用点来表示辐射场,用径向基函数方法。在优化过程中采用点修剪和致密化技术,但使用体积射线行进,无法实现实时显示速率。
在人体表现捕获领域,3D高斯已经被用于表示捕获的人体。最近,它们已被用于视觉任务的体积光线行进。神经体积基元已经在类似的环境中被提出。虽然这些方法启发了3D高斯的选择作为我们的场景表示,但它们专注于重建和渲染单个孤立对象(人体或人脸)的特定情况,导致深度复杂度较小的场景。相比之下,我们对各向异性协方差的优化、交错优化/密度控制和高效深度排序进行渲染,使我们能够处理完整的、复杂的场景,包括背景,室内和室外以及深度复杂度大的场景。
3. 方法概述
我们方法的输入是静态场景的一组图像,以及由SfM校准的相应相机,SfM会产生一个稀疏点云。从这些点中,我们创建了一组3D高斯函数(第4节),由位置(均值)、协方差矩阵和不透明度 𝛼 定义,这使得优化过程非常灵活。这导致了3D场景的表示相当紧凑,部分原因是高度各向异性的体积splat可用来紧凑地表示细微结构。辐射场的方向外观成分(颜色)通过球谐函数(SH)来表示,遵循标准做法[Fridovich-Keil和Yu等人,2022;Müller等人,2022]。我们的算法通过一系列的优化步骤来创建辐射场表示(第5节),这些步骤涉及3D高斯参数(位置、协方差、𝛼和SH系数)的交错,以及用于自适应控制高斯密度的操作。我们方法的效率关键在于基于瓦片的光栅化器(第6节),它允许对各向异性splat进行𝛼混合,并且通过快速排序尊重可见性顺序。我们的快速光栅化器还通过跟踪累积的𝛼值实现了快速的反向传播,而不限制能够接收梯度的高斯数量。方法概述如图2。
4. 可微 3D Gaussian Splatting
我们的目标是优化场景表示,允许高质量的新视图合成,从一组稀疏的点云开始,而不需要法线。为此,我们需要一个具备可谓体积表示属性的基元,同时是非结构化的和显示的,可以非常快的渲染。我们选择了3D高斯,它可以很容易地投影到2D splats中,从而允许快速混合渲染。
我们的方法和以前使用2D点的方法有相似之处,该方法假设每个点都是一个法线较小的平面元。考虑到SfM点的极端稀疏性,法线是很难估计的。同样,从这样的估计中优化嘈杂的法线也非常具有挑战性。相反,我们将几何图形建模为一组不需要法线的3D高斯。我们的高斯由世界空间中定义的完整3D协方差矩阵 Σ \Sigma Σ 定义,以点(mean) μ \mu μ 为中心:
G ( x ) = e ( − 1 / 2 ) ( x ) T Σ − 1 ( x ) G(x)=e^{(-1/2)(x)^T\Sigma^{-1}(x)} G(x)=e(−1/2)(x)TΣ−1(x)
在混合过程中,这个高斯乘以 α \alpha α。
然而,我们需要将我们的3D高斯投影到2D以进行渲染。Zwicker[2001a]等人演示了如何将这种投影到图像空间。给定一个观察变换 W,相机坐标系中的协方差矩阵 Σ ′ \Sigma' Σ′ 为:
Σ ′ = J W Σ W T J T \Sigma'=JW\Sigma W^TJ^T Σ′=JWΣWTJT
其中 J J J 是投影变换仿射近似的雅克比矩阵。
一个明显的方法是直接优化协方差矩阵以获得代表辐射场的3D高斯。然而只有当协方差矩阵为半正定时协方差矩阵才有物理意义。对于我们所有参数的优化,我们采用梯度下降不能简单地约束得到有效矩阵,更新过程中很容易产生无效的协方差矩阵。
所以,我们选择了更直观但等效的表示进行优化。3D高斯的协方差矩阵类似于描述椭球的配置。给定一个缩放矩阵 S S S和旋转矩阵 R R R,可以找到相应的 Σ \Sigma Σ:
Σ = R S S T R T \Sigma=RSS^TR^T Σ=RSSTRT
为了允许对这两个因素进行独立优化,我们分别存储它们:用一个3D向量表示缩放,用一个四元数q表示旋转。这些可以简单地转换为它们各自的矩阵并组合,确保对q进行归一化以获得有效的单位四元数。
为了避免训练过程中自动微分造成的显著开销,我们明确地推导出所有参数的梯度。精确导数计算的详细信息在附录A中。、
这种各向异性的协方差的表示适合于优化,允许我们优化3D高斯以适应捕获场景中不同形状的几何形状,从而产生相当紧凑的表示。
5. 3D Gaussians优化&自适应密度控制
我们方法的核心是优化步骤,它创建了一个密集的3D高斯集,准确地表示场景以进行自由视图合成。除了位置 p p p, α \alpha α 和协方差 Σ \Sigma Σ 之外,我们还优化了表示每个高斯颜色 c c c 的SH系数,以正确捕捉场景的视点相关的外观。这些参数的优化和控制考斯密度以更好地表示场景的步骤交织在一起。
5.1 优化
优化基于连续的渲染迭代,并将生成的图像和捕获数据集中的训练视图进行比较。不可避免地,由于3D到2D投影的模糊性,几何形状可能会被错误放置。因此我们的优化需要能够创建几何图像,当几何形状被错误放置时也需要去除或移动。3D高斯协方差参数的质量对于表示的紧凑型至关重要,因为可以用少量的大各向异性高斯捕获大的均匀区域。
我们使用随机梯度下降技术来进行优化,充分利用标准GPU加速框架,以及为某些操作添加自定义CUDA内核的能力。
特别是我们的快速光栅化对于优化效率至关重要,因为它是优化的主要计算瓶颈。
我们对 α \alpha α 使用 sigmoid 激活函数将其约束在[0-1)范围并获得平滑梯度,对协方差使用指数激活函数。
我们将初始协方差矩阵估计为各向同性高斯,其轴等于到最近三个点的距离的平均值。
我们使用类似于Plenoxels的标准指数衰减调度技术,但仅适用于位置。损失函数是 L 1 L_1 L1 损失和D-SSIM项相结合(默认 λ = 0.2 \lambda=0.2 λ=0.2):
L = ( 1 − λ ) L 1 + λ L D − S S I M L=(1- \lambda )L_1 + \lambda L_{D-SSIM} L=(1−λ)L1+λLD−SSIM
5.2 高斯自适应控制
我们从SfM的初始稀疏点集开始,然后应用我们的方法自适应地控制单位体积内的高斯数量和密度,这样就能从初始稀疏的高斯集变为更密集的高斯集,从而以正确的参数更好地表现场景。在优化预热之后,每迭代100次就会进行一次高斯致密化处理,并移除基本透明的高斯,即α小于阈值的高斯。
我们对高斯的自适应控制需要填充空白区域。它不仅关注几何特征缺失的区域(重建不足),也关注高斯覆盖场景大面积的区域(重建过度)。我们观察到两者都有较大的视空间(view-space)位置梯度。直观的说,可能是因为它们对应的区域还没有得到很好的重建,而优化过程会尝试移动高斯来进行纠正。
由于这两种情况都很适合进行致密化处理,因此我们会对视图空间位置梯度的平均值高于设置阈值(默认0.0002)的高斯进行致密化处理。
如图4所示,接下来介绍这个过程的细节。
对于重建不足区域的小高斯,我们需要覆盖必须创建的新几何体。为此,最好通过简单地复制高斯,创建一个相同大小的副本,并沿位置梯度方向移动。
另一方面,高方差区域的大高斯需要分割成更小的高斯。我们使用两个新的高斯来替换这些高斯,并将它们的尺寸除以实验确定的1.6。我们还使用原始三维高斯作为采样的PDF来初始化它们的位置。
在第一种情况下,我们检测并处理增加总体积和高斯数量的需求,在第二种情况下,我们会保留总体积并增加高斯数量。和其他体积表示法类似,我们的优化可能会陷入靠近输入相机的漂浮物上的情况;这可能会导致高斯密度的不合理增加。缓和高斯数量增加的有效方法是,每3000次迭代后,将α数值设置为接近于0。然后,优化会在需要的地方增加高斯的密度,同时允许去除 α \alpha α小于上述阈值 ϵ α \epsilon_\alpha ϵα的高斯。高斯可能会缩小或增大,并与其他高斯有重叠,但我们会定期移除世界空间中非常大的高斯和视图空间中占用较大的高斯。这种策略可以很好地控制高斯总数。我们模型中的高斯函数始终保持欧式空间中的原语;和其他方法不同,这里不需要对远距离或大型高斯进行空间压缩、扭曲或投影策略。
6. Gaussians 快速可微光栅化
我们的目标是得到快速的整体渲染和以允许近似 α \alpha α混合的快速排序——包括各向异性splats——并避免之前工作中对可接收梯度的splats数量的硬限制。
为了实现这些目标,我们设计了一种基于tile的高斯泼溅光栅化器,灵感来自于最近的软件光栅化方法,以一次为整个图像预排序,避免了对每个像素进行排序的成本,这也是之前的 α \alpha α混合方法的阻碍。我们的快速光栅化器允许对任何数量的混合高斯进行有效的反向传播,这些混合高斯具有较低的额外内存消耗,每个像素只需要恒定的开销。我们的光栅化流程是完全可微的,并且给定2D投影可以光栅化类似于之前2D splatting方法的各向异性泼溅。
我们的方法首先将屏幕分割成16*16个块,然后针对视椎体和每个块继续剔除3D高斯。具体地,我们只保留和视椎体相交的99%置信区间的高斯。此外,我们使用保护袋来简单拒绝极端位置的高斯(即那些均值接近近平面和远离视椎体的高斯分布),因为计算它们的投影2D协方差是不稳定的。然后我们根据它们重叠的tile数量实例化每个高斯,并为每一个实例分配一个结合了视图空间深度和tile ID的key。然后,我们使用单个快速 GPU Radix 排序基于这些key对高斯进行排序。请注意,没有额外的逐点排序,而且混合是基于这个初始排序进行。因此,我们的 α \alpha α混合在某些配置中是近似的。然而,当splats接近单个像素的大小时,这些近似值变得可以忽略不计。我们发现这种选择大大提高了训练和渲染性能,而不会在收敛的场景中产生伪影。
在对高斯进行排序后,我们通过识别splat到给定tile的第一个和最后一个深度排序条目, 为每个tile生成一个列表。对于光栅化,我们为每个tile启动一个线程块(block)。每个block首先协作将高斯的数据包加载到共享内存中,然后对于给定的像素,通过从前往后遍历列表累计颜色和不透明度值,从而最大化数据加载/共享和处理的并行优势。当我们在像素上达到目标饱和度时,相应的线程停止。定期查询tile的线程,当所有像素饱和时,整个tile的处理终止(即透明度变成1)。附录C给出了排序过程的细节和对整体光栅化方法的高级概述。
在光栅化中, α \alpha α的饱和是唯一停止准则。和之前的工作相比,我们不限制接收梯度更新的混合基元的数量。我们执行该准则是为了让我们的方法可以处理具有任意、不同深度复杂度的场景并准确地学习它们,而不需要特定于场景的超参数调整。
在后向传播过程中,我们必须恢复前向传播中每个像素的混合点的完整序列。我们的方案是在全局内存中存储任意长的混合点列表。为了避免隐含的动态内存管理开销,我们改为选择再次遍历每个tile列表,我们可以重用前向传播中排序的高斯数组和tile的范围。为了便于梯度计算,我们现在将它们从后向前遍历。
遍历从影响tile中的任何像素的最后一个点开始,并将点加载到共享内存中再次进行协作。此外,如果每个像素的深度小于或等于前向传递期间对其颜色有贡献的最后一个点的深度,则每个像素只会开始昂贵的重叠测试和处理。第4节中描述的梯度计算需要原始混合过程中的累积不透明度值。我们可以通过在前向传播结束时仅存储总累积不透明度来恢复这些中间不透明度值。具体来说,每个点在前向过程中仅存储最终的累积不透明度 α \alpha α,我们通过将其除以我们从前到后遍历中的每个点的不透明度,来获得梯度计算所需要的系数。
7. 实现、结果和验证
7.1 实现
我们使用pytorch框架在Python中实现本文方法,并为光栅化编写了自定义CUDA内核,这些内核是先前方法的拓展版本(Kopanas等 2021),并使用NVIDIA CUB排序例程进行快速基数排序。我们还使用开源的SIBR 构建了一个交互式查看器,用于交互式观看,这个实现用来衡量我们实现的帧速率。
优化细节。 为了稳定性,我们从较低分辨率开始warm-up计算。具体地,我们使用缩小4倍的图像分辨率开始优化,然后在250次和500次迭代后进行两次上采样。
SH 系数优化对缺乏角度信息很敏感。对于典型的 类NeRF捕获,其中心物体是从周围整个半球拍摄的照片来看,优化效果很好。但是,当捕获有角度区域缺失时,优化可能产生完全错误的SH零阶分量值。为了克服整个问题,我们首先只优化零阶分量,然后在每1000次迭代之后引入SH的一个波段,直到表示SH的所有4个波段。
7.2 结果和验证
结果。 我们在先前发布的13个真实场景,和合成Blender数据集下测试了我们的算法。特别地,我们在Mip-NeRF360中展示的全套场景上测试了我们的方法,这是当前NeRF渲染质量最高的方法。我们选择的场景有非常不用的捕捉风格,涵盖了有界的室内场景和很大的无边界室外环境。我们对评估中的所有实验使用相同的超参数配置,所有报告的结果都在一个A6000 GPU上运行,除了Mip-NeRF360方法。
真实场景。 除了和质量基准Mip-NeRF360方法相比较,还和最近的两种快速NeRF算法进行了比较:instantNGP 和 Plenoxels。
我们对数据集采用训练集测试集分割,使用Mip-NeRF360建议的方法,每8张图像进行一次测试,使用常用的标准 PSNR、L-PIPS 和 SSIM 评价指标进行一致和有意义的比较,以生成误差指标,结果见表1。
表中的所有结果都来自我们运行的指着之前所有方法的代码,除了Mip-NeRF360方法我们从原文中拷贝的结果,以避免对当前SOTA的混淆。对于图像中的结果,我们使用了自己对Mip-NeRF360的运行结果。我们还展示了平均训练时间,渲染速度和用于存储优化参数的内存。我们报告了运行35K迭代的instantNGP(Base)的基本配置的结果,以及作者建议的稍微大一点的网络(Big),以及我们方法的7K和30K迭代的两种配置的结果。图6展示了我们两种配置的视觉效果的区别。大部分情况下,7K次迭代的结果已经很好。
训练时间因数据集而异。注意,不同数据集的图像分辨率也不同。在项目网站上,我们提供了用来计算所有场景中的所有方法的所有测试视图的渲染。我们保留了所有渲染的原始输入分辨率。
表格显示,我们完全收敛的模型达到了和SOTA相当的质量,有时甚至略好于SOTA。请注意在相同的硬件上,它们的平均训练时间是48小时,而我们是35-45分钟,而且他们的渲染时间是10秒每帧。我们在5-10分钟的训练后实现了和instantNGP和Plenoxels相当的质量,但额外的训练时间使我们能够实现SOTA的质量。对于 Tanks&Temples 数据集,我们在相近的训练实现下实现了和instantNGP相似的质量(大约7分钟)。
我们还在图5中展示了视觉结果对比。我们方法的结果是30K次的迭代。我们观察到在某些情况下甚至Mip-NeRF360也存在伪影,而我们的方法避免了这些情况。附加材料中还提供了从远处比较的路径,我们的方法倾向于保留覆盖良好区域的视觉细节,即便从远处看,这是以往方法不总是能做到的。
合成的有界场景。 除了真实场景,我们还在合成Blender数据集上评估了本文方法。这些场景提供了一组详尽的视图,尺寸有限,并提供了精确的相机参数。在这种情况下,即使我们采用随机初始化,也可以获得最先进的结果:我们在包含场景边界的体积内以100K个均匀随机高斯开始训练。我们的方法快速自动地将它们修建到大概6-10K有意义的高斯分布。经过30K次迭代,训练模型的最终大小是每个场景约20-500K个高斯。
我们在表2中使用白色背景展示了PSNR结果对比。经过训练的合成场景以180-300 FPS的速度渲染。
紧凑性。和之前的显式场景相比,我们优化中使用的各向异性高斯函数能够用更少的参数来建模复杂的形状,我们通过讲文明的方法和Zhang 2022方法获得的高度紧凑的基于点的模型进行评估来展示这一点。我们从他们的初始点云开始,这是通过前景mask的空间雕刻得到的,然后优化直到我们和它们报告的 PSNR 分数持平。大概2-4分钟内完成。我们使用大约四分之一的点数超过了他们报告的指标,得到的平均模型大小为3.8MB,而他们是9MB。我们注意到在这个实验中,我们只使用了和他们一样的两阶SH。
7.3 消融
我们分离了不同的贡献和算法选择,并构建了一组实验来衡量它们的效果。具体地,我们测试了算法的以下方面:从SfM初始化,致密化策略,各向异性写方法,允许数量不限的splats具有梯度和SH的使用。每种选择的结果总结在表3中。
从 SfM 进行初始化。 我们评估了从SfM点云初始化三维高斯的重要性。对于这个消融实验,我们在一个大小等于输入相机边界范围三维的立方体里均匀采样。我们观察到我们方法的表现相对较好,即使没有SfM点也不会完全失败。相反地,它主要在背景中表现退化,图7所示。另外在训练视图中没有很好覆盖的区域,随机初始化方法似乎有更多的票废物,无法通过优化去除。另一方面,合成数据集没有这种现象,因为没有背景并且受到输入相机的良好约束。
致密化。接下来评估了两种致密化方法:clone和split策略。我们分别禁用每种方法,并使用其余方法进行优化。结果显示分割大高斯对于允许很好地重建背景很重要,如图8,而克隆小的高斯而不是拆分它们可以实现更好和更快的收敛,尤其是有薄的结构出现在场景中时。
无限制的梯度splats的深度复杂性。我们评估如果跳过最前面的N个点之后的梯度计算,是否会在不牺牲质量的情况下提高速度。测试中选择了N=10,这是Pulsar方法中默认值的两倍,但是由于梯度计算中的严格逼近导致优化不稳定。对于卡车场景,质量在PSNR上下降了11dB,视觉结果如图9所示。
各向异性的方差。 在我们的方法中一个重要的算法选择是对三维高斯函数的全协方差矩阵进行优化。为了证明这种选择的效果,通过优化单个标量值来消除各向异性。该标量值控制所有三个轴上的3D高斯半径。优化结果如图10所示。我们观察到各向异性显著提高了3D高斯与表面对齐的能力,这反过来又允许获得更高的渲染质量的同时保持相同数量的点。
球面谐波。 最后球面谐波的使用提高了我们的整体PSNR分数,因为它们补偿了和视图相关的影响(表3)。
7.4 限制性
本文方法也存在局限性。在场景中没有被很好观察到的区域,会产生artifacts,这对于其他方法也是困难的。尽管各向异性高斯具有很多优势,但是我们的方法会创建出拉长的伪影或者“斑点”高斯(图12),对于以往方法在这些情况下也很难。
我们在优化中产生较大的高斯时,偶尔也会出现popping artifacts,这往往发生在视觉依赖的区域。产生这些弹出伪影的一个原因是光栅化器中通过保护带简单地阶段。更有原则的剔除方法将减轻这些伪影。另一个因素是我们简单的可见性算法,这可能导致高斯突然切换深度/混合排序,这可以通过抗锯齿来解决,我们将留作未来的工作。此外,我们目前不讲任何正则化应用与优化中,这样做将有助于看不见的区域和弹出伪影。
虽然我们使用相同的超参数进行完整评估,但早期的实验表明在非常大的场景中,减少位置的学习率是必要的。
尽管和之前基于points的方法相比我们的表达是紧凑的,但是我们的内存消耗明显高于基于NeRF的方法。在大场景训练期间,在我们的未优化的原型中峰值GPU内存消耗可以超过20GB。然而,通过对优化逻辑的仔细底层实现(类似于instantNGP),这个数字可能会显著降低。渲染经过训练的场景需要足够的GPU内存来存储完整模型(大规模场景的数百兆字节)和光栅化器的附加30-500MB,具体取决于场景大小和图像分辨率。我们注意到有许多机会可以进一步减小我们方法的内存消耗。点云的压缩技术是一个经过充分研究的领域,探究这些方法如何适应本文算法是个有趣的问题。
8. 讨论和结论
我们提出了第一种允许在各种场景和捕获风格中真正允许实时高质量的辐射场渲染,同时具有和之前最快的方法相比具有竞争力的训练时间。
我们选择的3D高斯基元保留了用于优化的体积渲染的属性,同时匀速快速基于splat的光栅化。我们的工作表明和广泛接受的观点相反——要得到快速和高质量的辐射场训练,连续表示并不是严格需要的。
我们大部分训练时间(80%)花在Python代码中,只有光栅化例程实现为优化的CUDA内核。我希望将剩余的优化全部移植到CUDA。这可以为对性能要求很高的应用实现显著的进一步加速。
我们还展示了构建实时渲染原则的重要性,利用GPU的强大功能和软件光栅化管线架构的速度。这些设计选择是训练和实时渲染性能的关键,和之前基于体积光线行进相比,在性能方面提供了具有竞争力的边界。
我们的高斯是否可以用于执行捕获场景的网格重建是个有趣的问题。除了考虑到网格的广泛使用之外,这将是我们能够更好地理解我们的方法在体积表示和表面表示之间的连续体中的确切位置。
由3D到2D: 3D Gaussian到2D Gaussian的过程是非常重要的。 论文中引用的核心文章《EWA volume
splatting》描述了如何将3D高斯通过仿射变换转换成新的3D高斯分布,并与画布像素对齐。这一变换后,通过沿第三维积分,可以计算出椭球在特定像素上的着色。由于3D高斯分布沿任一轴线积分的结果是2D高斯,因此可以用2D高斯来简化积分过程。
这个过程是一个关键创新点。传统的基于体积和积分的渲染方法需要选择采样点来查询隐式几何形状,并将其属性变换累加以计算像素颜色。这不仅呀保证渲染质量和隐式几何的连续性,还要维持细节的还原度,且不可避免地存在误差。因此,通常需要增加采样量,这会导致性能下降。3D高斯的轴向积分与2D高斯等价,从数学角度解决了对大量采样的需求,将计算量限制在高斯数量上。另外这些高斯可以通过光栅化管线进行快速并行渲染,进一步提高效率。
限制:
- 防止模型优化中的破碎的高斯,点太大、太长、冗余等。
- 更高的显存使用率。(4GB用于显示,12GB用于训练)
- 更大的磁盘占用(每场景1GB+)。
- 和现有渲染管线不兼容。
A u t h o r : C h i e r Author: Chier Author:Chier