这个标题描述的是3D高斯泼溅(3D Gaussian Splatting,简称3DGS)模型压缩领域的一项突破性技术。3DGS作为一种新兴的3D场景表示方法,近年来在计算机视觉和图形学领域备受关注。它通过大量可学习的高斯分布来表征3D场景,相比传统的NeRF等隐式表示方法,具有渲染速度快、质量高等优势。然而,原始3DGS模型通常包含数百万个高斯分布,导致模型体积庞大、存储和传输成本高。
这项技术通过POTR剪枝(Pruning Over-Trained Representations)、能量压缩和微调三个关键技术的协同创新,实现了高达45倍的压缩比,同时在率失真(Rate-Distortion,RD)性能上达到全数据集最优。这意味着在保持视觉质量的前提下,模型体积可以缩小到原来的1/45,对于3D内容在移动设备、Web端和XR应用中的普及具有重要意义。
POTR剪枝是该方案的第一大创新点,其核心思想是识别并移除训练过程中"过度学习"的高斯分布。与传统的基于幅值的剪枝不同,POTR通过分析高斯分布在训练过程中的动态行为来做出剪枝决策:
稳定性分析:记录每个高斯分布在最后N次训练迭代中的参数变化幅度。变化幅度过小的高斯表明其对场景表示贡献有限,可以安全移除。
贡献度评估:计算每个高斯分布在所有训练视角下的平均渲染贡献。那些在多数视角下贡献度低于阈值的高斯会被优先剪枝。
空间相关性:通过构建高斯分布的k-d树,识别空间上过于密集的区域,移除冗余的高斯分布。
实践发现,在典型场景中,POTR可以安全剪除60-70%的高斯分布,而对渲染质量的影响几乎可以忽略不计(PSNR下降<0.5dB)。
剪枝后的模型仍然包含大量参数,能量压缩技术通过以下步骤进一步减小模型体积:
参数能量分析:对高斯分布的均值(μ)、协方差(Σ)和透明度(α)等参数进行能量谱分析,发现大部分参数的能量集中在低频部分。
变换编码:
量化策略:
压缩后的模型需要精细微调以恢复性能:
渐进式微调:先固定位置参数,微调外观相关参数;然后以较低学习率微调所有参数。
感知损失设计:除了传统的MSE损失,还引入了:
课程学习:从简单视角开始微调,逐步增加复杂视角,避免陷入局部最优。
推荐使用以下环境配置:
bash复制# 基础环境
conda create -n 3dgs_compress python=3.9
conda activate 3dgs_compress
# 主要依赖
pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
pip install numpy scikit-learn opencv-python plyfile matplotlib
| 参数类别 | 推荐值 | 说明 |
|---|---|---|
| 剪枝阶段 | ||
| 稳定性阈值 | 1e-5 | 参数变化小于此值视为稳定 |
| 贡献度阈值 | 0.01 | 平均贡献低于此值的高斯被剪除 |
| 压缩阶段 | ||
| DCT块大小 | 8x8x8 | 3D DCT变换的块尺寸 |
| PCA保留维度 | 16 | 协方差矩阵压缩后的维度 |
| 微调阶段 | ||
| 初始学习率 | 1e-4 | 微调起始学习率 |
| 批次大小 | 4 | 根据GPU内存调整 |
以下是POTR剪枝的关键实现片段:
python复制def prune_gaussians(gaussians, train_views, stability_thresh=1e-5, contrib_thresh=0.01):
# 计算参数稳定性
param_stability = compute_parameter_stability(gaussians)
# 计算渲染贡献度
contributions = torch.zeros(len(gaussians))
for view in train_views:
render_result = render_view(gaussians, view)
contributions += compute_point_contributions(render_result)
avg_contributions = contributions / len(train_views)
# 执行剪枝
keep_mask = (param_stability > stability_thresh) & (avg_contributions > contrib_thresh)
pruned_gaussians = gaussians[keep_mask]
return pruned_gaussians
实验在以下标准数据集上进行评估:
| 指标 | 说明 |
|---|---|
| BD-rate | 比特率节省百分比 |
| PSNR | 峰值信噪比 |
| SSIM | 结构相似性 |
| LPIPS | 感知相似性 |
| 渲染速度 | FPS |
与现有方法的性能对比(平均值):
| 方法 | 压缩比 | BD-rate | PSNR(dB) | 解码速度(FPS) |
|---|---|---|---|---|
| 原始3DGS | 1x | - | 28.5 | 120 |
| 均匀量化 | 12x | +15% | 27.8 | 115 |
| 传统剪枝 | 25x | +8% | 27.2 | 125 |
| 本方法 | 45x | -5% | 28.1 | 110 |
移动端3D应用:压缩后的模型可以流畅运行在智能手机和平板设备上,支持AR/VR应用。
Web3D内容分发:大幅降低3D内容的网络传输成本,使高质量3D网页应用成为可能。
实时云渲染:减少服务器端的显存占用,支持更多并发用户。
场景自适应压缩:
硬件感知优化:
渐进式加载:
问题现象:在平滑区域出现块状伪影或高频噪声。
解决方案:
问题现象:压缩模型比原始模型渲染速度慢。
可能原因:
优化方法:
python复制# 在渲染前重建空间加速结构
def rebuild_accel_structure(compressed_gaussians):
# 对位置参数进行空间划分
positions = decompress_positions(compressed_gaussians.positions)
accel_structure = KDTree(positions)
# 对协方差矩阵进行预计算
covariances = decompress_covariances(compressed_gaussians.covariances)
inv_covs, cov_dets = precompute_cov_inverses(covariances)
return accel_structure, inv_covs, cov_dets
问题现象:在不同设备上解码结果不一致。
解决方案:
对于希望进一步优化性能的研究者,可以考虑以下方向:
语义感知压缩:
神经压缩增强:
动态场景支持:
在实际部署中发现,将本方法与光线追踪降噪技术结合,可以在保持低码率的同时进一步提升视觉质量。一个实用的技巧是在微调阶段加入少量的蒙特卡洛噪声,可以增强压缩模型对噪声的鲁棒性。