Reducing the Memory Footprint of 3D Gaussian Splatting
减少3DGS的内存占用

目录
Project_Page

核心目的
减少3DGS的内存占用, 磁盘占用
问题定位
- 基元冗余: 自适应密度控制导致部分区域基于密度过高
- SH波段浪费: 所有基元固定分配3个SH波段, 然后很多漫反射基元只需要RGB表示, 没有反光
- 精度浪费: 所有属性均用32位浮点数存储, 非关键属性(透明度,旋转)无需高精度
解决方案
尺度与分辨率感知的冗余基元剔除
基元冗余与否依赖 “场景尺度 + 观测分辨率”,而非单纯看透明度
基于梯度幅值判断是否添加基元,导致平滑区域生成大量重叠基元
- 计算空间冗余分数: 基元的冗余性, 取决于在观测视角下的"有效贡献范围", 而非绝对分数
- 对每个基元,基于其协方差(椭球形状)计算等效球半径,半径大小关联到 “最近观测视角的像素足迹”—— 确保剪枝不影响任何视角的渲染细节;
- 用k 近邻(k-NN)搜索找到该基元周围的相邻基元,通过 “球 - 椭球相交测试” 统计重叠基元数量;
- 定义冗余分数:重叠基元数越多,冗余分数越高;细节区的基元因分布稀疏,冗余分数低。
- 设置自适应剪枝阈值
- 双阶段筛选剔除
- 剔除冗余分数高的基元, 解决重叠冗余的问题
- 剔除透明度过低的基元, 解决无效基元的问题
自适应球谐函数(SH)波段调整
SH仅用于视角相关效果, 漫反射基元仅使用RGB表示
- 迭代15000次后, 3dgs的稠密过程停止, 基元分布和属性趋于稳定, 调整SH波段不会影响后续优化
- 对于每个基元, 统计其在多个观测视角下的RGB颜色方差, 若方差低于阈值, 说明颜色稳定, 仅需RGB表示
- 对于非漫反射基元, 分别用1,2,3个波段渲染, 计算与全波段渲染的颜色差异 ,小于阈值, 降低波段, 直到超过阈值
- 优化属性字段
- 0波段: 仅使用RGB, 使用3个浮点数, 省去45个SH浮点数, 内存节省76%
- 1,2个波段: 存储相应数量的SH系数, 比3波段分别节省50%, 25%的SH内存
基于码本的量化与半浮点表示
非关键属性对精度不敏感,可通过聚类量化压缩
原始3DGS的所有属性都用32位浮点数存储, 不同属性对精度的敏感度差异极大
- 敏感属性:基元位置 —— 精度下降会导致场景几何结构变形,渲染质量显著退化
- 不敏感属性:透明度、尺度、旋转、SH 系数 —— 这些属性对微小精度偏差不敏感,用更低精度存储完全不影响效果
解决方法
- 对于敏感属性(基元位置): 32位->16位(减少50%)
- 不敏感属性: 使用码本聚类量化(每个属性类别单独构建码本)
- 用 “聚类中心 + 索引” 替代原始属性值,大幅降低存储开销。
- 构建码本:对所有不敏感属性的数值,执行 K-means 聚类(K=256),得到 256 个聚类中心,存储为码本
- 属性量化:将每个属性值替换为距离最近的聚类中心索引(仅需 1 字节存储,而 32 位浮点数需 4 字节)
- 推理解码:渲染时,用索引查表得到聚类中心值,完成实时解码