当前位置: 首页 > news >正文

【三维重建】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}vcd~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}dminrdr_drd用于剔除异常,实验中通常为0.999)。KKK的计算公式:

在这里插入图片描述
通过对应尺寸,对各层anchor进行体素化处理:

在这里插入图片描述
给定LOD 000对应最粗层的基础体素尺寸δδδ,以及LOD LLL中初始锚点的VLV_LVL。锚点属性及其对应的高斯基元也已初始化

  3)锚点选择为在实时渲染与高质量效果之间取得平衡,动态选取可见anchor。理想情况下,anchor应根据投影高斯的像素覆盖范围,从K个LOD层级中动态获取。实际应用中,我们简化为使用观测距离dijd_{ij}dij,因其在相机内参保持一致时与覆盖范围成正比。当内参发生变化时,通过应用焦距缩放因子s来等效调整距离。但研究发现,仅基于观测距离估算LOD层级存在不足,因此我们为每个anchor设置可学习的LOD偏置∆L∆LL作为残差项,这能有效在推理过程中用更一致的细节补充高频区域——例如图13所示物体的锐利边缘。具体而言, 对于给定视角iii,任意锚点jjj的对应LOD层级估算为

在这里插入图片描述

dijd_{ij}dij表示视点iii与锚点jjj之间的距离。Φ()Φ()Φ()是clamp函数,用于将LOD level L∗ijL∗ijLij的分数限制在[0,K−1][0,K−1][0,K1]范围内。渐进式LOD:Octree-GS采用累积的LOD level而非单一LODlevel,进行图像渲染。即当anchor的LOD level Lj≤L^ijL_j≤\hat{L}_{ij}LjL^ij时,将选择该锚点。如图3:迭代评估所有anchor并筛选,其发出的高斯基元会被传递至光栅化器进行渲染。

在这里插入图片描述

  渲染过程中,为确保不同LOD层级间的平滑过渡且无明显伪影,采用[16][51]不透明度混合技术。通过相邻层级间的分段线性插值处理,有效消除LOD混叠现象。具体除满足条件的anchor外,还会筛选出符合Lj=L^ijL_j=\hat{L}_{ij}Lj=L^ij + 1$的近似anchor,其高斯基元同样会被传递至光栅化器,不透明度则按 Lij∗L_{ij}^*LijL^ij\hat{L}_{ij}L^ij的比例进行缩放。

三、自适应高斯控制

  1) anchor增长:按照原始3DGS,基元的视空间位置梯度作为anchor稠密化的标准。按照scaffoldGS,新anchor在八叉树结构网格的未填充体素中生长(每T次iter后计算生成的高斯基元的平均累积梯度∇g∇gg超过阈值τgτ_gτg被视为有效,并转为新anchor,如果在空体素内的话)。在八叉树结构中,由此产生的问题是:这些新转化的anchor应被赋予哪个LOD层级

在不同level 添加新anchor, 将具有极高梯度的高斯基元提升至更高level。设置阈值τgL=τg∗2βLτ_g^L = τ_g∗2^{βL}τgL=τg2βL (默认τgτ_gτg=0.0002,β=0.2β=0.2β=0.2 。当∇g>τgL+1∇g>τ_g^L + 1g>τ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∇vv。选择∇v>τgL∗0.25∇v>τ_g^L∗0.25v>τgL0.25的anchor,并将相应的∆L∆LL增加一个小量ϵ:∆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_iNi1=ωNi (希望粗粒度锚点在视点移动时仍能有效重建场景,因此投入更多时间学习整体结构。),其中,ω≥1ω≥1ω1为增长因子。根据经验,从⌊K/2⌋ level开始训练以平衡视觉质量与渲染效率。

五、外观嵌入(Appearance Embedding)

  3D-GS在大规模场景中,会由于相机自动曝光大导致平均训练图像的外观变化,容易产生伪影。本文借鉴了NeRF系列论文[57][58]的研究思路,引入生成式潜在优化(GLO)[59]来生成高斯基元的颜色。具体而言,我们为每个anchor引入可学习的个体外观编码,并将其作为颜色 MLP 的附加输入以解码高斯基元的颜色。这种设计使我们能够有效模拟具有动态外观变化的真实场景。此外,我们还能通过插值处理外观编码来调整环境视觉效果,如图12所示。

在这里插入图片描述

  

  

  

  

  

  

http://www.dtcms.com/a/389154.html

相关文章:

  • 《深度拆解3D开放世界游戏中角色攀爬系统与地形碰撞网格动态适配的穿透卡顿复合故障》
  • 数据库mysql连接池:从原理到实践的全面解析
  • # 深入理解栈、栈帧与递归:从迭代与递归归并排序双视角解析
  • Django 完整项目开发:博客系统
  • FPGA部署视觉模型
  • 课后实验实验拓扑:
  • 二阶段 docker 构建
  • React原理二
  • 116.block design 设计中设置的DDR起始地址的作用是什么
  • 报名中|2025 Maple 用户大会
  • 深入解析Channel:数据流动的秘密通道
  • 一键快速发布服务
  • 栈-394.字符串解码-力扣(LeetCode)
  • 【数据库】视图与表的区别:深入理解数据库中的虚拟表
  • 保障货物安全:商贸物流软件的实时追踪与风险预警机制​
  • 第二部分:VTK核心类详解(第23章 vtkInteractor交互器类)
  • 【LeetCode】45. 跳跃游戏 II
  • 【C++进阶】C++11的新特性—右值引用和移动语义
  • AssemblyScript 入门教程(4)AssemblyScript 编译器选项与高级应用指南
  • rust编写web服务09-分页与搜索API
  • 时空预测论文分享:元学习 神经架构搜索 动态稀疏训练 提示未来快照
  • 新服务器安装宝塔,发布前后端分离项目
  • [科普] 零中频发射架构的本振泄露校准技术
  • Linux系统安全加固的8个关键步骤
  • Java--多线程知识(三)
  • Qt QVBarModelMapper详解
  • 【学习】通义DeepResearch之WebWalker-让大模型“深度潜水”网页信息
  • Bsin-PaaS:企业级开源RWA解决方案的技术革新与实践
  • 贪心算法应用:装箱问题(FFD问题)详解
  • GO项目开发规范文档解读