原文链接:https://arxiv.org/abs/2406.15643
代码链接:https://github.com/nullptr81/3dgs-accel
一、学习内容
1.研究背景
3DGS在新视角合成(NVS)中表现优异,但优化过程低效:
存在
1)资源需求高 -----> 预算约束的模型增长
2)模型大小不可控且冗余 -----> 引导式高斯密集化
3)训练时间波动大 -----> 计算优化:反向传播优化
等问题。
2.主要贡献
2.1 预算约束下的优化
提出了一种纯粹建设性的、严格受预算约束的3DGS优化流程,实现了对最终模型大小和资源使用的精确控制
2.2 灵活的引导式稠密化框架
设计了一个基于分数的、可定制的稠密化采样框架,允许根据应用需求(如关注特定区域)引导高斯基元的分布
2.3 显著的训练加速
通过分析和优化训练瓶颈,提出了包括数值等效的(如基于Splat的并行反向传播)和近似的(如批处理SH更新)替代方案,显著加快了训练速度
3.实验方法
核心思想:通过引入可预测的模型增长、基于分数的引导式稠密化、训练加速优化以及使用高不透明度高斯,“驯服”了3DGS,使其成为一种资源高效且高质量的辐射场表示方法
(1) 可预测的模型增长和预算控制
蓝色曲线代表了不同场景下原始3DGS归一化后的实际增长情况
红色虚线 (Our Schedule)代表论文提出的可预测增长计划
为了解决原始3DGS模型大小不可预测且往往过于庞大的问题,研究者们提出了一种可预测的模型增长机制。
通过分析原始方法中高斯基元数量随训练迭代的增长模式,发现其增长速率大致呈现先快后慢的趋势。基于此,设计了一个明确的、平滑的增长计划,该计划遵循一个预设的数学公式,确保高斯基元的总数在训练过程中以一种“纯粹建设性”(只增不减或少量减少)的方式,稳定地增长,并最终精确达到用户预先设定的目标数量,彻底解决了模型大小失控的问题。
(2)基于分数的引导式稠密化
在确定了如何控制模型总规模后,接下来的关键是如何智能地添加这些高斯基元,以在有限的数量内最大化渲染质量。
为此,文章设计了一种基于分数的引导式稠密化策略,流程可参考上图。
该方法不再仅仅依赖于原始方法中的梯度信息,而是综合考虑更多因素。
采样训练视图 --->计算像素显著性 ---> 计算高斯分数 ---> 加权采样与稠密化
具体来说,它会采样部分训练视图,计算每个视图中像素级别的显著性分数(结合了L1损失、图像高频信息,并允许用户定义感兴趣区域ROI)。然后,对于场景中的每一个高斯基元,系统会计算一个综合得分,该得分融合了高斯自身的属性(如梯度、大小、不透明度等)以及它在不同采样视图中对应像素的显著性分数、覆盖范围、混合权重等信息。最后,根据这个综合得分进行加权采样,优先选择得分高的高斯基元进行稠密化(克隆或分裂),从而确保新的高斯基元被添加到对提升整体渲染质量最关键的地方。同时,这种稠密化操作的频率也较原始方法有所降低,给予优化过程更充分的时间来调整高斯参数。
(3)训练加速优化
论文Figure 3a所示,展示了原始3DGS在不同场景下的不同训练阶段单个迭代内部各部分(前向传播forward、反向传播backward、优化器步骤step)的时间消耗,可见反向传播是主要瓶颈。
研究者们对原始3DGS的训练流程进行了优化。最重要的改进是重新设计了反向传播的并行化方案(如论文Figure 3b所示)。原始方法采用按像素并行,易导致多线程对同一高斯梯度进行原子操作而产生冲突和等待。新方法则改为基于投影后的2D高斯(Splat)进行并行化,每个线程(或线程束Warp)负责处理一个或少数几个Splat的梯度计算,并通过高效的Warp内部通信来交换必要的像素状态信息,从而大大减少了冲突,显著加速了反向传播过程。
此外,还包括了对球谐函数(SH)系数采用批处理更新、优化SH加载方式以及使用更快的CUDA核函数计算SSIM损失等其他加速措施。
最后,为了在有限的高斯基元数量下进一步提升模型对不透明表面的表达能力,文章在训练后期引入了高不透明度高斯。通过解除对高斯不透明度值的上限限制,使得单个高斯能够更有效地表示一个区域,这对于在低预算下维持高质量渲染,特别是提升PSNR指标,起到了积极作用。
3.实验结果(部分)
在 Tanks & Temples, Deep Blending, MipNeRF-360 等标准数据集上进行评估 。
评价指标包括
质量指标 :PSNR, SSIM, LPIPS
和
资源效率指标:训练时间 Train time, 最终高斯数量 #G, 峰值高斯数量 Peak #G
二、思考
泛读完这篇论文,还是有一些比较疑惑的地方:比如说基于分数的稠密化策略引入了较多超参数和权重,这些参数是否需要针对不同场景进行繁琐的调整?未来是否可以实现自适应的权重或预算分配?此外,虽然文章提到了‘纯粹建设性’的优势,但试想一下,完全不进行任何后期的高斯‘修剪’这种方法在所有情况下都是最优的吗?会不会在某些复杂遮挡或动态场景下,适度的移除操作仍有其价值呢?