1.引言
1.1.3DGS总览
3D高斯溅射(3D Gaussian Splatting)是一种新兴的三维场景重建和渲染技术,它通过使用3D高斯函数来表示场景中的点,并将这些高斯函数投影到2D图像平面上进行渲染。 这项技术自2023年由Kerbl等人在 ACM Siggraph会议上首次提出以来,因其出色的渲染质量和实时性能而受到学术界和工业界的广泛关注。
下图为3DGS算法的流程
原论文地址:https://arxiv.org/pdf/2308.04079
项目地址:https://github.com/graphdeco-inria/gaussian-splatting
以下为原文中3DGS效果的展示
备注:峰值信噪比(Peak Signal to Noise Ratio,PSNR)是图像质量评价领域最常用且历史最悠久的算法,基于两张图像之间的均方误差,可以进一步计算两张图像之间的PSNR值;PSNR的单位为分贝(decibel,dB),PSNR值越高,表明生成的图像越接近原图,质量越高;相反,PSNR值越低,则两张图像差异越大,质量越低。图中前三个都是NeRF衍生出来的工作。可以看到,3DGS相比于InstantNGP不仅train时间要少,而且在质量上要比InstantNGP要高得多;相比于Mip-NeRF 360质量略高,但仅需51min就完成训练。(实现了当时最先进的质量)
InstantNGP:MÜLLER T, EVANS A, SCHIED C, et al. Instant neural graphics primitives with a multiresolution hash encoding[J/OL]. ACM Trans. Graph., 2022, 41(4): 102:1-102:15. https://doi.org/10.1145/3528223.3530127.
MipNeRF 360: BARRON J T, MILDENHALL B, VERBIN D, et al. Mip-nerf 360: Unbounded anti-aliased neural radiance f ields[J]. CVPR, 2022.
1.2.3DGS与NeRF表达形式上的区别
对比 NerRF和传统的 Mesh:一个是纯连续的、隐式表达在可微空间内;一个是纯离散的(可以插值)。显式表达在三维空间内,3DGS 是在离散和连续间的一个平衡:在高斯球内部是连续的、可微的;在整个空间中,每个高斯球又是离散的。
1.3.3DGS相比于NeRF性能高的原因
传统的 3D 模型表示方法,如离散的Mesh 和点云,以及连续的 NeRF,通常面临着一个主要问题:随机采样过程中产生的噪声,这直接影响了渲染质量。而且通常速度与质量不可兼得,InstantNGP和MipNeRF360就是一个典型的例子。而3DGS通过结合离散和连续表示方法的优势,不仅克服了传统方法在噪声和渲染质量方面的限制,而且极大地提高了渲染速度。而且其算法恰当运用了优化技巧,并充分利用了CUDA的特性(同时也让3DGS的算法难以进行深度优化,因为这不仅需要找到一些结构性的优化点,还需要让CUDA的架构取得优势)。
1.4.3DGS的主要贡献
引入3D gaussian作为 3D 表示,高效,准确,无结构 。
3D gaussian的优化算法:Clone 和 剪枝。
快速可微渲染器。
最后再引入一段abstract(将黑字用红字表示不属于原文操作)
摘要:辐射场方法最近革新了通过多张照片或视频捕获的场景的新视图合成。然而,要达到高的视觉质量仍需要昂贵的训练和渲染神经网络,而近期更快的方法不可避免地以牺牲速度换取质量。对于无限且完整的场景(而非孤立的物体)和1080p分辨率的渲染,当前没有任何方法能够实现实时显示速率。我们引入三个关键元素,使我们能够在保持竞争力的训练时间的同时实现最先进的视觉质量,并且重要的是,在1080p分辨率下实现高质量的实时(≥30 fps)新视图合成。首先,从相机标定过程中生成的稀疏点开始,我们使用3D高斯函数来表示场景,它们保留了连续体积辐射场的期望性质,同时避免在空空间中进行不必要的计算;其次,我们对3D高斯函数执行交错优化/密度控制,特别是优化各向异性协方差以准确地表示场景;第三,我们开发了一种快速的可视化感知渲染算法,支持各向异性点扩展,并加速训练,允许实时渲染。我们在多个标准数据集上展示了最先进的视觉质量和实时渲染。
2.方法
原论文的名字是《3D Gaussian Splatting for Real-Time Radiance Field Rendering》,而这名字中就包含了许多方法:
2.1.3D Gaussian
3D Gaussian是文章构建模型的核心元素,即三维高斯球。论文中,三维高斯体的属性有其中心(位置)𝜇、不透明度 𝛼、三维协方差矩阵(表示缩放程度)Σ和颜色 𝑐 。 𝑐用球谐函数表示,以呈现视角依赖的外观。所有属性都是可学习的,并通过反向传播进行优化。
论文给出了初始化方法是使用放缩变换 S 和旋转变换 R 组合得到 Σ :
由于放缩变换都是沿着坐标轴,所以只需要一个3D向量 𝑠,旋转则用四元数 𝑞表达。机器学习通使用梯度下降对参数进行优化,但直接优化 Σ难以保证半正定,所以论文的方法是继续将梯度传递到 𝑠,𝑞 进行优化。
2.1.1.球谐函数
球谐函数(Spherical Harmonics)是数学和物理中用于表示球面上函数的正交基函数。球面上的任何一个函数都可被表示为球谐函数的加权和,而球谐函数可被视为空间点的特征。一旦获得空间点的这一特征,便可通过球谐函数系数和观察方向来获取该点在不同方向下的颜色值。这一过程的逻辑类似于傅里叶变换-任何信号都可被分解为一组基函数和对应系数的乘积和。随着层次不断递增,高频细节逐渐展现,也越来越逼近原始信号。因此,球谐函数可被理解为球面函数的一种分解方式。而且球谐函数的数据格式易于结构化,可以被加载到某种数据结构中实现快速算法。
球谐函数是三维视觉中的一个重要的概念,它将离散的数值世界参数化,大大增强了表达的灵活性。
参考文献:ical hormonics[EB/OL]. 1994-06-01 / 2024-01-01.https://mathworld.wolfram.com/Spherical Harmonic.html.
[116] ZHANG K, RIEG
2.2.Splatting
Splatting是一种传统的3D到2D的光栅化渲染方式 。不过,文章中的 Splatting 方法和传统的有所区别。在3DGS中,三维高斯椭球体被投影到二维图像空间椭圆形,以进行渲染。
而Splatting 的中文翻译为:抛雪球法。很形象,我们可以想象一下,把一个雪球(高斯球)扔到一个玻璃盘子上,雪球散开以后,在撞击中心的雪量(对图像的贡献)最大,而随着离撞击中心距离的增加,雪量(贡献) 减少。脑补一下盘子上的图像,其实我们可以自然而然的想到二维高斯分布的密度函数。二维高斯分布的密度函数在这里就不再过多赘述。
下图为使用豆包AI生成的一个精美的雪球扔盘子图(图美,但名字起得像一坨)
下图为Splatting的一个形象的展示
数学上来说,给定视图变换 W 和三维协方差矩阵 Σ ,计算投影的二维协方差矩阵 Σ′ 使用以下公式:
其中 J 是射影变换的仿射近似的雅可比矩阵。
2.2.1.3DGS的一个关键创新点-3D Gaussian -> 2D Gaussian
传统的基于体积和积分的渲染方法需要选择采样点来查询隐式几何形状,并将其属性变换累加以计算像素颜色。这不仅要保证渲染质量和隐式几何的连续性,还要维持细节的还原度,且不可避免地存在误差。因此,通常需要增加采样量,这会导致性能下降。3D高斯的轴向积分与2D高斯等价,从数学角度解决了对大量采样的需求,将计算量限制在高斯数量上。这些高斯还可以通过光栅化管线进行快速并行渲染,进一步提高效率。
从相机空间到光线空间是一个非仿射变换,这意味着不可能使用单一的线性变换矩阵来转换所有点的坐标。这是因为每个点在光线空间的坐标是一个以其在相机空间坐标为自变量的非线性函数,所以不存在一个通用的变换矩阵。
作者使用了一个近似方法。这个方法使用每个三维高斯的中心点坐标经过的变换矩阵来近似整个高斯的变换矩阵。通过这种方式,每个高斯的变换可以被视为一个仿射变换。这种特定的变换矩阵被称为雅可比矩阵 (𝐽) :
最后,对于每个给定的三维高斯的协方差矩阵 V″ ,以及其 world space下的中心点坐标 (u0,u1,u2) ,我们可以求得光线空间下的高斯协方差。由于给的是world space下的坐标,所以得先乘以旋转平移矩阵 W 转化为相机空间坐标,然后通过中心点坐标求出雅可比矩阵 J ,光线空间下的高斯协方差就如下:
在正投影下,三维高斯协方差矩阵的前两行和两列直接构成了投影到图像平面的二维高斯协方差矩阵。二维高斯的中心点坐标是通过将相机空间中的 u0 和 u1 坐标除以第三维坐标 u2 来获得,即中心点坐标为 (u0/u2,u1/u2)
通过这种方法,我们就可以把三维空间中的高斯分布转换成图像平面上的二维高斯分布。
论文中引用的核心文章《EWA volume splatting》描述了如何将3D高斯通过仿射变换转换为新的3D高斯分布,并与画布像素对齐。这一变换后,通过沿第三维积分,可以计算出椭球在特定像素上的着色。由于3D高斯分布沿任一轴线积分的结果是2D高斯,因此可以用2D高斯来简化积分过程。
2.3.Radiance Field
Radiance Field即辐射场。辐射场(RF)是用于表达三维空间中光的分布和光强的一个模型。
1.隐式辐射场:之前的NeRF就是一种面向隐式辐射场,在三维隐式空间中建模的深度学习模型。在NeRF中,使用MLP 网络用于将一组空间坐标 和观察方向
映射到颜色值。
2.显式辐射场:与隐式辐射场不同的是,显式辐射场是直接表示光在离散空间结构中的分布,比如体素网格或点云。该结构中的每个元素都存储了其在空间中相应位置的辐射信息,而不是像NeRF一样去执行查询的操作,所以他会更直接也更快的得到每个值,但是同时也需要更大内存使用和导致较低的分辨率。
3.3DGS通过利用3D 高斯函数作为其表示形式,充分利用了显式辐射场和隐式辐射场的优势。这些高斯函数被优化用于准确表示场景,结合了基于神经网络的优化和显式结构化数据存储的优点。
3D高斯表达可表示为:
其中,G是具有平均值和协方差
的高斯函数,c表示与视图相关的颜色。
2.4.Real-Time Rendering
Real-Time Rendering,实时渲染,即从三维重建后的模型,渲染到二维的显示。这是非常重要的一步。(实时是指这种方法的速度非常快,可以达到>30 FPS)
论文中的渲染方法为 Tiled-based Rasterizer(基于瓦片的光栅化渲染),其流程为:
1.预处理:在这一步骤中,3D 高斯的参数(协方差、位置、不透明度、球谐函数)被优化,以适应给定的图像序列和视角。这一步骤可以使用梯度下降或其他优化算法来实现,目标是最小化重建误差。此外,还可以使用自适应密度控制(ADC)来调整 3D 高斯的数量和分布,以达到最佳的渲染效果。
2.投影:在这一步骤中,3D 高斯(椭球)被投影到 2D 图像空间(椭圆)中进行渲染。给定视图变换 W 和 3D 协方差矩阵 Σ ,投影的 2D 协方差矩阵 Σ′ 可以使用以下公式计算:
其中 J 是一个将 3D 向量转换为 2D 向量的矩阵。投影的 2D 高斯的中心位置和颜色可以直接从 3D 高斯的参数中得到。投影的 2D 高斯的不透明度需要根据 3D 高斯的不透明度和协方差矩阵进行调整。具体来说,投影的 2D 高斯的不透明度 α′ 可以使用以下公式计算:
3.排序:在这一步骤中,投影的 2D 高斯被按照其深度值进行排序,以便在后续的渲染过程中正确地处理遮挡关系。为了提高排序的效率,可以使用空间划分或其他加速技术来减少排序的复杂度。例如,可以将图像平面划分为多个块,然后对每个块内的 2D 高斯进行排序。
4.渲染:在这一步骤中,投影的 2D 高斯被用于生成最终的合成图像。
2.4.1.排序中的分块技术
在处理图像时,为了减少对每个像素进行高斯运算的计算成本,论文采用了一种不同的方法:它不是在像素级别进行精确计算,而是将精度降低到了更宏观的图块级别。这个过程首先涉及将整个图像划分成多个不重叠的小块,这些在原始的研究论文中被形象地称为“砖块”。按照原始论文的建议,每个砖块包括16个像素。
接下来,会进一步识别出哪些砖块与特定的高斯投影相交。考虑到一个高斯投影可能会覆盖多个砖块,一种有效的处理方式是复制这个东西,并为每个复制出的高斯分配一个唯一的标识符,即与之相交的 Tile 的 ID。这样,每个砖块都与一个或多个高斯相关联,这些高斯标识了该砖块在图像中的位置和重要性。通过这种方式,3DGS 能有效地降低计算复杂度,同时还保持了图像处理的效率和准确性。
2.4.2.排序的具体实现与 Alpha Blending
给定像素位置x,通过视图变换W,可以计算与所有重叠高斯体的距离,即这些高斯体的深度,形成高斯体的排序列表N。然后,进行Alpha Blending,也就是混合 alpha 合成来计算整体图像的最终颜色:
其中是学到的颜色,最终的不透明度
是学到的不透明度
与高亮的亮度
其中 和
是投影到同一的坐标系。如果不透明度为 1 的话,每个椭球体就是有着清晰边界的椭球了。如下图所示,边界十分清晰。
3.Pipeline
让我们再来回顾3DGS的流程图
现在再来看这个流程图是否会觉得清晰多了呢?
首先系统对 SfM(Structure From Motion,运动恢复结构) 点云进行了初始化,得到3D高斯球们,然后借助相机外参将点投影到图像平面上(即Splatting),接着用可微光栅化,渲染得到图像。得到渲染图像Image后,将其与Ground Truth图像比较求loss,并沿蓝色箭头反向传播。蓝色箭头向上,更新3D高斯中的参数,向下送入自适应密度控制中,更新点云。
3.1.SfM
SfM (Structure from Motion,运动恢复结构) 是一种通过分析图像序列来恢复相机运动参数和场景三维结构的计算机视觉技术。其核心思想是利用多幅图像之间的特征匹配和几何关系,从二维图像中重建三维场景。典型步骤:
1.特征提取与匹配:从图像中提取关键点(如 SIFT、SURF 特征),并通过描述子匹配不同图像中的同名点,建立特征轨迹。
2.初始结构与运动估计:通过两视图几何(如基础矩阵、本质矩阵)估计相机的相对位姿,并利用三角测量恢复稀疏三维点云。
3.多视图扩展与优化:将初始估计扩展到多幅图像,通过光束平差法(Bundle Adjustment)全局优化相机参数和三维点坐标,减少累计误差。
4.稠密重建与纹理映射:基于稀疏点云生成稠密三维模型,并利用图像纹理进行映射,生成高细节的三维场景。
SfM的核心算法:
1.三角测量(Triangulation):通过两相机投影矩阵计算三维点坐标。
2.光束平差法(Bundle Adjustment):非线性优化技术,同时调整相机参数和三维点,最小化重投影误差。
3.旋转平均(Rotation Averaging):处理多视角旋转矩阵的全局一致性问题。
3.2.Adaptive Density Control(自适应密度控制)
1.初始化:3DGS 建议从 SfM 产生的稀疏点云初始化或随机初始化高斯,可以直接调用 COLMAP 库来完成这一步,然后进行点的密集化和剪枝以控制3D高斯的密度。当由于某种原因无法获得点云时,可以使用随机初始化来代替,但可能会降低最终的重建质量。
2.点的密集化:在点密集化阶段,3DGS自适应地增加高斯的密度,以更好地捕捉场景的细节。该过程特别关注缺失几何特征或高斯过于分散的区域。密集化在一定数量的迭代后执行,比如100个迭代,针对在视图空间中具有较大位置梯度(即超过特定阈值)的高斯。其包括在未充分重建的区域克隆小高斯或在过度重建的区域分裂大高斯。对于克隆(Clone),创建高斯的复制体并朝着位置梯度移动。对于分裂(Split),用两个较小的高斯替换一个大高斯,按照特定因子减小它们的尺度。这一步旨在于 3D 空间中寻求高斯的最佳分布和表示,增强重建的整体质量。
3.点的剪枝:点的剪枝阶段移除冗余或影响较小的高斯(可以在某种程度上看作是一种正则化过程)。一般消除几乎是透明的高斯(α低于指定阈值)和在世界空间或视图空间中过大的高斯。此外,为防止输入相机附近的高斯密度不合理地增加,这些高斯会在固定次数的迭代后,将 α 设置为接近0的值。该步骤在保证高斯的精度和有效性的情况下,能节约计算资源。
这里再贴一个原论文中的伪代码流程,希望帮助大家梳理流程
4.应用与限制
4.1.同时定位与地图构建(SLAM)
SLAM是机器人学和自动系统的核心计算问题。它涉及机器人或设备在未知环境中理解其位置的同时,映射环境布局的挑战。SLAM在各种应用中至关重要,包括自动驾驶车辆、增强现实和机器人导航。SLAM的核心是创建一个未知环境的地图,并实时确定设备在此地图上的位置。因此,SLAM为计算密集型场景表示技术提出了巨大挑战,同时也是3D GS的良好测试平台。
4.2.动态场景建模
动态场景建模指的是捕捉和表示随时间变化的三维结构和场景外观的过程。这涉及创建一个数字模型,准确反映场景中对象的几何形状、运动和视觉方面的变化。动态场景建模在虚拟现实、增强现实、3D动画和计算机视觉等多个应用领域至关重要。4D 高斯散射(4D GS)将3D GS的概念扩展到动态场景。它包含了时间维度,允许表示和渲染随时间变化的场景。
4.3.人工智能生成内容(AIGC)
AIGC 指的是由人工智能系统自主创造或显著改变的数字内容,特别是在计算机视觉、自然语言处理和机器学习领域。AIGC的特点是它能模拟、扩展或增强人类生成的内容,使其应用范围从逼真的图像合成到动态叙事创作。AIGC的重要性在于其跨越娱乐、教育和技术发展等各个行业的变革潜力。它是数字内容创造不断演变景观中的关键要素,提供了与传统方法相比更具可扩展性、可定制性和通常更高效的替代方案。
4.4.限制
1.防止模型优化中的“破碎”的高斯:点太大、太长、冗余等
2.更高的显存使用率 (4GB 用于显示,12GB 用于训练)
3.更大的磁盘占用 (每场景 1GB+)
4.与现有渲染管线不兼容
参考文献
1.Kerbl, B., Kopanas, G., Leimkühler, T., & Drettakis, G. (2023). 3D Gaussian Splatting for Real-Time Radiance Field Rendering. SIGGRAPH 2023.
2.Mildenhall, B., Srinivasan, P. P., Tancik, M., Barron, J. T., Ramamoorthi, R., & Ng, R. (2020). NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis. ECCV 2020.
3.Zwicker, M., Pfister, H., van Baar, J., & Gross, M. (2001). Surface Splatting. SIGGRAPH 2001
4.3D Gaussian Splatting 渲染过程-CSDN博客
5.Splatting 抛雪球法简介 - bo233的文章 - 知乎
https://zhuanlan.zhihu.com/p/660512916
6.3DGS综述以及对3DGS的理解:A Survey on 3D Gaussian Splatting - Kedreamix的文章 - 知乎
https://zhuanlan.zhihu.com/p/679809915