【高斯泼溅】3DGS城市模型从“硬盘杀手”到“轻盈舞者”?看我们如何实现14倍压缩

如何把一座城市渲染出来?

三年前,NeRF给出的答案是**"隐式网络+无尽采样"**,渲染的算力黑洞让人望而却步;如今,3D Gaussian Splatting(3DGS)用"显式高斯椭球"消除了渲染阶段对网络的依赖,却悄悄把问题翻了个面------模型体量大成了新瓶颈。

3DGS模型与椭球分布

当场景从"桌面摆件"扩展到"十字街头"再到"万亩城区",数据像吹气球一样膨胀:数千万椭球、上百GB模型文件,训练时卡爆GPU,加载时撑爆显卡,传输时堵爆带宽,保存时挤占硬盘

"怎样在保真的同时变得更轻",本文将主要分析3DGS模型潜在的冗余椭球问题及探讨相应的解决方法。

冗余椭球与训练缓慢

当我们训练一个3DGS模型时,总会有一个疑问:这个场景到底需要多少椭球,才能既保证渲染质量又保证训练速度?

01椭球数量的增长

3DGS原始实现并没有设置一个固定的数量上限,而是靠着人为设置的阈值在指定训练次数后停止增长椭球。在典型的小区域环绕场景中椭球可以增长到500~600万左右。这个数量一般远超想要表达的主要兴趣区域所需。

图中在仅使用234万椭球的情况下即可达到570万的渲染指标。

原生算法和简化效果对比

02训练速度的降低

随着椭球数量的增长,随之而来的是显卡显存的占用和计算压力的提升,带来的直接影响便是训练时长的显著增加。3DGS原始实现训练常用的小场景数据集时间平均在20~40分钟之间,而且我们可以显著的观察到训练速度是随着点数增长而相应降低的。

如何用更少的椭球数量实现同等的渲染质量是一个必须研究的方向。识别冗余椭球并删除,是一个显而易见的可行方案。

主流删除方案:直接法与剪枝法

直接法剪枝法目的都是删除冗余点,但他们之间最主要的区别是:删除依据是可学习的还是人工设计的。

01直接法

直接法一般不参与训练中的梯度计算,仅在训练中/后直接计算每个椭球的重要性分数,逐步/一次删除至设定的点数。

这方面的代表有LightGaussianTamingGSMini-splatting等论文。重要性分数的计算共有步骤有:

  1. 输入训练视角的所有图片和位姿
  2. 遍历图片,每张图片计算与其有关椭球的重要性分数(不透明度、命中像素次数等)
  3. 累加所有视角,计算出最终每个椭球的重要性分数
  4. 根据需要,删除低分数椭球

LightGaussian重要性计算

02剪枝法

剪枝法认为直接限制椭球数量上限难以满足渲染质量的要求,因此一般是在训练过程中识别并逐渐删除对渲染质量贡献较小的冗余高斯。

剪枝法的核心思想是为每个椭球增加一个可训练的参数 ,用于表示其对渲染的贡献程度,从而可以依据该参数直接进行删除。该方法的相关工作有CompactGS、MaskGS、GaussianSpa等。

MaskGS流程图,M为可学习参数

与直接法重要性得分计算类似,剪枝法需要构建一个可以微分的重要性得分。在上述工作中,主要与椭球的不透明度、形状、透射率等参数相关联,依托椭球本身的属性来构建重要性。

比如CompactGS方法思路较为直接,直接构建mask掩膜,为每个椭球分配一个二值变量(0或1),其中1表示渲染,0表示删除。虽然二值操作本身不可导,不能被优化,但是可以通过构造可导的间接变量,使得梯度可以传导至掩码。

CompactGS掩码公式

从下表可以看出:

  • 原始3DGS中确实存在较多冗余椭球
  • 两类方法均可以在较大的压缩比 下实现接近甚至超出的质量
  • 删除椭球后训练时间 有不同程度降低(GaussianSPA训练轮数更多)

建模质量与数量对比

两种方法的适用情况也不尽相同,直接法 的重要性分数一般可以在训练后算出剪枝法 一般需要伴随一定量的训练步骤 。如果是已经训练完的原始模型 ,最好使用直接法删除椭球,以降低可能的额外训练时间。

Mapmost 高斯泼溅建模平台

结合学术界压缩方法,我们在Mapmost高斯泼溅建模平台综合并改进了一套模型轻量化算法,可以在保证细节的情况下,最高达到14倍的压缩比。

图中14倍压缩率情况下,模型体积从170MB降低至16MB,文字细节和屋顶轮廓仍然保持较高还原度。这样不仅减小了存储占用,同时也有利于建模和渲染性能的提升。

Mapmost高斯泼溅建模平台 正式开放体验!让专业级城市三维建模,从此没有门槛。上传航拍图,即可获得一个高精度、轻量化、即拿即用的3DGS模型。

登录Mapmost 3DGS Builder体验版 (studio.mapmost.com/3dgs),立即开始建模!

申请试用,请至Mapmost官网联系客服

相关推荐
做科研的周师兄13 小时前
【MATLAB 实战】|多波段栅格数据提取部分波段均值——批量处理(NoData 修正 + 地理信息保真)_后附完整代码
前端·算法·机器学习·matlab·均值算法·分类·数据挖掘
da_vinci_x13 小时前
图标量产:从“手绘地狱”到“风格克隆”?Style Reference 的工业化实战
前端·游戏·ui·prompt·aigc·设计师·游戏美术
利刃大大13 小时前
【ES6】变量与常量 && 模板字符串 && 对象 && 解构赋值 && 箭头函数 && 数组 && 扩展运算符 && Promise/Await/Async
开发语言·前端·javascript·es6
天若有情67313 小时前
ES6 模块与 CommonJS 的区别详解
前端·javascript·es6
大猫会长13 小时前
postgreSQL中,RLS的using与with check
开发语言·前端·javascript
慧一居士14 小时前
vite.config.ts 配置使用说明,完整配置示例
前端
wusp199414 小时前
nuxt3模块化API架构
前端·javascript·nuxt3
沛沛老爹14 小时前
Web开发者进阶AI:企业级Agent Skills安全策略与合规架构实战
前端·人工智能·架构
遗憾随她而去.14 小时前
前端首屏加载时间的度量:FCP、LCP等指标的规范理解
前端
CDwenhuohuo14 小时前
安卓app巨坑 nvue后者页面要写画笔绘制功能nvue canvas
前端·javascript·vue.js