目录
摘要
3D高斯飞溅为新颖的视图合成提供了卓越的视觉质量,具有快速训练和实时渲染;不幸的是,这种方法对存储和传输的内存要求非常高。我们首先分析了原因,确定了可以减少存储的三个主要区域:用于表示场景的3D高斯基元的数量、用于表示方向辐射的球面谐波的系数数量以及存储高斯基元属性所需的精度。我们提出了每一个问题的解决方案。首先,我们提出了一种高效的、具有分辨率意识的原始修剪方法,将原始计数减少一半。其次,我们引入了一种自适应调整方法来选择用于表示每个高斯基元的方向辐射的系数数量,最后引入了一个基于码本的量化方法,以及用于进一步减少内存的半浮点表示。总之,在我们测试的标准数据集上,这三个组件使磁盘总大小减少了×27,同时渲染速度加快了×1.7。我们在标准数据集上演示了我们的方法,并展示了当在移动设备上使用该方法时,我们的解决方案如何显著减少下载时间(见图1)。
图1。左图:一部手机为自行车场景运行修改后的gsplat.js的截图。右图:同样的场景,用我们的方法处理,达到了显著更低的内存占用和更短的下载时间。
贡献
•一种高效的、具有分辨率意识的基元修剪方法,可在优化过程中减少不必要的点,从而使基元计数总体减少60%。
•一种自适应调整方法,用于选择每个3DGS基元所需的SH带数量,显著减少总体内存占用。
•基于码本的量化方法,加上半浮点表示,可以更有效地存储表示,从而进一步减少内存。
分析3DGS内存使用情况
我们的目标是显著减少3DGS的内存占用,使其达到最紧凑的辐射场表示水平,同时保持初始方法的速度和质量优势。为此,我们首先分析模型的内存占用情况以及影响内存使用的各种参数。我们首先简要回顾一下3DGS,重点介绍与存储相关的部分。
3DGS将场景建模为一组3D高斯基元(我们将其表示为椭球体,见图2,右),每个基元以给定点为中心。每个基元都有一组属性,即不透明度(用于alpha混合)、协方差(即各向异性比例和旋转)和球面谐波(SH),以表示漫反射方向辐射。该技术通常使用相机校准算法产生的点云进行初始化。这个初始点云对于新颖的视图合成来说太稀疏了;因此,3DGS优化包括用于高斯数目的自适应控制的方法。在最初是空的或缺少细节的区域,通过添加更多的基元来加密3D高斯。使用一种简单的措施来控制致密化,基元位置的梯度大小:梯度大的地方会添加基元。此外,具有低不透明度(因此对渲染没有贡献)的基本体或具有非常大的世界空间大小的基本体会定期剔除。
3DGS从输入视图和稀疏点生成照片逼真的渲染。将高斯图渲染为椭球体而不是飞溅体显示每个场景都是由数百万个基元建模的。每个基元存储大量信息:位置𝑝、旋转四元数𝑞、比例𝑠、不透明度𝛼、颜色和3个球面谐波带。这导致3DGS场景的内存消耗极高。
我们首先分析结果表示,观察到在许多情况下,3DGS会创建不必要的密集基元集。理想的致密化策略将首先避免这种情况;然而,可靠地识别所需基元的密度是困难的,因为这相当于事先知道优化问题的解决方案。因此,我们通过确定哪些基元是冗余的来解决过度基元密度的问题;正如我们稍后所展示的,这在很大程度上取决于观察到的细节的规模和分辨率。
给定3DGS基元的属性的内存占用如下:位置、比例和颜色(每个浮动3个)、旋转(四元数浮动4个)、不透明度(浮动1个)和SH系数。这导致了14+3Í𝑁=1(2)个浮点的原始结构,其中𝑀=0,1,2。是SH频带的数量。当使用原始论文中的3个带时,每个基本体需要59个存储浮动,其中45个(或76%)由SH用于对视图相关效果进行建模。
我们的第二个观察结果是,这会导致浪费的内存利用率,因为场景的大多数部分都包括完全或大部分漫反射材质,原则上,这些材质只需基本(RGB)颜色就可以很好地建模。在许多情况下,SH用于表示与视图相关的材质外观。然而,需要注意的是,3DGS和类似方法中的视图相关效果也可以通过几个基元的组合来建模。一个典型的例子是这种方法在反射表面后面创建的“反射几何体”,用于对移动的高光或反射进行建模。我们介绍了一种新方法,该方法使用可变数量的球面谐波频带,仅在实际需要时才启用这些频带,从而将内存分配到真正需要的地方
我们的第三个观察结果涉及许多原始属性的有效动态范围和所需的准确性。值得注意的是,不透明度、比例、旋转和SH系数不需要很高的动态范围,也对小的误差非常敏感。我们将利用这一事实引入后处理步骤,使用基于聚类的码本方法进一步压缩表示。相反,以类似的方式降低基元的位置精度会导致质量的显著下降。
这三个观察结果使我们想到了我们接下来要介绍的减少记忆的方法。
3DGS的内存减少
基于上述分析,我们首先提出了一种识别冗余基元并在优化过程中对其进行修剪的方法。接下来 我们引入了一种方法,允许可变数量的针对每个基元的SH频带,最后,针对不需要高精度的属性执行量化作为后处理的码本压缩方法。我们的方法概述如图3所示。
图3。左图:在训练过程中,每1000次迭代,我们的方法就会评估空间中的冗余分数,然后将其投影到基元中。然后剔除多余的基本体。中间:在致密化停止的15K迭代中,我们的方法分析SH系数,以确定哪些基元可以用0(仅RGB)1、2或3个SH带表示,这使我们可以省略存储不必要的SH系数。右图:最后,在训练结束时,我们对除原始位置外的剩余值执行码本量化。每个阶段的相对减少如图所示,在我们所有的数据集上,内存总共减少了27倍,平均PSNR下降了0.21 db。
1.支持比例和分辨率的冗余基元移除
在优化过程中,原始3DGS方法会定期剔除低于指定不透明度阈值的基元,因为它们对最终图像的贡献很小。为了限制基元的数量,一个简单的解决方案是放大此策略,并简单地更积极地删除低透明度基元,例如,每次删除指定的百分比。这样做可能已经限制了基元的最终数量,从而限制了表示的内存占用。然而,正如我们所观察到的,3DGS的自适应致密化可以导致具有过高数量的高斯数的区域。因此,我们建议估计这种空间冗余,并将这些信息与低不透明度滤波相结合,以实现高效的剔除策略。
我们的方法的目标是首先识别空间中具有冗余基元的区域。本质上,我们正在搜索存在大量基元的区域,但在这里,这些基元中的每一个对生成的渲染图像的贡献都很小。为了对空间中的每个高斯基元g做出这一决定,我们找到了与𝑔'周围的球形区域重叠的其他基元的数量。为了选择球体大小,我们考虑了观察到的像素的世界空间足迹。对于给定的视图,在𝑔处的像素足迹标识了从⻕看到的投影到\119892深度的像素的世界空间范围(见图4(a,b))。理想情况下,这种程度的𝑔周围的3D区域应该被少量的基元占据;该地区密集的高斯星系团将超过可以与⻕区分开的细节数量。
球体范围是基于最近视图的像素足迹来选择的,在该视图中可以看到𝑔(即,在相机截头体内部)。最近的视图对应于𝑔处的最小像素足迹𝑎min,这产生了与任何视图中\119892周围的最小可观察细节成比例的空间范围(图第4(c)段)。这种选择使冗余测试变得保守,即我们倾向于低估 大多数视图的冗余。在实践中,这意味着我们的标准与所有以较小分辨率观察区域的新视图一致(例如,它们离得更远),从而避免了与基线相比的任何视觉退化。对于以更高分辨率观察区域的新视图,我们的方法保留了与原始解决方案相同的信息水平。这可以被视为根据[Yu et al.2024]中描述的术语,拍摄决定原始图像最大采样率的相机。然后,我们找到与半径等于𝑎min的球体相交的其他高斯基元的数量√2 /3,即立方体对角线的一半,其中每个面都有面积𝑐min。为了进行此相交测试,每个高斯由一个椭球表示,其中心位于高斯的平均值,轴长/方向对应于3DGS定义的高斯尺度/旋转。
图4。我们的分辨率和尺度感知冗余度量衡量高斯表示场景的必要性。a) 每个相机都可以捕捉特定分辨率的细节,我们离相机越远,这个相机所能代表的空间分辨率就越小。b) 给定场景中给定基元的多个摄影机,可以表示多个分辨率。c) 对于每个高斯𝑔,我们考虑最高分辨率𝑎 𝑖 𝑚𝑖𝑛 给定输入相机。我们统计了与这一地区相交的高斯人的数量。然后,我们修剪与受K个以上其他高斯影响的区域相交的高斯。在这个例子中,高斯𝑔0将不会被修剪,因为至少有一个区域𝑎0𝑚𝑛不受其他高斯的影响。而高斯2与区域1、2、3相交。所有这些区域都有许多高斯影响,因此𝑔2是修剪的好候选者。
对于数以百万计的高斯人来说,天真地计算上述冗余分数是极其昂贵的。为了限制相交测试的数量,我们首先在基元集上应用具有大量邻居(30)的k-NN搜索来寻找候选相交基元。此外,我们通过按球体半径缩放椭球轴并执行椭球点相交测试来近似球体-椭球相交测试,这只是一个点积。我们计算通过相交测试的基元的数量,得出以每个高斯为中心的球形区域的空间冗余值。对交叉点的数量进行计数可以被视为在感兴趣的点处对空间冗余分数字段进行采样;我们不是均匀地对场进行采样,而是使用高斯中心作为采样位置,然后将在这些位置计算的分数传播到基元。为了确保我们的方法保持保守,通过从每个椭球体相交的所有球形区域中选择最小的分数来将冗余分数传播到基元。
这样做的动机很简单:如果高斯与一个没有冗余填充的区域重叠,它可能会在那里贡献关键的细节,这应该通过低冗余分数来反映。我们通过从第一步开始保留相交测试的掩码,并从相交的区域中为每个基元取最小值来实现这一点。
现在,每个基元都有一个指定的冗余分数;我们根据它们的分数对基元进行排序,并过滤那些分数大于自适应阈值的基元𝜏𝑝=(𝜇 +𝜆𝑟𝜎). 这里,𝜇和\120583是所有基元的冗余度得分的平均值和标准差。有效地,该自适应阈值将冗余分数大于𝜆𝑟标准偏差的高斯从均值中剔除。我们在所有实验中都使用𝜆𝑟=1。
由于每个基元的冗余分数并不独立于其他基元,因此删除所有值大于𝜏𝑝的过滤基元可能会导致某些区域的基元过多剔除。相反,我们删除了50%的过滤基元。我们基于低不透明度选择要删除的基元,因为不透明度是高斯对视觉结果贡献的客观/独立估计量;具有低不透明度的剔除基元对图像质量几乎没有影响。
我们发现,剔除冗余分数小于3的基元——即,一个基元至少有一个区域与另外两个基元重合——会对质量产生不利影响。因此,我们将𝜏𝑝修改为(𝜇 + 𝜆𝑟𝜎, 3.在实践中,这意味着我们不会删除冗余分数低于4的基元,因为分数是整数。
我们还通过在不透明度上添加𝐿1稀疏项来修改训练过程中的损失,以鼓励不透明度值尽可能低。这有助于鼓励创建贡献较低的基元,并且当我们剔除底部50%的冗余候选基元时特别有效。在优化过程中,每1000次迭代应用一次剔除过程。
第6.2节对该过程的结果进行了详细评估;有趣的是,简单的低透明度剔除产生的结果与冗余剔除接近。然而,每种方法的性能因测试的数据集而异。相反,我们将两者结合起来,这在所有情况下都会带来持续更好的性能,大约60%的基元被剔除,对视觉质量的影响最小。对于简单的低不透明度部分,我们每次移除3%的最低不透明度基元,最大不透明度阈值为0.05,因为移除不透明度值较大的基元会降低质量。
实现
我们在最初的开源3DGS实现之上实现了我们的方法。我们将在接受后发布我们自己实现的源代码1。
我们修改了原始方法的简单CUDA k-NN例程,以便能够识别最近邻基元ID。与原始方法相反,我们在15K迭代标记后继续剔除低不透明度高斯(不透明度<1255),因为它们既没有渲染也没有优化,因此对图像质量没有贡献。
为了在文件格式变化最小的情况下合并可变数量的SH系数,在实践中,我们存储了4组基元,每个基元用于每个数量的SH带(0、1、2和3)。这对文件的解析影响很小。
尽管分辨率感知的原始修剪方法和SH带的自适应调整发生在训练期间,并影响GPU内存使用,但它们的影响在峰值使用点之后变得相关,因此训练的内存需求保持不变。在渲染过程中,模型受益于高斯数较少和动态SH带较少所导致的内存占用减少。获取可变数量的SH系数只需要对程序逻辑进行微小的修改,这不会导致明显的放缓。
我们根据其对文件大小的影响来评估我们的方法的有效性。特别是,最有用的应用程序之一是通过网络流式传输3DGS表示。为了在现实世界的用例中展示我们压缩的好处,我们扩展了[Ebert[n.d.]]的开源WebGL实现,以包含我们修改后的表示。原始代码库不包括SH系数评估;我们添加它以在视觉上再现原始3DGS结果,并添加我们的自适应SH系数表示的显示。我们将在第6.1节和补充视频中显示结果。在我们当前的实现中,量化表示是在解析时解压缩的,而不是在运行中解压缩。此外,我们还没有在渲染过程中使用代码簿。正如并发工作所证明的那样[Niedmayr等人2023],我们预计,由于内存流量的减少,将这些代码簿直接集成到渲染管道中将导致更高的帧速率。
结果和评估
所有结果都是使用在Linux上运行的NVIDIA RTX A6000 GPU获得的。请注意,我们系统上3DGS变体的FPS测量仅隔离CUDA光栅化程序的运行时间,因此专注于图像合成本身的加速。
1.结果
在表1中,我们展示了我们的解决方案的有效性。我们的原始减少将内存占用减少到原始方法2的32%到52%之间。对PSNR的平均影响最小,在-0.32到+0.16dB之间,对视觉质量的影响最小。我们不仅看到了视觉质量的最小退化,而且在某些情况下看到了改进,原因是原始和SH剔除也可以作为一种正则化策略,迫使优化找到更好地泛化的解决方案。我们证明了我们的每一个主要贡献——原始和SH剔除,以及量化——都对压缩3DGS表示做出了显著的贡献。这些元素中的每一个都近似地将表示的大小减少3倍,从而导致3DGS中使用的所有数据集的大小平均减少27倍, 我们注意到,将代码簿和半浮点类型处理集成到渲染器中,可以实现与所需磁盘存储相同的场景VRAM消耗减少。
当我们逐步添加它们时,我们会显示方法中每个组件的效果。从上到下,我们展示了减少基元数量、自适应SH调整和量化的效果。在每种情况下,我们都显示了在SSIM、PSNR、LPIPS、总内存大小和内存减少方面对三个测试数据集的影响。
2.评估
我们将我们提出的方法与以前的解决方案进行了比较。在表2中,我们复制了原始3DGS论文的结果,并添加了四行:一行用于最近发布的MeRF方法,一行用于3DGS*,对应于使用公共代码库的运行(见前面的脚注)和我们的完整解决方案,以及低压缩和高压缩变体。我们展示了30K训练迭代后基于3DGS的方法的结果。为了说明不同目标用例的可能权衡,我们还包括两种配置略有不同的变体,实现了不同程度的压缩:“低”和“高”。这些变体使用参数𝜖õ=0.01,𝜖𝑐𝑑𝑖𝑠𝑡 = 0.0068和,𝜖𝑐𝑑𝑖𝑠𝑡 = 分别为0.054。此外,对于高压缩变体,要考虑用于剔除的最小冗余分数被设置为2。我们看到,与INGP甚至MipNerf360相比,我们提出的方法及其变体在内存方面具有竞争力,但保持了3DGS w.r.t.速度和质量的优势,包括训练时间。
接下来,我们进行一组消融研究,以分析我们的选择对记忆和质量的影响。我们研究了各种参数的影响,特别是仅基于不透明度的剔除与使用我们的冗余度量并选择具有低不透明度或随机的高分候选者相比。结果汇总在表3中。虽然不透明度剔除和冗余减少都有类似的效果,但它们可以识别和剔除不同的基元集。通过将这两种策略相结合,我们在保持稳健的质量指标的同时获得了最高的缩减率。表4量化了我们从全32位浮点到半浮点量化的影响。同样,与所需文件大小的显著减少相比,影响很小。
相关方法的定量比较;该表的第一部分取自3DGS出版物的表1。在三个具有代表性的数据集上计算结果。我们的方法在尺寸、速度和质量之间实现了最佳折衷。M-NeRF360一直是最小的,但要训练几天,需要几分钟才能渲染,而INGP的质量和渲染速度明显较低,在存储方面只获得了边际收益。红色是最好的方法,然后是橙色,然后是黄色;所有表都使用相同的颜色代码。
表3。原始剔除方法上的消融。我们根据更简单的基线来评估筛选策略的有效性。首先,我们评估一种直接的剔除方法,该方法剔除场景中不透明度最低的点(不透明度)。其次,我们根据我们的空间冗余分数(见第4.1节)计算修剪的候选者,其不透明度最低为50%(冗余)。第三,我们计算相同的候选者,但随机修剪50%的点(冗余随机),最后,我们评估我们的完整方法,该方法结合了不透明度(第一行)和冗余度(第二行)。平均而言,这两种方法的组合实现了比性能最好的其他方法高9%的点数减少。
表4。我们展示了半精度浮点对总模型内存的PSNR、内存和位置内存占用率的影响。质量下降限制在0.07 dB,而内存减少至少增加20%
总结
在本文中,我们提出了一种完整而有效的3DGS内存减少方法。我们通过引入一种分辨率感知的基元减少方法来实现这一点,该方法将基元的数量减少一半,一种自适应调整方法来选择每个基元所需的适当数量的SH频带,以及一种基于码本的量化方法。
我们的方法使内存减少了×27,渲染速度增加了×1.7。我们在流媒体设置的背景下展示了我们的结果,并使用WebGL实现进行渲染,将下载时间减少了20-30倍,渲染速度提高了约3倍。我们的是第一个这样的流媒体/移动3DGS解决方案,可以保持高视觉质量。我们的内存减少消除了3DGS的一个显著限制;因此,对于速度、质量和内存消耗这三个标准,我们的NVS方法是最具竞争力的。
在未来的工作中,研究如何进一步减少所需的基元数量,更重要的是首先避免过度致密化,这将是一件有趣的事情。简单的初步测试表明,这是一个非常棘手的问题;一个可能的方向是使用数据驱动的先验,例如深度监督。