总体框架
新视角生成:3D Gaussian Splatting for Real-Time Radiance Field Rendering (SIGGRAPH 2023)
算法流程:3D高斯表示(利用从相机校准过程中生成的稀疏点进行初始化)—>优化高斯属性(包括位置、不透明度、各向异性协方差和球形谐波系数)—>高斯密度自适应控制(增加或减少高斯球数量)—>快速可微分栅格化器(渲染)
Contributions:
- 引入一种各向异性的3D高斯进行高质量、非结构化的辐射场表达
- 快速可微的渲染,允许各向异性的抛雪球和快速反向传播
- 针对高斯特性的优化方法与自适应密度控制
3D高斯表示
3D高斯在三维空间中表现为椭球形(每个高斯分布都覆盖整个空间,等高线是椭球),描述该椭球形需要知道以下参数(均可微):三个轴的轴长和三个方向(由高斯函数协方差矩阵中的9个参数描述)、球谐函数(拟合视角相关的外观)和不透明度。
本文用截断的3D高斯椭球显式描述场景(在概率积分99%的等高线截,一个中心透明度高周围透明度低的椭球),既保留了连续体积辐射场的理想属性以进行场景优化,又避免了在空白空间中进行不必要的计算。
3D高斯椭球的位置初始化:录一段视频或者拍一组不同角度的照片,用一些技术(例如SfM)估计点云。或者直接随机初始化一组点云。
SfM算法
输入:同一物体五张不同角度的图片
输出:初始的点云
算法流程:
- 特征检测和匹配:使用SIFT算法检测每张照片中的特征点,并在相邻照片之间匹配这些特征点。
- 初始相机姿态估计:从两张照片开始,利用基础矩阵或本质矩阵估计相机的相对姿态。
- 三角测量:根据初始估计的相机姿态和特征点匹配结果,计算出建筑物的三维点云。
- 增量式重建:逐步加入剩余的照片,更新三维点云和相机姿态,最终得到完整的建筑物三维模型。
- 全局姿态优化:优化所有照片的相机位置和三维点的位置,以最小化重投影误差,得到更精确的三维结构。
球谐函数
球谐函数是一组定义在球面上的正交函数基(任意一个函数都可以描述为基函数的加权和,基函数越多,表达能力越强)。
若采用J=3的三阶球谐函数,则一个高斯球有(7+5+3+1)*3=48个参数。
Splatting
各向异性(anisotropic):指的是从各个方向上看过去,物体的外观表现都不同。
抛雪球(splatting):一种计算机图形学中用三维点进行渲染的方法,该方法将三维点视作雪球往图像平面上抛,雪球在图像平面上会留下扩散痕迹,这些点的扩散痕迹叠加在一起就构成了最后的图像,是一种针对点云的渲染方法。本文指借助相机外参将这些椭球体沿着特定的角度投影到对应位姿所在的投影平面上。(渲染速度比NeRF更快的重要原因之一)
如何将3D高斯球投影到图像平面:利用相机参数进行线性仿射变换,具体参考[1]:
- 从世界坐标系到相机坐标系:
- 从相机坐标系到图像坐标系
快速可微分栅格化(Tiled-based Rasterizer)
该系统的渲染方法为Tiled-based Rasterizer,本质是基于画家算法的α-Blending,其流程为:
- 将整个图像划分为16*16像素大小的bins,并计算每个执行度大于99%的Gaussian点(99%必须投影到当前图像)所处的bins和相对视平面的深度;
- 在渲染时,要考虑遮挡关系,因此必须对Gaussian点按照其与相机的距离(深度)进行排序,为每个bin创建一个splats列表,和这个bin相交的所有Gaussian点在这个list里面从近到远依次存放;
- 并行地在每个bin上splat,即对每一个bin中的像素执行α-Blending:
(1)计算list里下一个高斯点在当前像素投影出的颜色和α值
(2)将颜色与frame buffer中的颜色混合
(3)将α与透明度buffer中的透明度值相加,如果透明度值大于阈值则退出计算
P.S. 一个椭球体投影到平面上会得到一个椭圆(代码实现时其实是以长轴为直径的圆),然后通过计算待求解像素和椭圆中心的距离,我们可以得到不透明度(离的越近,说明越不透明,用Sigmoid函数限制在[0,1)之内)。每个椭球体又各自代表自己的颜色,这是距离无关的。于是就可以进行alpha compositing,来合成颜色。快速的对所有像素做这样的计算被称作”快速可微光栅化“。
密度自适应控制
根据梯度自适应调整点云分布:
-
需要增加Gaussian点的情况:
(1)“欠重建”(under-reconstruction)区域:位置梯度很大但方差很小的Gaussian点—>缺少Gaussian点—>对点云进行clone,再沿位置梯度进行移动;
(2)“过重建”(Over-reconstruction)区域:位置梯度很大且方差很大的Gaussian点—>每个Gaussian点覆盖范围很大—>split,减小这个Gaussian点的值,再复制这个Gaussian点,再沿位置梯度进行移动。 -
需要减少Gaussian点的情况:
(1)每100次迭代移除不透明度小于阈值的点;
(2)周期性地将所有Gaussian点的透明度设为0,(正常的点在之后的迭代过程中会回归),以除掉离相机比较近的floaters;禁用点的增减和移动功能,仅对Gaussian点的参数进行一段时间训练,有些Gaussian点会在训练过程中变大,盖住其他点或者盖住相机,删除这些点;训练完成后会有一些Gaussian点透明度仍然接近0,删除这些点。
若一个点的3D高斯太大,无法完全拟合该处细节,就对该点进行分割,该处用两点来表达;若某处的点太密集,就将多个3D高斯合并为一个3D高斯。
训练过程
得到渲染图像Image后,将其与Ground Truth图像比较求loss(损失函数:L1+SSIM结构误差),并反向传播。一方面用随机梯度下降法更新3D高斯中的参数,另一方面在自适应密度控制中更新点云。可微光栅化部分的反向传播误差时按bin对高斯进行索引。
交错优化
需要优化的参数有:包括位置、不透明度、各向异性协方差、球形谐波系数和密度
高斯函数的协方差矩阵必须是半正定的,不能通过梯度下降法直接优化。因此作者把协方差矩阵按如下方式分解:
其中,S(scale)为对角阵,代表三个轴的长度;R(Rotation)为旋转矩阵。旋转矩阵也不能直接参与优化,所以用四元数将9个参数降到了4个。
参考1
Matthias Zwicker, Hanspeter Pfister, Jeroen Van Baar, and Markus Gross. 2001a. EWA volume splatting. In Proceedings Visualization, 2001. VIS’01. IEEE, 29–538.
参考2
参考3