开源项目: https://github.com/graphdeco-inria/hierarchical-3d-gaussians?tab=readme-ov-file
24年的大场景开源论文,来自法国国家信息与自动化研究所3DGS原作者BERNHARD KERBL的大场景新作,LoD首次在大场景中的应用,大场景的LoD必读。
25年7月有一篇同样来自奥地利的大场景LoD(a lod of gaussian),旨在解决同时航拍和街拍图像集,并且不分块、单卡训练大场景LoD,本来想把这篇文章作为子篇读一下,可惜可能是arxiv上面挂的原因还是写的仓促,里面对于LoD的基础介绍过于抽象,比如高斯球1和高斯球2融合了,按照他的lod介绍居然能得出这样的结论:融合后的高斯球scale小于融合前的scale,暂时不能继续阅读后续内容了,先这样吧,要是开源了试试效果。
abstract
近年来,新颖视角合成技术取得了重大进展,其中3D高斯泼溅(3D Gaussian splatting)方法在视觉质量、快速训练和实时渲染方面表现优异。然而,训练和渲染所需的资源不可避免地限制了该方法所能表现的大规模场景的视觉质量。
我们提出了一种层次化3D高斯表示方法,在保持超大规模场景视觉质量的同时,通过高效的细节层次(LOD)方案实现远距离内容的实时渲染,包括有效的层级选择和平滑过渡。我们采用分治策略,将超大规模场景拆分为独立区块进行训练,再将这些区块整合为层级结构,并通过优化中间节点合并的高斯模型进一步提升视觉质量。
超大规模场景采集通常存在覆盖稀疏的问题,这对原始3D高斯泼溅训练方法提出了挑战。我们通过调整训练流程并引入正则化方法来解决这些问题。最终,我们提出了一套完整解决方案:支持超大规模场景(如覆盖数公里轨迹、持续1小时的采集数据)的实时渲染;通过自适应LOD机制灵活适配不同计算资源;仅需简单低成本设备采集数万张图像即可重建。实验结果表明,该方法能有效处理极大规模场景,同时保持高视觉保真度。
1 INTRODUCTION
3DGS等显式基元表示方法实现了高视觉质量、快速训练与实时渲染的优异结合。然而,无论底层表示如何高效,训练和渲染的可用资源始终限制着可高质量呈现的场景规模。我们提出一种新的分治解决方案:通过引入一种支持内部节点优化的层次化3D高斯表示,并配备细节层次(LOD)渲染器,使得场景训练与渲染规模较现有方法提升一个数量级。
绝大多数神经辐射场方法因依赖隐式表示和网格加速结构(通常伴随立方级内存增长[Sun et al. 2022])而难以扩展至超大规模场景。虽有BlockNeRF[Tancik et al. 2022]等例外[Meuleman et al. 2023],但其训练与渲染资源需求仍极高,且未实现实时渲染。
相比之下,3DGS作为基于基元的光栅化方法,天然适合结合分治策略与LOD渲染技术处理大场景。但原始3DGS表示的内存需求即使对高端GPU也迅速超标,导致此类场景无法渲染;训练时的内存开销更为严峻。为此,我们提出:
- 分治法:将场景划分为可管理的小区块(chunk)进行训练,支持区块并行处理;
- 层次化结构:实现远距离内容快速渲染,支持高效层级构建、快速切换与平滑过渡,平衡视觉质量与速度。
尽管每个区块可沿用原始3DGS方法优化,但车载设备等采集的大场景数据通常比常规辐射场数据集稀疏得多,我们为此调整了区块优化策略。为实现LOD渲染,我们基于局部几何与体积属性设计了3DGS基元合并方法,构建出支持高效层级选择与平滑插值的层次结构,并进一步优化中间节点属性以提升视觉质量。最后,整合所有区块层次结构并清理冗余节点,即可实现基于LOD的实时渲染。
我们在多个数据集验证方法:包括Wayve提供的数据集及自采数据集(使用5-6台GoPro头盔支架设备采集,覆盖450米至数公里轨迹,含5800-28000张图像),均实现实时3D导航。
主要贡献:
- 新型3DGS层次结构:支持高效层级选择与插值;
- 层次内部节点优化方法:提升视觉质量;
- 面向大场景的区块分治训练与渲染框架。
我们的方法首次实现超大规模场景区块并行训练与全动态LOD渲染,可适配不同计算资源,且仅需消费级设备采集,使街区级场景的采集与渲染向大众普及。
2 RELATED WORK
细节层次(LOD)渲染
LOD是计算机图形学经典技术[Luebke2003],近期被应用于NeRF[Takikawa et al.2022; Xiangli et al.2022]与符号距离函数[Takikawa et al.2021]。实时渲染中,LOD通过启发式规则或资源预算动态调节细节量,是可扩展渲染方案的基础[Karis et al.2021]。点表示的LOD方法已有研究[Dachsbacher et al.2003; Rusinkiewicz and Levoy2000],但3DGS的体素/光栅化双重特性与优化过程带来新挑战。完整的LOD方案需同时满足:1)生成多级层次结构;2)制定视角适配的层级选择策略;3)实现无瑕疵的层级过渡。我们的层次结构满足上述需求,适用于实时渲染。
城市级重建
地面视角的城市级场景重建研究稀缺,且高质量公开数据匮乏。我们计划公开数据集以推动该领域发展。BungeeNeRF[Xiangli et al.2022]需从卫星到近景的渐进式数据,不适用于纯地面采集。NeuRas[Liu et al.2023b]通过多视图立体重建与神经纹理建模短时驾驶片段场景,远小于本文目标。DrivingGaussians[Zhou et al. 2023]基于3DGS,但仅处理硬件适配的小范围场景(如nuScenes[Caesar et al. 2022]和KITT1360[Liao et al. 2022]数据集)。
分治策略
分治方案将场景划分为独立区块(chunk)。KiloNeRF[Reiser et al. 2021]首次将该思想用于辐射场性能优化,后续扩展至大规模场景[Dhiman et al. 2023; Meuleman et al. 2023; Tancik et al. 2022; Turki et al. 2022]。最接近的工作BlockNeRF[Tancik et al. 2022]将场景按50%重叠分块并逐块训练NeRF,但训练与渲染速度极慢。相比之下,我们的方法通过快速粗初始化实现分块高效训练,并支持实时渲染。
3 OVERVIEW AND BACKGROUND
3.1全文结构
我们致力于解决超大规模场景的优化难题,以构建可实时渲染的层次化辐射场。针对当前辐射场采集数据稀疏性远超传统数据的特点,首先需突破优化资源限制。具体步骤如下(图1(a)-(e)):
- 场景分块:将场景划分为多个区块(chunk)(图1(b));
- 粗粒度骨架构建:为整个场景优化固定数量的少量3D高斯基元,形成初始骨架;
- 区块独立优化:改进3DGS优化策略以适应稀疏数据(第6.2节),逐区块优化(图1(c));
- 层次结构构建:为每个区块建立新型3DGS层次结构(图1(d)),通过优化内部节点属性提升整体视觉质量;
- 全局整合:压缩各区块优化后的层次结构,合并为完整场景表示(图1(e)),支持基于LOD的实时渲染。
全文结构:在简要回顾3DGS基础(下文)后,依次介绍层次化结构设计(第4节)、内部节点优化方法(第5节)及大场景分块训练策略(第6节)。
3.2技术背景1
3.3技术背景2-Level of Detail(LOD)的原理
来自另外一篇本文的解析,作者解释清楚了lod概念,解释非常到位!这里作为引用:
解读论文《A Hierarchical 3D Gaussian Representation for Real-Time Rendering of Very Large Datasets》-优快云博客
3.4技术背景3-AABB
3.5技术背景4-BVH
八叉树(Oct-tree)根据空间的锚点来划分三维空间,BVH树通过物体来划分, 即划分的不是空间,是把整个物体分为两个部分。
在BVH中,所有的几何物体都会被包在bounding volume的叶子节点里面,bounding volume外面继续包着一个更大的bounding volume,递归地包裹下去,最终形成的根节点会包裹着整个场景。常用于碰撞检测和光线追踪的加速,能够将时间复杂度降低到关于物体数量的对数级别。
步骤如下:
- 找到一个bbox包含所有物体;
- 递归地把盒子内所有物体分为两个部分;
- 重新计算每一部分的bbox;
- 重复以上过程直到停止。
1.BVH树生成过程
- 首先对所有物体找一个盒子把它们全部包围起来,如AABB框,对应于根节点;
- 把框内的所有物体分成两部分,左边一部分和右边一部分,具体怎么划分可以根据具体任务进行定义,生成两个叶子结点;
- 对上边划分的两部分的物体,分别重新求它们各自的包围盒(图中灰色部分,仍以AABB框为例)。对每一个部分继续划分;
- 重复以上过程直到停止(停止条件通常为一个包围盒里最多只有n个物体,n∈R,图中n=5)。
2.BVH树的性质
a. BVH树中的每个物体只可能出现在一个格子里。
b. 划分速度快。(把物体分成两堆很容易实现,其次,在重新求包围盒时,只需要求每一堆物体的最大最小x,y,z坐标即可)
c. 不同的bbox有可能相交,对空间并不是严格意义上的划分开了。
3.6必看!本文框架总结!否则头皮发麻
先抛出问题,为什么需要hierarchical gaussian?因为如果模型或者场景过大,我们的渲染压力就会很大,比如,我们现在训练好一个1000w个高斯球的模型,我们近距离查看它,只需要渲染视锥内的高斯球即可,如果我们距离拉的很远来查看,那就会渲染全部的1000w个高斯球,这种情况下计算成本大大增加,可能出现的一种情况就是拖拉模型过程中卡顿,并且主观来说,想看细节拉近模型即可,我们有必要在远视角的情况下脸贴到屏幕上去看细节吗?
所以我们要实现高斯模型LoD的渲染,也即随着相机位置与模型的远近来进行不同尺度也叫不同层级的渲染!如果视角远,我们就减少渲染的高斯球数量。这个想法其实早就存在了,那就是图像金字塔,只不过图像金字塔只关注图片本身而已,这也本来就是图像的LoD过程。
现在我们考虑更高一级-图片的渲染,这自然就是本文高斯模型LoD的渲染问题了!ok,是这是本文总体的思想和目标,那么如何具体实现呢?
第一步(4.1节),想要得到不同尺度或者层级的模型,我们要先构建高斯球的融合或者分块机制!二叉树就是一个不错的选择,这在图形学中其实就是BVH树,也很好带入高斯模型,首先最底下的叶节点肯定就是每一个具体的高斯球了,那么中间节点就是这些高斯球叶节点的融合,然后中间节点也有自己头上的中间节点,也就是融合的融合,以此类推,我们会得到一个基于高斯球的、整个模型的分块。
- 中间节点是叶节点的融合,对于高斯球的融合,就是使用加权平均来计算融合后的高斯属性而已。这样融合以后也会是一个高斯球。
- 中间节点被称作一个分块(chunk)
第二步(4.2节),我们需要刻画模型的不同尺度或者层级,也即我们需要量化层级,首先我们根据投影到2D的范围大小为每一个chunk计算一个粒度值ϵ(n),然后再固定设置一组粒度阈值,然后对于其中的粒度值
,和chunk的粒度比较,满足条件判断得到一个层级的切割面,也就得到了
对应的整体模型的层级。这组阈值可以类比于图像金字塔中的那组resize倍数。
- 换句话说,粒度阈值
就相当于一个切割面也就是一个层级,并且因为融合高斯球也是高斯球,所以,一个层级其实就是一个高斯模型!!!这可以类比图像金字塔中的层级。
- 关于粒度与距离的关系,这可能需要看具体的代码才能明白,个人理解是:一旦BVH建立,那么各个节点对应高斯球的scale就已经确定了,也就是说各节点对应的高斯球有多大已经是固定值了,也即子节点的scale必定小于等于父节点的scale,或者说子节点的粒度必定小于等于父节点的粒度,也就是这个粒度与距离实际上没有关系,不管相机距离多远,都符合这个规律。如果硬是要和距离有关系,那必定是通过数值方法对做了
处理。
- 所以,关于粒度阈值的本质,我个人没看代码前的理解是对叶节点往上到根节点scale的一组划分。图中绿色线就是切割面。(具体是)
第三步(4.3节),层级的切换,比如我们从前一个层级切换到后一个层级,这个过程是很显然的,但是我们层级是由高斯球组成的,层级切换可能会导致颜色突变!所以,这里我们就需要做一个平滑高斯球属性的工作,这个平滑过程也很简单,在切换的过程中,做几组父节点和子节点之间,高斯属性的插值,无论是前一个到后一个
还是相反过程。到这里,我们就完成了高斯模型的LoD过程!
- 一个
值对应一个切割面!切割面负责lod过程中高斯chunk的划分,chunk的高斯属性是基于叶子节点定义的。而插值则负责lod过程中高斯chunk变化的平滑性。
可以说,LoD是一个非常复杂的过程,我们一般训练高斯是直接得到一个高斯模型,但是LoD中一个层级或者尺度就是一个高斯模型,好消息是:这些层级之间是通过高斯球的chunk连接起来的,并且计算过程可微,所以,我们可以粗暴的直接来训练他们!
第四步(第五节),LoD的优化是在给定中的,也就是优化过程中,在这个粒度范围内进行了不同层级切换,最后,每一层的高斯属性都经过了优化。
第五步(第六节),训练策略,针对大规模的数据(比如万张街景图片),首先需要对图像进行去模糊、去动态物体或者人的操作,再接着跑sfm过程。然后第二步做一个粗模也就是sfm初始化,以及外层包裹一个天空盒作为后续模型的背景,再完成地理层面区块的划分,第三步,开始各个区块的训练,第四步,完成训练以后,拼合各个区块。
注意:本文的侧重点在于高斯模型的LoD过程,适用于大场景建模,因为小场景并没有太大的计算成本,另外,大场景重建都是基于场景空间位置分块训练最后合并的,本文分块方法是沿用了之前的按照空间位置均匀分成方形区块,这与25年后续的工作中的新分块方法解决伪影问题相比还是差一些的。作者也提到了出现的伪影问题不在本文讨论范围内。
4 HIERARCHICAL LOD FOR 3D GAUSSIAN SPLATTING
建议先看4.4节。
在处理大规模场景时,细节等级(LOD)方案对高效渲染海量内容至关重要。我们的目标是构建一个层次结构,以表示原始3DGS优化生成的基元。遵循图形学传统LOD方法,我们的步骤是:
4.1节)构建基于gaussian chunk的BVH树(比如多个高斯球为一个chunk)
- 假设单个高斯球为叶子节点,那么gaussian chunk就是中间节点;
- 我们需要基于叶子节点的已知高斯属性,来分析中间节点的高斯属性;
4.2节)使用高效确定层次切割的策略,平衡质量与速度
4.3节)实现层级间平滑过渡。
4.1 Hierarchy gaussian Generation-高斯球的融合
首先我们为每个块创建基于树的层次结构,包含内部节点和叶节点。每个节点关联一个3D高斯分布,该分布要么来自原始优化的叶节点,要么是合并后的内部节点。对中间节点的要求是:1) 保持与叶节点相同的快速光栅化流程;2) 尽可能准确地表示子节点的外观。因此,我们需要定义具有3DGS图元所有属性的中间节点,包括均值 μ(位置)、协方差 Σ、SH系数和不透明度(见第3节)。
接下来,我们讨论如何具体定义中间节点的高斯属性!
1.均值 μ和协方差 Σ(包含了尺度s)
2.SH系数
类似地,我们使用相同权重的加权平均合并SH系数:
3.关于权重w
这里的权重是假设各向同性的情况下估计的!
那么,最终权重最终变成不透明度与表面积的求婚:
4.opacity
若场景中的高斯分布不满足各向同性假设,我们将在5.1节描述额外措施以提升此类情况下高LOD层级的质量。
5.基于chunk构建BVH树
给定一组3DGS图元,自上而下为其构建轴对齐包围盒(AABB)层次包围体(BVH)。
a)初始AABB包围所有高斯图元(使用其存储尺寸的3倍以覆盖范围,遵循[Kerbl et al. 2023]的截断规则),作为BVH的根节点,接下来生成子节点。
b)递归地对当前节点执行二分中位数分割:将组内所有高斯的均值投影到包围盒最长轴上,然后根据投影值与所有投影中位数的相对位置分配图元。
c)生成的BVH树确保每个内部节点的子节点在空间上紧凑。最后,我们从叶节点开始递归向上合并,计算中间节点的高斯分布。
4.2 层次切割选择-高斯chunk的切割条件
在4.1中,我们构造了gaussian chunk的BVH树,接下来,我们随着视角来完成lod的过程,核心是根据视角来决定显示哪些chunk。
假设给定3DGS模型的层次树结构及视角 V,我们通过选择树中的切割面来最大化渲染性能,同时保持视觉质量。
a)首先,定义节点 n 的粒度,也就是单个chunk的粒度
节点 n 的粒度ϵ(n) 定义为当前视角下其投影到屏幕的尺寸(图3(a)),即我们使用节点包含的叶节点高斯分布包围盒的最大维度计算投影尺寸。
- 叶节点的高斯分布包围盒:每个叶节点代表一个3D高斯分布(例如椭球体),其空间范围通常用轴对齐包围盒(AABB)表示。这个包围盒是包含该高斯分布所有点的最小长方体。
- 节点包含的叶节点集合:层次树中的非叶节点下面所有的子节点的集合,其实就是一个chunk中的所有高斯球。
- 最大维度的计算:对节点关联的所有叶节点的高斯包围盒,分别计算它们的三维尺寸(宽度、高度、深度)。取这些包围盒在三个维度(X/Y/Z轴)上的最大值,作为该节点的“最大维度”。例如,若某节点的叶节点包围盒尺寸为
(2,3,5)
和(1,4,4)
,则最大维度为max(2,3,5,1,4,4)=5
。
b)切割面的确定
通过识别包围盒投影尺寸是否小于目标粒度 (如5像素)的节点实现,也即节点的投影粒度ε(n) ≤ 目标粒度
。根据层次节点的生成逻辑,父节点的AABB永远不会比其子节点更小,这使得我们能够在线性时间(或大规模并行场景下每节点常数时间)内找到合适切割面:
若节点 n 满足粒度条件而其父节点不满足,则 n 被选中加入切割面(图3(b)绿色曲线)。此逻辑确保切割面仅包含所有子节点或其父节点之一。
可以说,一个值对应一个切割面!切割面负责高斯chunk的划分。
c)举个🌰,本文太枯燥了,所以放了点你们想看的😇
瞧这位小姐姐,现在就假设这张图片是一个gaussian chunk渲染的!并且假设我们当前这个正方形窗口的边就是设定的目标粒度,那么我们就认为当前这个gaussian chunk的粒度和目标粒度刚刚合适(节点 n 满足粒度条件),现在如果再放大点呢,也就是如果再上一层的父节点呢?放大的依据前面写了(根据层次节点的生成逻辑,父节点的AABB永远不会比其子节点更小)
放大以后:
坏了,只能看脸了。。。看不到身材了(节点 n 满足粒度条件而其父节点不满足),也就是说,如果我们固定不变(注意虽然是拿图片举例,但是size可是把他们定死的),这里更大的gaussian chunk盛不下了!那可不就是要换一个小粒度的gaussian chunk才好?也就是节点。这就是切割面判断的逻辑。
d)来了!LoD
这个目标粒度是关键,因为我们建立好了BVH树,可以说每一个节点的粒度都是确定不变的,故而,若
变大,则当前chunk的粒度值就太小了,不满足切割面条件(若节点 n 满足粒度条件而其父节点不满足),那么就需要一直往父节点方向回溯,直到满足切割条件。此时,满足条件的chunk粒度相比于
变大之前的粒度,显然是增大了。
也就是说,相机位置越远,满足切割条件的节点越少,从而chunk的粒度随之增大!场景看起来越模糊。 相机位置越近,chunk的粒度随之减小,场景看起来越精细!(需要从代码中求证)
以这只🐰为例,从左到右,🐰显示的粒度越来越大,越来越模糊,这便是这只🐰LoD的变化过程。
4.3LoD切换的平滑过渡
层级渲染的关键在于实现层级间的平滑过渡。在前面,我们重现了lod过程,看起来似乎该到完结的时候了,但是,问题还没有彻底结束。
0)节点的插值
现在我们考虑视觉效果,再次思考一下lod,当变化时,chunk的粒度ϵ(n)因为需要满足切割面条件而随着
一起变化,这是没有问题的,但是模型渲染出来的颜色、不透明度等就会因为chunk的变化而产生突变,这在渲染的图片层面是很难看的,随着拉近拉远一层一层颜色突变。
本文的解决办法是进行属性的插值! 当变化时,chunk的粒度ϵ(n)因为需要满足切割面条件而随着
一起变化,那么在产生这个变化的过程中,我们把当前chunk的高斯属性变成临时的、介于父节点和子节点之间的一组插值,这样来做到相对平滑的过渡。如图:这是一层一层慢慢插值过渡到位的
接下来,我们考虑每一个高斯属性的插值计算问题:插值权重通过计算切割面中节点 n 的粒度 ϵ(n)及其父节点 p 的粒度 ϵ(p) 确定:
a)位置、颜色和球谐系数可直接线性插值。
b)协方差(包含尺度)矩阵插值
我们发现分别插值缩放与旋转比直接插值协方差矩阵效果更好(即使使用线性插值而非更耗时的“球面线性插值”)。但高斯分布可能因旋转或缩放差异而具有相同形状(协方差)。例如,沿 xx 轴缩放 s 倍的高斯与沿 y 轴缩放 s 倍后绕 z 轴旋转90°的高斯形状相同(图4(a))。若直接插值属性会导致视觉上不自然的旋转。
为避免此问题,在层次生成时我们执行方向匹配:从根节点开始,通过穷举搜索递归调整子节点高斯的轴向,最小化子节点与父节点的相对旋转。若采用非穷举方法(如特征值匹配),仍会出现不必要的旋转。
c)不透明度插值
需特殊处理。在从父节点切换到子节点的过渡开始时,子节点(注意不是叶节点)的其他属性与父节点完全一致,其实就是子chunk和父chunk,随后逐步插值至各自独立属性(图4(b))。但需调整子节点的衰减值,使得重叠高斯的混合结果在过渡开始时与父节点一致。
我们需要为所有子节点求解混合权重 α′,使得过渡开始时子节点的混合贡献等于父节点。以两个子节点为例,过渡前父节点的混合颜色为 (式1得到):
需满足:
5 OPTIMIZING AND COMPACTING THE HIERARCHY
第四节主要介绍了通过构建BVH树实现3DGS的LoD过程。这一节,我们为BVH树构建梯度传播机制。并介绍一个额外的层次压缩步骤。
传统的图形学LOD方法用于在远距离观察时呈现场景的简化版本,如图6所示。我们的目标粒度通过投影屏幕区域(即节点n的粒度ε(n))来实现这一效果。
5.1 Optimizing the Hierarchy
1.层次结构的优化与实现
我们自上而下构建的层次结构具有良好的性能表现(见表2)。中间节点(父节点)和叶节点(子节点)本质都是3D高斯,因此可以用相同方式渲染和优化。因此我们能够通过优化中间节点来提升其视觉表现质量。这引发了一个关键问题:如何在不同的尺度(由切割面选择的、从粗到细的不同细节层级(LOD levels))之间进行此类优化?
如图,细粒度b到粗粒度c之间,一部分高频信息丢失了
2.梯度传播与多层级优化
为了实现节点间的同步优化,梯度需要能够通过插值权重和公式12中的α'表达式进行传播。通过对层次结构的多个层级进行优化,我们处理了比原始3DGS更复杂的场景:由于插值的存在,优化较高LOD层级可能会影响叶节点的质量。为避免这一问题,我们在优化过程中保持叶节点不变。
值得注意的是,如近期研究[Yu et al. 2023]所指出的,原始3DGS方法未能妥善处理抗锯齿问题。由于层次结构在不同尺度上运作,正确的抗锯齿处理至关重要。因此,我们采用了Yu等人[2023]提出的EWA滤波解决方案。
3.全分辨率优化策略
与降采样不同,我们在优化过程中始终采用全分辨率渲染,仅随机选择目标粒度。这种方法能够在保留视觉细节的同时,实现对多种不同切割面节点的优化。在资源受限的场景下,这一策略尤为实用——它允许我们实施更激进的LOD策略,同时保持更好的视觉质量。
具体实现上,我们首先加载生成的层次结构,然后通过随机选择一个训练视角和在给定范围内随机选取目标粒度来进行优化。目标范围
与所选训练视角共同决定了相应的切割面选择。为确保对层次结构所有层级的充分采样,我们使用标准随机变量ξ∈[0,1)通过公式
来采样目标粒度。
一个值对应一个切割面!切割面负责lod过程中高斯chunk的划分,chunk的高斯属性是基于叶子节点定义的。而插值则负责lod过程中高斯chunk变化的平滑性。
在此优化过程中,我们同时运用了切割面选择(第4节 一个值对应一个切割面)和插值技术。为了实现子节点与父节点的同步优化并保持平滑切换,必须确保梯度能够正确传播至层次结构的两个层级,从而同时对子节点和父节点进行优化。
5.2Compacting the Hierarchy
该层次结构会带来一定的内存开销。更重要的是,为了优化层次结构本身,我们需要避免父节点尺寸仅略大于子节点的情况。否则,这类节点在训练过程中可能很少被选中,导致无法充分优化。为解决这个问题,我们对生成的树结构进行稀疏化处理。
首先,我们将所有叶节点(即3DGS优化输出的原始节点)标记为相关节点,这意味着它们不会被移除。接着,我们根据第4.2节的方法,在所有训练视角下针对最小目标粒度τ_min = 3像素(由于低通滤波,这是3DGS图元的最小尺寸)计算树中切割面的并集(一张图对应一个切割面)。然后,我们找到这个并集中最底层的节点,这些节点构成了一个新的切割面。这些节点被视为在选定粒度下具有最高细节的相关节点。位于这些节点与已标记节点之间的所有节点将被移除。相当于些节点的子节点直接就是叶节点,删除了冗余的中间节点
随后,我们将目标粒度提高2倍,并重复上述过程,直到达到τ_max(图像分辨率的一半)为止。需要注意的是,此过程可能产生具有K个子节点的节点,也就是含有k个子chunk,此时公式12可推广为:
6 LARGE SCENE TRAINING
6.1 粗初始化与区块划分
首先处理整个数据集的相机参数:
为保障所有区块训练一致性,需为后续步骤提供基础框架和天空盒。通过全场景极粗粒度优化实现:基于现有SfM点启动默认3DGS优化,并添加辅助天空盒(见6.2节)。此步骤禁用致密化且不优化图元位置(因SfM点位置已合理)。该粗模型为区块外场景背景提供基础支持。若SfM点存储超出(V-)RAM容量(超大规模场景),粗优化可分步执行并暂存中间结果至磁盘。
区块划分需确保常见实体(车辆、建筑、纪念碑等)具有充足上下文。每个区块的相机选择标准:位于区块边界内,或位于2倍边界范围内且区块内包含超过50个SfM点。注意,这个区块和前面第四节的区块不一样,这里是根据大场景的地理空间位置划分区块。
6.2 区块级训练
各区块独立训练,结果用于构建区块层次结构(第4章),随后执行优化与整合(6.3节)。大场景区块与原始3DGS数据集存在显著差异:场景范围远超Mip-NeRF 360[Barron 2022]等小场景;采集密度更低且非"以物体为中心"。这导致光线空间覆盖不均[Kopanas 2023],优化难度增加。数据还包含需剔除的动态元素(曝光变化、行人、车辆等)。
定义包围场景的天空盒:在10倍场景直径的球面上分布100,000个3DGS图元。加载场景粗优化结果用于区块外内容渲染,确保各区块天空表现一致。区块内训练采用改进版3DGS优化[Kerbl 2023]与正确抗锯齿[Yu 2023],区块外粗环境与天空盒仅临时优化透明度及SH系数。
原始3DGS基于屏幕空间位置梯度均值决策致密化,在无界场景中存在两大问题:1) 难以抑制已达细节要求的图元致密化 2) 稀疏相机采集导致整体致密化倾向降低。我们改为采用梯度最大值替代均值作为致密化依据。
针对城市驾驶等稀疏采集场景,通过单目深度预测(基于SfM点缩放调整)优化正则化,显著提升道路等区域质量(详见第8章与附录C)。
6.3 区块整合与渲染
各区块初始化数据:COLMAP区块优化SfM点(7.2节) + 邻接区块框架内的3D高斯。因此区块关联高斯可能位于其物理边界外。整合阶段将距离其他区块更近的"外溢"图元删除,并构建含全局根节点的整体层次结构。
渲染时设定粒度阈值确定切割面,每2帧更新切割面(通过CPU-GPU数据传输添加细节),每100帧执行清理。
7 RESULTS AND EVALUATION
我们在四个捕获的场景中展示了我们的方法:小城市、大城市、校园以及Wayve提供的一个场景。
7.1 Results
效果最佳呈现方式请参见主页补充视频,其中展示了我们在所采集的大规模场景中实时漫游的能力。视频中展示的路径覆盖了完整的采集区域,直观体现了场景的规模。这一功能在相机密度较高的区域(如多次采集路径交叉处等)表现尤为出色。
我们最小的场景"SmallCity"仅包含单个城市街区。"Campus"和"Wayne"场景覆盖超过一公里范围,"BigCity"场景则达数公里。训练过程中,这些场景分别被划分为4、11、22和46个区块。
每个区块包含200万至800万个叶节点高斯。粗优化、单区块优化和层次优化在NVIDIA V100 GPU(32GB显存)上各需1小时完成,峰值显存占用分别为2-5GB、8-10GB和11-16GB。经过逐区块优化与整合后,层次化场景的磁盘存储大小为6GB、17GB、27GB和88GB,比非层次化3DGS文件大≈68%。
虽然整体质量良好,但仍存在部分伪影。多数视觉伪影源于大规模场景采集的稀疏性——与传统辐射场采集不同,场景中任意点仅被少量相机观测到。其余伪影由未完全清除的场景干扰物导致:我们能够移除大多数行驶车辆,但停驻车辆未被正确识别,导致数据不一致和优化异常。开发该问题的完整解决方案不在本文研究范围内(参见第9章及附录A、B)。
7.2 Evaluation
7.3 Ablations
8 结论
本研究首次实现了对千米级街道场景、数万张输入图像的实时渲染新视角合成。核心贡献包括:1)高效的3D高斯层次结构,支持海量场景的平滑细节层次渲染;2)层次结构的可优化性,优化了质量与速度的权衡;3)基于分治策略的区块化算法,通过并行处理独立区块,使得数万图像规模的场景在计算集群上仅需数小时即可完成全流程处理。该系统最重要的突破在于实现了超大规模场景的实时渲染,使普通用户也能便捷地进行大范围环境采集与导航。
本文章提出的3D高斯层次结构具有广阔的扩展应用前景,可使辐射场成为一流的计算机图形表示方法:该结构可用于构建辐射场的场景图表示,支持动画生成、碰撞检测等功能。当前方案已能大幅降低每帧渲染的高斯数量,从而有效控制资源开销并提升灵活性。通过引入动态LOD选择机制替代固定粒度标准,配合基于可见性与距离的截断策略,可在给定资源预算下实现最优质量输出,这些优化方向将留待未来研究实现。
我们的研究结果显示存在部分视觉伪影,其主要源于输入数据本身的局限性:视角覆盖不全、校准误差以及动态干扰物(如行人、车辆,特别是采集过程中临时停靠的汽车等)。虽然辐射场技术可能有助于缓解部分问题,但这些问题的根本解决已超出本方法的范畴。在当前数据集中,辐射场的视角外推能力仍受限于采集覆盖范围,但未来结合高质量先验信息[Warburg* 2023]有望显著提升自由视角导航的流畅度。
reference
https://github.com/graphdeco-inria/hierarchical-3d-gaussians?tab=readme-ov-file
解读论文《A Hierarchical 3D Gaussian Representation for Real-Time Rendering of Very Large Datasets》-优快云博客