0. 前言#
3DGS 是现在比较流行的新视角合成任务的方法,兼顾了质量与速度,然而仍存在许多不足。其中比较明显的就是致密性策略中大高斯分裂存在问题,导致大高斯覆盖的背景等位置存在模糊的情况,如图:

接下来介绍的几个方法都对高斯的分布或分裂策略进行了改进。
1. 3DGS(Gaussian Splatting)#
3DGS 方法主要是在三维空间中建立三维高斯函数,将三维空间的场景进行表示,之后再用光栅化技术,将其投影到二维平面上渲染。
3DGS 的原论文为《3D Gaussian Splatting for Real-Time Radiance Field Rendering》
0. 3D 表示#
想要表示一个三维空间中的物体,我们能想到最直接的方法就是将其形状直接描述出来,例如用一些平面将其包围起来。而最简单的建模方式就是使用空间三角形来构建(Mesh),如图:

但我们希望用立体的元素来表示三维物体,椭球就是一个很好的元素。但如果只使用实椭球来表示,有许多形状是不好表示的。因此考虑将椭球虚化,变成一种概率模型,从而将三维空间中的物体用概率表示,如图可知,椭球的交界处可以形成各种形状:

因此,椭球形的 3D 高斯分布就被用来构建这种模型。
1. 3D Gaussian 构建#
用 3D 高斯分布构建基础的元素有四个属性:中心位置(\(\mu\))、不透明度(\(\alpha\))、三维协方差矩阵(\(\Sigma\))、颜色(\(c\))。这种分布是可微的,因此在神经网络中是可学习的。
2. Splatting 渲染#
Splatting 又叫抛雪球法,意思是将一个雪球(高斯球)砸到一个平面上,雪球散开后,在撞击中心的雪量最大,而离撞击中心越远的位置雪量越少,可以理解为二维高斯的密度函数。而把椭球投影到平面后得到的 2D 图形,就是 Splatting 渲染。

3. 3DGS 流程#
3DGS 的目标是实现高质量的实时新视角合成(Real-time Novel View Synthesis)。

首先,输入为一组多视角的图片:

通过 SfM(Structure from Motion) 技术计算相机参数并重建稀疏点云,如图所示:

将点云的位置作为 3D 高斯的初始位置,生成一系列 3D 高斯,然而这些 3D 高斯并不能很好的表示 3D 场景,需要进行迭代优化。优化的策略就是自适应高斯致密化策略(Adaptive Gaussian Densification)。简单来说,生成的高斯有大有小,大的高斯没办法填充细节,于是将其分裂;小高斯对细节填充不完整,于是将其克隆;这样的策略在一定次数的迭代中根据平均梯度和阈值的关系进行调控,如图:

之后使用 GS 方法将 3D 高斯光栅化投影到 2D 平面。得到的投影图片与原输入图片投入到最小化损失函数中训练,训练后的结果如图:

训练好后,输入静态多视角图片后,由于能够构建整个 3D 高斯重建表示,因此调整投影平面角度,即可渲染从未被输入过的拍摄视角的图像,并且能够实时进行光栅化投影渲染,从而实现新视角合成的任务。
2. ABSGS#
文章链接在此:《AbsGS: Recovering Fine Details for 3D Gaussian Splatting》
这篇文章注意到,3DGS 的渲染场景中存在问题,大高斯所在的背景区域存在模糊的现象,分析原因是许多本应该分裂的大高斯并未分裂。原来的 3DGS 对于大高斯的判定是高斯与真值间存在差异,差异会反映成梯度变化,因此取平均梯度与阈值比较。若平均梯度大于阈值,说明该高斯不属于该位置,而应该进行调整,于是进行分裂。
于是,针对分裂策略,文章提出改进判别方式:原来的 3DGS 对于平均梯度的计算是先将各个视图(view)的梯度求和,之后再相加取平均,然而每个视图内部的每个像素的梯度方向可能不同,导致梯度向量在求和时可能相互抵消,文中称其为梯度碰撞(Gradient Collision)。因此改进方法也很简单,将梯度的方向统一,只是将其长度相加,这样就能避免梯度碰撞的发生,从而能够轻松的判别大高斯,从而进行分裂。

3. PixelGS#
文章链接在此:《Pixel-GS: Density Control with Pixel-aware Gradient for 3D Gaussian Splatting》
这篇文章也注意到了 3DGS 的渲染场景中存在背景区域模糊的现象,分析原因是各视图相加取平均是不公平的,在高斯中心投影的视图占据的像素较多,而边缘的像素较少,但根据视图进行平均就忽略了各视图的权重。

于是,应该按照投影像素的多少来赋予相应的权重进行加权平均,这样也能快速达到阈值要求,而不是让像素稀疏区域将像素密集区域的贡献冲淡。
另外,文章还注意到场景中不该存在物体的区域也存在一些漂浮物(floater),这使得新视图存在噪声。于是文章提出一种梯度缩放策略(gradient scaling strategy),使之能够得到抑制。
4. EasySplat#
文章链接在此:《EasySplat: View-Adaptive Learning makes 3D Gaussian Splatting Easy》
这篇文章注意到了两件事:一个是构建过程中会产生噪声高斯,一个是渲染场景存在质量低的情况,分析原因一个是使用 SfM 方法初始化的点云质量不够高,会产生噪声点,从而产生噪声高斯;另一个就是致密化方法存在缺陷。
对于 SfM 初始化的问题,文中采用 DUSt3R 的双视图点云构建,由于 DUSt3R 的输入是双视图,而 3DGS 的输入是多视图,所以要拆分成多个双视图。对于双视图的匹配选择,文中采用各视图的相似性进行筛选,文中称为视图自适应的群组初始化策略(View-adaptive Group Initialization Strategy)。最后将输出的点云进行全局对齐,从而产生初始的点云图。
对于致密化方法的问题,文中发现,大高斯的周围通常有许多小高斯,于是文中采用一个基于 KNN 的致密化策略,选取大高斯附近的 K 个高斯,将其求和取平均值作为该大高斯的变化结果。这样的策略能够使大高斯容易分裂,也能够提升效果。

5. 总结#
通过上述文章,可以看到,原始的 3DGS 确实存在致密化策略问题,尤其是大高斯难以满足阈值分裂。然而,各个文章的方法各不相同,却都有所提升,于是猜想:是否在不直接降低阈值的情况下,让大高斯能够更容易的分裂,就能提升重建的效果?
另外,由于初始化的点云质量参差不齐,可能导致浮游物或是噪声的出现,进行质量更高的点云初始化可以改善这种情况。
6. 参考文献#
1.ChatGPT1
2.ChatGPT2
