【三维重建】Octree-GS:基于LOD的3DGS实时渲染(TPAMI2025)
文章目录
- 一、 Scaffold-GS
- *摘要
- 二、LOD-structured Anchors
- 三、自适应高斯控制
- 四、渐进式训练
- 五、外观嵌入(Appearance Embedding)
标题:<Octree-GS: Towards Consistent Real-time Rendering with LOD-Structured 3D Gaussians>
来源:上海交通大学;上海AI lab
主页: https://city-super.github.io/octree-gs/
一、 Scaffold-GS
为高效管理高斯基元,Scaffold-GS [3]引入了anchor锚点,每个锚点都关联一个(描述局部结构的)特征。从每个锚点出发,系统会生成 kkk 个神经高斯函数,其生成方式如下:
xvx_vxv表示锚点位置,{µiµ_iµi}代表第 iii 个神经高斯的位置,lvl_vlv是控制预测偏移量OiO_iOi的缩放因子。此外,不透明度、比例、旋转角度和颜色均通过对应的MLP网络,从锚点特征中解码。例如,不透明度的计算公式为:
f^v\hat{f}_vf^v 、∆vc∆_{vc}∆vc和 d~vc\tilde{d}_{vc}d~vc 分别对应锚点特征、relative viewing distance 和相机方向。当这些属性被预测后,神经高斯分布将被输入基于tiles的光栅化器进行图像渲染。稠密化阶段,Scaffold-GS将锚点视为基础图元:当神经高斯梯度超过特定阈值时会生成新锚点,而平均透明度较低的锚点则会被移除。相较于传统3D-GS模型,这种结构化表征显著提升了系统的鲁棒性和存储效率。
*摘要
Octree-GS通过将锚点分层组织成八叉树结构,从多视角图像中学习神经场景。 每个锚点可生成不同类型的高斯基元,例如显式高斯[5][15]和神经高斯[3]。通过引入八叉树结构——该结构天然为重建和渲染过程引入LOD层级——OctreeGS能够动态选择对应LOD层级的锚点,从而确保训练与渲染过程始终高效运行,使其能快速适应复杂或大规模场景。
二、LOD-structured Anchors
1.锚点定义:按照Scaffold-GS ,引入anchor锚点(位于不同尺寸的稀疏均匀体素网格中心)来管理高斯基元。LOD 000 定义为最粗略层,随着LOD层级提升,能捕捉到更多细节。LOD设计具有累积性:在LOD K层级渲染的图像,rasterize
all Gaussian primitives from LOD 000 to KKK。此外,每个anchor都会被赋予LOD偏置∆L以考虑局部复杂度,并关联kkk个高斯基元。更进一步,我们的框架可扩展支持多种类型的高斯基元,包括显式定义的具有可学习的特定属性(如2DGS或3DGS),也可从对应anchor解码生成神经高斯。
2.锚点初始化(稀疏SfM点P):首先,根据观测距离范围确定八叉树层级KKK:首先计算每个相机中心 iii 与SfM点 jjj 之间的距离dijd_{ij}dij,并定义第rdr_drd个最大距离dmaxd_{max}dmax,以及第rdr_drd个最小距离dmind_{min}dmin(rdr_drd用于剔除异常,实验中通常为0.999)。KKK的计算公式:
通过对应尺寸,对各层anchor进行体素化处理:
给定LOD 000对应最粗层的基础体素尺寸δδδ,以及LOD LLL中初始锚点的VLV_LVL。锚点属性及其对应的高斯基元也已初始化
3)锚点选择:为在实时渲染与高质量效果之间取得平衡,动态选取可见anchor。理想情况下,anchor应根据投影高斯的像素覆盖范围,从K个LOD层级中动态获取。实际应用中,我们简化为使用观测距离dijd_{ij}dij,因其在相机内参保持一致时与覆盖范围成正比。当内参发生变化时,通过应用焦距缩放因子s来等效调整距离。但研究发现,仅基于观测距离估算LOD层级存在不足,因此我们为每个anchor设置可学习的LOD偏置∆L∆L∆L作为残差项,这能有效在推理过程中用更一致的细节补充高频区域——例如图13所示物体的锐利边缘。具体而言, 对于给定视角iii,任意锚点jjj的对应LOD层级估算为:
dijd_{ij}dij表示视点iii与锚点jjj之间的距离。Φ()Φ()Φ()是clamp函数,用于将LOD level L∗ijL∗ijL∗ij的分数限制在[0,K−1][0,K−1][0,K−1]范围内。渐进式LOD:Octree-GS采用累积的LOD level而非单一LODlevel,进行图像渲染。即当anchor的LOD level Lj≤L^ijL_j≤\hat{L}_{ij}Lj≤L^ij时,将选择该锚点。如图3:迭代评估所有anchor并筛选,其发出的高斯基元会被传递至光栅化器进行渲染。
渲染过程中,为确保不同LOD层级间的平滑过渡且无明显伪影,采用[16][51]不透明度混合技术。通过相邻层级间的分段线性插值处理,有效消除LOD混叠现象。具体除满足条件的anchor外,还会筛选出符合Lj=L^ijL_j=\hat{L}_{ij}Lj=L^ij + 1$的近似anchor,其高斯基元同样会被传递至光栅化器,不透明度则按 Lij∗L_{ij}^*Lij∗− L^ij\hat{L}_{ij}L^ij的比例进行缩放。
三、自适应高斯控制
1) anchor增长:按照原始3DGS,基元的视空间位置梯度作为anchor稠密化的标准。按照scaffoldGS,新anchor在八叉树结构网格的未填充体素中生长(每T次iter后计算生成的高斯基元的平均累积梯度∇g∇g∇g,超过阈值τgτ_gτg被视为有效,并转为新anchor,如果在空体素内的话)。在八叉树结构中,由此产生的问题是:这些新转化的anchor应被赋予哪个LOD层级:
在不同level 添加新anchor, 将具有极高梯度的高斯基元提升至更高level。设置阈值τgL=τg∗2βLτ_g^L = τ_g∗2^{βL}τgL=τg∗2βL (默认τgτ_gτg=0.0002,β=0.2β=0.2β=0.2) 。当∇g>τgL+1∇g>τ_g^L + 1∇g>τgL+1时,处于LLL level的高斯基元提升至L+1L+1L+1 level;若τgL<∇g<τgL+1τ_g^L<∇_g<τ_g^{L + 1}τgL<∇g<τgL+1,则保持原有level不变。
利用梯度作为场景复杂度的线索来调整LOD偏置∆L: anchor的梯度定义为生成的高斯基元的平均梯度,记为∇v∇v∇v。选择∇v>τgL∗0.25∇v>τ_g^L∗0.25∇v>τgL∗0.25的anchor,并将相应的∆L∆L∆L增加一个小量ϵ:∆L=∆L+ϵϵ:∆L=∆L+ϵϵ:∆L=∆L+ϵ(实验确定ϵ= 0.01)。
2)anchor 剪枝:为了消除冗余和无效anchor ,计算TTT次训练迭代中生成的GS的平均不透明度.
漂浮物去除:图4(a)中的floater,源自于anchor在训练视锥体中未被选中和优化。本文引入“view-frequency”指标,即训练视锥中anchor被选中的概率(梯度直接相关)。将其低于τvτ_vτv(可见性阈值)的anchor移除,消除floate并降低存储占用。
四、渐进式训练
所有LOD level同时优化anchor会带来解释分解LOD级别渲染的固有挑战(所有LOD level都尽力渲染三维场景,难以分解)。渐进式训练,首先训练低分辨率层级的anchor上,并在优化过程中逐步激活更高分辨率level,,以补充细节。具体的,在NiN_iNi(表示第iii层分辨率level的训练次数)次迭代后迭代激活高分辨率level,激活前禁用下一level的growth。 设定Ni−1=ωNiN_{i−1}=ωN_iNi−1=ωNi (希望粗粒度锚点在视点移动时仍能有效重建场景,因此投入更多时间学习整体结构。),其中,ω≥1ω≥1ω≥1为增长因子。根据经验,从⌊K/2⌋ level开始训练以平衡视觉质量与渲染效率。
五、外观嵌入(Appearance Embedding)
3D-GS在大规模场景中,会由于相机自动曝光大导致平均训练图像的外观变化,容易产生伪影。本文借鉴了NeRF系列论文[57][58]的研究思路,引入生成式潜在优化(GLO)[59]来生成高斯基元的颜色。具体而言,我们为每个anchor引入可学习的个体外观编码,并将其作为颜色 MLP 的附加输入以解码高斯基元的颜色。这种设计使我们能够有效模拟具有动态外观变化的真实场景。此外,我们还能通过插值处理外观编码来调整环境视觉效果,如图12所示。