论文精读(四)3D Gaussian Splatting for Real-Time Radiance Field Rendering

2023年8月siggraph的best paper

论文链接:3D Gaussian Splatting for Real-Time Radiance Field Rendering (inria.fr)

代码:graphdeco-inria/gaussian-splatting: Original reference implementation of “3D Gaussian Splatting for Real-Time Radiance Field Rendering” (github.com)

【3D Gaussian Splatting原理速通(一)–三维高斯概念】https://www.bilibili.com/video/BV11e411n79b?vd_source=bd967f0d540a64617b8b612bc0f0f9a3

【【较真系列】讲人话-3d gaussian splatting全解(原理+代码+公式)【1】 捏雪球】https://www.bilibili.com/video/BV1zi421v7Dr?vd_source=bd967f0d540a64617b8b612bc0f0f9a3

3dgs基于2001年的 EWA Volume Splatting。

先验知识

Splatting-基本理解

Splatting算法,‌也被称为抛雪球法,‌是一种用于3D图形渲染的技术,‌它通过反复对体素的投影叠加效果进行运算来生成图像。‌Splatting 算法通过将数据点“投影”到图像平面上并使用核函数进行“扩散”来生成图像。这些数据点可以是体积数据中的体素(volumetric voxel)或者点云数据中的点。每个数据点被看作是一个小斑点(splat),这个斑点在图像空间中被扩散开来,从而形成最终的图像。

定义

  • 一种体渲染的方法:从3D物体渲染到2D平面。
  • Ray-casting(射线投掷法)是被动的(NeRF)。
    • 计算出每个像素点受到发光粒子的影响来生成图像。
  • Splatting是主动的,可并行的前向渲染方法。
    • 计算机每个发光例子如何影响像素点。

优点

  • 高效性:相对于其他体绘制方法(如体素光线投射),Splatting 算法通常计算效率更高,因为它不需要遍历每个体素。
  • 灵活性:可以容易地应用于不同类型的数据,如医学图像、科学计算数据和点云数据。
  • 高质量图像:通过适当选择核函数和参数,可以生成高质量的图像,特别是在处理具有噪声的数据时。

缺点

  • 伪影:如果核函数和参数选择不当,可能会产生伪影或模糊效果。
  • 数据密集性问题:对于非常稀疏的数据,生成的图像可能不连续;对于非常密集的数据,计算量可能仍然较大。
  • 深度排序问题:需要处理点的深度排序,以确保正确的透明度和混合效果。

核心

想象输入是一些雪球,图片是一面砖墙。图像生成过程就像是向墙面扔雪球的过程,每扔一个雪球,墙面上会有扩散痕迹又称足迹(footprint)。啪唧一声也就是splat的拟声词由来。

splatting的核心

  1. 选择【雪球】
  2. 抛掷雪球:从3D投影到2D,得到足迹
  3. 加以合成,形成最后的图像。

选择雪球

为什么使用核(雪球):

  • 点是没有体积的
  • 需要给点一个核
  • 高斯/圆/正方体

为什么选择3D高斯椭球:

  • 数学性质好:
    • 仿射变换后高斯核仍然闭合
    • 3D降维到2D后(沿着某一个轴积分)
    • 依然为高斯
  • 定义
    • 椭球高斯G(x)=1(2π)kΣe12(xμ)TΣ1(xμ))G(x) = \frac{1}{\sqrt{(2\pi)^k}\vert{\Sigma}\vert}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))}
    • Σ\Sigma表示协方差矩阵,半正定,Σ\vert\Sigma\vert是其行列式。

3D gaussian为什么是椭球

椭球:

  • x2a2+y2b2+z2c2=1\frac{x^2}{a^2} +\frac{y^2}{b^2}+\frac{z^2}{c^2}=1
  • Ax2+By2+Cz2+2Dxy+2Exz+2Fyz=1Ax^2+By^2+Cz^2+2Dxy+2Exz+2Fyz=1

3d高斯:

G(x)=1(2π)kΣe12(xμ)TΣ1(xμ))G(x) = \frac{1}{\sqrt{(2\pi)^k}\vert{\Sigma}\vert}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))}

  • μ\mu是均值
  • Σ\Sigma是协方差矩阵。

协方差矩阵

高斯分布:

  • 一维:均值&方差
  • 高维:均值&协方差矩阵

协方差矩阵如何理解:对角线上是xyz上的方差,其他地方是对称的体现出xyz间的相关程度。

协方差矩阵:

  • 是一个对称矩形,决定高斯分布形状。
  • 对角线上元素为x轴/y轴/z轴的方差
  • 反斜对角线上的值为协方差,
    • 表示x和y,x和z…的线性相关程度。

这就是一个椭球面。

高斯是一个连续值从【0,1】。G为常数时是一个椭球面。

各向同性(Isotropic):

  • 在所有方向具有相同的扩散程度(梯度)
  • 例子:球

各向异性(Anisotropic):

  • 在不同方向具有不同的扩散程度(梯度)

  • 椭球

  • pkxhs1I.png

    仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。平行的边依旧平行。基本是:一个旋转R+缩放S+平移B完成。

任意高斯可以看作是标准高斯通过仿射变换得到。球->放射变化->椭球。

pkxh4hj.png

协方差矩阵为什么能用旋转和缩放来表达?

  • w=Ax+b
  • $w\thicksim N(A\mu+b,A\Sigma A^T) $
  • A=RS

Σ=AIAT=RSI(RS)T=RS(S)T(R)T\Sigma = A \cdot I \cdot A^T = R \cdot S \cdot I(R \cdot S)^T = R \cdot S \cdot(S)^T \cdot (R)^T

求RS可以通过特征值分解。

3D到像素(抛雪球)

相机模型各个坐标系回顾:世界坐标系,相机坐标系,归一化坐标系,像素坐标系。

回顾鲁鹏老师的三维重建课程

CG(计算机图形学):

  • 观测变换
  • 投影变换
  • 视口变换
  • 光栅化

观测变换

pkx4EUe.png

投影变换

3D到2D,正交投影与z方向无关,透视投影与z方向相关。

pkx5rOP.png

pkx5qkF.png

pkxoS3j.png

光栅化:把东西画在屏幕上,连续转离散,使用的方法:采样。

pkxoG5D.png

pkxoUxA.png

pkxoDVf.png

我们不能直接使用投影变换。因为从透视投影到正交投影,非线性非放射变换。所以引入雅可比矩阵。

雅可比矩阵

只要地方足够小,能理解为局部线性。可以联系到导数

pkxohq0.png

pkxooIU.png

此时均值与协方差在一个坐标系里吗?

均值:在NDC坐标系,范围[1,1]3[-1,-1]^3

协方差矩阵:在未缩放的正交坐标系里,范围[l,r][b,t][f,n][l,r]*[b,t]*[f,n]

pkxoxZ6.png

pkxTAsI.png

再做一个视口变化,对高斯核进行平移加缩放。正方体拉伸到图片大小上。

对于协方差进行足迹的渲染。本质上还是一个高斯分布。

雪球颜色

3d高斯球的颜色

在傅里叶变换中,复杂的函数可以用cos,sin去拟合。

pkx7V1J.png

pkx7NnI.png

为什么球谐函数能够更好的表达颜色。

原因:数量多,维度多16*3,存储信息更多。

CG上:环境贴图,球形环境贴图(表达了光的来源)。

一个金属越光滑,漫反射越少,镜面反射越多。

在渲染中:用球谐函数来重建亮度,一阶到6阶,阶数越高还原效果越好。

e80c0cc61ab5733efeff4fc78632d1d

注意上图的球与我们3DGS的椭球不是一个东西。

合成图片

直观上:a-blending。

实际上:G。footprint。对每个像素去着色

image

image

与nerf的体渲染的方法一致。

3Dgs怎么就快了

GPU:cuda变成splatting,一个线程负责一个像素。

分区:将整张图分为16*16块。对每个高斯划分区块。这样GPU的每个block负责一个区。Block之间可以共享内存。

机器学习与参数评估

用SFM算得一些点云,假设有10000个,每个点膨胀成3d高斯椭球,则每个椭球得参数包括:中心点位置(x,y,z),协方差矩阵R,S,球谐函数系数16*3,透明度:a。

simple-KNN

椭球的初始形状:是一个球,再使用knn法找到3近邻,半径就是3近邻的距离的平均。

算法:

  • 渲染+SGD
  • L=(1λ)L1+λDSSM,λ=0.2L=(1-\lambda)L_1+\lambda_{D-SSM},\lambda=0.2

问题:强依赖sfm生成的初始点云

方案:打补丁(Adaptive Control Gaussians)

  • 太大的高斯拆分
  • 太小的高斯合并
  • 存在感太低的剔出

论文

先来看看效果吧,3DGS的效果又快又好。整篇文章疯狂diss NeRF,压力拉满了。

pkzE5cj.png

Fig. 1.我们的方法实现了辐射场的实时渲染,其质量等同于之前的最佳质量方法[巴伦等人,2022],而仅需要与之前最快方法竞争的优化时间[Fridovich-Keil和Yu等人,2022; Müller等人,2022]。该性能的关键是一种新颖的3D高斯场景表示与实时可微分渲染器相结合,它为场景优化和新颖的视图合成提供了显著的加速。请注意,对于与InstantNGP相当的训练时间[Müller等人,2022],我们获得了与他们相似的质量;虽然这是他们达到的最大质量,但通过51分钟的训练,我们获得了最先进的质量,甚至略优于Mip-NeRF 360 [巴伦等人,2022]。

辐射场方法最近彻底改变了用多张照片或视频捕获的场景的新颖视图合成。然而,实现高视觉质量仍然需要训练和渲染成本高昂的神经网络,而最近更快的方法不可避免地会牺牲速度来换取质量。对于无界和完整的场景(而不是孤立的对象)和1080 p分辨率的渲染,目前没有一种方法可以实现实时显示速率。我们介绍了三个关键要素,使我们能够实现最先进的视觉质量,同时保持有竞争力的训练时间,重要的是允许以1080 p分辨率进行高质量的实时(≥ 30 fps)新颖视图合成。首先,从相机校准过程中产生的稀疏点开始,我们用3D高斯表示场景,该高斯保持了场景优化所需的连续体积辐射场的特性,同时避免了空空间中不必要的计算;其次,我们对3D高斯进行交错优化/密度控制,特别是优化各向异性协方差,以实现场景的准确表示;第三,我们开发了一个快速的可见性感知绘制算法,该算法支持各向异性溅射,既加快了训练速度,又允许实时绘制。我们在几个已建立的数据集上演示了最先进的视觉质量和实时渲染。

提高了实时效果(帧率),更快的训练速度,视觉效果质量提高。

CCS概念:计算方法→渲染;基于点的模型;光栅化;机器学习方法。

关键词:新颖的视图合成,辐射场,3D高斯,实时渲染

1 引言

网格和点是最常见的3D场景表示,因为它们是显式的,非常适合基于GPU/CUDA的快速光栅化。相比之下,最近的神经辐射场(NeRF)的方法建立在连续的场景表示,通常优化多层感知器(MLP)使用体积射线行进的新颖的视图合成捕获的场景。类似地,迄今为止最有效的辐射场解决方案通过内插存储在例如,体素[Fridovich-Keil and Yu et al. 2022]或散列[Müller et al. 2022]网格或点[Xu et al. 2022]。虽然这些方法的连续性有助于优化,但渲染所需的随机采样成本高昂,并且可能会导致噪音。我们引入了一种结合了两个世界最佳的新方法:我们的3D高斯表示允许优化最先进的(SOTA)视觉质量和有竞争力的训练时间,而我们基于平铺的飞溅解决方案确保在几个先前发布的数据集上以SOTA质量实时渲染1080 p分辨率[巴伦等人。2022; Hedman等人。2018; Knapitsch et al. 2017](见图1)。

网格与点的3D表示方法适合GPU运行,NeRF渲染时随机采样成本高昂。

我们的目标是允许实时渲染多张照片捕获的场景,并创建与优化时间一样快的典型真实的场景的最有效的方法表示。最近的方法实现了快速训练[Fridovich-Keil和Yu等人,2022; Müller等人,2022],但很难实现当前SOTA NeRF方法获得的视觉质量,即,Mip-NeRF 360 [巴伦等人,2022],需要长达48小时的培训时间。快速但质量较低的辐射场方法可以根据场景实现交互式渲染时间(每秒10-15帧),但无法实现高分辨率的实时渲染。

我们的解决方案基于三个主要组件。我们首先介绍3D高斯作为一个灵活的和富有表现力的场景表示。我们从与之前的NeRF类方法相同的输入开始,即,使用运动恢复结构(SfM)[Snavely et al. 2006]校准相机,并使用作为SfM过程的一部分免费生成的稀疏点云初始化3D高斯集。与大多数需要多视图立体(MVS)数据的基于点的解决方案相比[Aliev et al. 2020; Kopanas et al. 2021; Rückert et al. 2022],我们仅使用SfM点作为输入即可实现高质量的结果。请注意,对于NeRF合成数据集,即使使用随机初始化,我们的方法也能达到高质量。我们证明了3D高斯是一个很好的选择,因为它们是一种可微分的体积表示,但是通过将它们投影到2D,并应用标准的-混合,使用与NeRF等效的图像形成模型,它们也可以非常有效地光栅化。我们方法的第二个组成部分是优化3D高斯属性- 3D位置、不透明度、各向异性协方差和球谐(SH)系数-与自适应密度控制步骤交织,其中我们在优化过程中添加并偶尔删除3D高斯。优化过程产生了一个合理的紧凑,非结构化和精确的场景表示(1-5万高斯的所有场景测试)。我们方法的第三个也是最后一个元素是我们的实时渲染解决方案,该解决方案使用快速GPU排序算法,并受到基于平铺的光栅化的启发,遵循最近的工作[Lassner和Zollhofer 2021]。然而,由于我们的3D高斯表示,我们可以执行尊重可见性排序的各向异性飞溅-由于排序和混合混合-并通过跟踪所需的尽可能多的排序飞溅的遍历来实现快速准确的向后传递。

  • 引入各向异性3D高斯模型作为辐射场的高质量非结构化表示。
  • 3D高斯属性的优化方法,与自适应密度控制交织,为捕获的场景创建高质量的表示。
  • GPU的快速可微分渲染方法是可感知的,允许各向异性飞溅和快速反向传播,以实现高质量的新颖视图合成。

我们对以前发表的数据集的结果表明,我们可以从多视图捕获优化我们的3D高斯,并实现与以前最佳质量的隐式辐射场方法相同或更好的质量。我们还可以实现类似于最快方法的训练速度和质量,重要的是为新颖视图合成提供第一个高质量的实时渲染。

2 相关工作

我们首先简要介绍了传统的重建,然后讨论基于点的渲染和辐射场的工作,讨论他们的相似性,辐射场是一个广阔的领域,所以我们只专注于直接相关的工作。有关该领域的完整报道,请参阅最近的优秀调查[Tewari et al. 2022; Xie et al. 2022]。

2.1 传统的场景重建与绘制

第一种新颖的视图合成方法基于光场,首先是密集采样[Gortler et al. 1996; Levoy and Hanrahan 1996],然后允许非结构化捕获[Buehler et al. 2001]。运动恢复结构(SfM)的出现[Snavely et al. 2006]使一个全新的领域成为可能,在这个领域中,可以使用一组照片来合成新的视图。SfM在摄像机校准期间估计稀疏点云,最初用于3D空间的简单可视化。随后的多视图立体(MVS)多年来产生了令人印象深刻的全3D重建算法[Goesele et al. 2007],使几种视图合成算法的开发成为可能[Chaurasia et al. 2013; Jumeemann et al. 2008; Hedman et al. 2018; Kopanas et al. 2021]。所有这些方法都将输入图像重新投影并混合到新颖的视图相机中,并且使用几何形状来引导该重新投影。这些方法在许多情况下产生了很好的结果,但通常不能完全恢复从未重建的区域,或从“过度重建”,当MVS产生不存在的几何。最近的神经渲染算法[Tewari et al. 2022]极大地减少了这些伪影,并避免了将所有输入图像存储在GPU上的巨大成本,在大多数方面都优于这些方法。

2.2 神经渲染和辐射场

深度学习技术早期用于新颖视图合成[Flynn et al. 2016; Zhou et al. 2016]; CNN用于估计混合权重[Hedman et al. 2018],或用于纹理空间解决方案[Riegler和Koltun 2020; Thies et al. 2019]。使用基于MVS-based几何是大多数这些方法的主要缺点;此外,使用CNN进行最终渲染经常导致时间闪烁。

用于新视图合成的体积表示由Soft 3D发起[Penner和Zhang 2017];随后提出了与体积射线推进相结合的深度学习技术[Henzler等人,2019; Sitzmann等人,2019],建立在连续可微密度场上来表示几何形状。由于查询体积所需的大量样本,使用体积光线推进进行渲染具有显著的成本。神经辐射场(NeRFs)[Mildenhall et al. 2020]引入了重要性采样和位置编码来提高质量,但使用了大型多层感知器,对速度产生了负面影响。NeRF的成功导致了通常通过引入正则化策略来解决质量和速度问题的后续方法的爆炸式增长;当前最先进的新颖视图合成图像质量是Mip-NeRF 360 [巴伦et al. 2022]。虽然渲染质量非常出色,但训练和渲染时间仍然非常长;我们能够在提供快速训练和实时渲染的同时,达到甚至在某些情况下超过这一质量。

最近的方法主要集中在更快的训练和/或渲染上,主要是通过利用三种设计选择:使用空间数据结构来存储(神经)特征,这些特征随后在体积射线行进期间内插,不同的编码MLP容量。这些方法包括空间离散化的不同变体[Chen等人,2022 b,a; Fridovich-Keil和Yu等人,2022; Garbin等人,2021; Hedman等人,2021;雷泽等人,2021; Takikawa等人,2021; Wu等人,2022; Yu等人,2021年]、密码本[Takikawa等人,2022年]和哈希表等编码[Müller等人,2022年],允许使用更小的MLP或前述神经网络[Fridovich-Keil和Yu等人,2022年; Sun等人,2022]。

就是一堆人对NeRF进行微调,或者运用在不同的应用环境下,都是1~100的操作。

这些方法中最值得注意的是InstantNGP [Müller et al. 2022],它使用哈希网格和占用网格来加速计算,并使用较小的MLP来表示密度和外观;以及Plenoxels [Fridovich-Keil and Yu et al. 2022],它使用稀疏体素网格来插值连续密度场,并且能够完全放弃神经网络。两者都依赖于球面谐波:前者直接表示方向效果,后者将其输入编码到颜色网络。虽然这两种方法都提供了出色的结果,但这些方法仍然难以有效地表示空白空间,这部分取决于场景/捕捉类型。此外,图像质量在很大程度上受到用于加速的结构化网格的选择的限制,并且渲染速度受到对于给定的光线行进步骤查询许多样本的需要的阻碍。我们使用的非结构化、显式GPU友好的3D高斯函数在没有神经元组件的情况下实现了更快的渲染速度和更好的质量。

2.3 基于点的渲染和辐射场

基于点的方法有效地渲染不连续的和非结构化的几何样本(即,点云)[Gross和Pfister 2011]。在其最简单的形式中,点采样渲染[Grossman and Dally 1998]栅格化具有固定大小的非结构化点集,为此可以利用本机支持的点类型图形API [Sainz and Pajarola 2004]或GPU上的并行软件栅格化[Laine and Karras 2011; Schütz et al. 2022]。虽然对底层数据是真实的,但点采样渲染会出现孔洞、导致锯齿,并且是严格不连续的。高质量基于点的渲染的初步工作通过“溅射”具有大于像素的范围的点图元来解决这些问题,例如,圆形或椭圆形圆盘、椭圆体或曲面[Botsch等人,2005; Pfister等人,2000; Ren等人,2002; Zwicker等人,2001 b]。

最近人们对基于可微点的渲染技术很感兴趣[Wiles et al. 2020; Yifan et al. 2019]。点已经用神经特征增强,并使用CNN进行渲染[Aliev et al. 2020; Rückert et al. 2022],从而实现快速甚至实时的视图合成;然而,它们仍然依赖于初始几何形状的MVS,因此继承了其伪影,最明显的是在无特征/有光泽的区域或薄结构等困难情况下的过度重建或重建不足。

基于点的-blending和NeRF风格的体绘制基本上共享相同的图像形成模型。具体而言,颜色渲染是通过沿着射线的体积渲染来给出的:

C=i=1NTi(1exp(σiδi))ci with Ti=exp(j=1i1σjδj)C=\sum_{i=1}^N T_i\left(1-\exp \left(-\sigma_i \delta_i\right)\right) \mathbf{c}_i \text { with } T_i=\exp \left(-\sum_{j=1}^{i-1} \sigma_j \delta_j\right) \text {, }

其中,沿射线以间隔沿着获取密度ε、透射率ε和颜色c的样本。𝛿𝑖这可以重写为

pkzV2rR.png

典型的基于神经点的方法(例如,[Kopanas等人,2022,2021])通过混合与像素重叠的N个有序点来计算像素的颜色矩阵:

C=iNciαij=1i1(1αj),C=\sum_{i \in \mathcal{N}} c_i \alpha_i \prod_{j=1}^{i-1}\left(1-\alpha_j\right),

其中,c是每个点的颜色,是通过评价2D高斯协方差Σ [Yifan et al. 2019]乘以学习的每点不透明度得出的。𝛼𝑖

从等式2和等式3、我们可以清楚地看到,成像模型是相同的。但是,渲染算法却有很大的不同。NeRF是隐含表示空的/被占用的空间的连续表示;需要昂贵的随机采样来找到等式中的样本。2,从而带来噪声和计算开销。相比之下,点是一种非结构化的离散表示,它足够灵活,可以创建、破坏和置换类似于NeRF的几何体。这是通过优化不透明度和位置来实现的,如之前的工作所示[Kopanas等人,2021],同时避免了全体积表示的缺点。

Pulsar [Lassner和Zollhofer 2021]实现了快速球体光栅化,这启发了我们基于图块和排序的渲染器。然而,根据上面的分析,我们希望在排序的splat上保持(近似)传统的-blending,以具有体积表示的优点:与其顺序无关的方法相比,我们的光栅化尊重可见性顺序。此外,我们还在像素中的所有splat上反向传播梯度,并对各向异性splat进行光栅化。这些元素都有助于我们的结果的高视觉质量(请参见第第7.3条)。此外,上述的先前方法也使用CNN进行渲染,这导致时间不稳定性。尽管如此,Pulsar [Lassner and Zollhofer 2021]和ADOP [Rückert et al. 2022]的渲染速度仍然是我们开发快速渲染解决方案的动力。

虽然专注于镜面反射效果,但神经点Catacaustics [Kopanas等人,2022]的基于漫射点的渲染轨迹通过使用MLP克服了这种时间不稳定性,但仍然需要MVS几何结构作为输入。该类别中的最新方法[Zhang等人,2022年]不需要MVS,也使用SH进行定向;但是,它只能处理一个对象的场景,并且需要遮罩进行初始化。虽然对于小分辨率和低点数来说速度很快,但尚不清楚它如何扩展到典型数据集的场景[巴伦等人,2022; Hedman等人,2018; Knapitsch等人,2017]。我们使用3D高斯更灵活的场景表示,避免了对MVS几何的需要,并实现实时渲染感谢我们的基于瓦片的渲染算法投影高斯。

最近的一种方法[Xu et al. 2022]使用点来表示具有径向基函数方法的辐射场。它们在优化过程中采用点修剪和加密技术,但使用体积光线行进,无法实现实时显示速率。

在人类表现捕获领域,3D高斯模型已用于表示捕获的人体[Rhodin et al. 2015; Stoll et al. 2011];最近,它们已用于视觉任务的体积射线行进[Wang et al. 2023]。在类似的背景下提出了神经体积基元[Lombardi等人,2021]。虽然这些方法启发了我们选择3D高斯作为场景表示,但它们专注于重建和渲染单个孤立对象(人体或人脸)的特定情况,从而产生具有较小深度复杂度的场景。相比之下,我们对各向异性协方差的优化,我们的交错优化/密度控制,以及高效的渲染深度排序,使我们能够处理完整的复杂场景,包括室内和室外的背景,并且具有很大的深度复杂性。

3 概括

我们的方法的输入是一组静态场景的图像,以及由SfM [Schönberger和Frahm 2016]校准的相应摄像机,其产生稀疏点云作为副作用。从这些点,我们创建了一组三维高斯(第4),由位置(平均值)、协方差矩阵和不透明度定义,这允许非常灵活的优化机制。这导致了3D场景的合理紧凑的表示,部分地因为高度各向异性的体splat可用于紧凑地表示精细结构。根据标准实践[Fridovich-Keil and Yu et al. 2022; Müller et al. 2022],通过球谐函数(SH)表示辐射场的方向性外观分量(颜色)。我们的算法继续创建辐射场表示(第5)通过一系列3D高斯参数的优化步骤,即,位置、协方差、和SH系数与用于高斯密度的自适应控制的操作交错。我们的方法的效率的关键是我们的基于瓦片的光栅化器(第。6)这允许各向异性的splat的-混合,由于快速排序而尊重可见性顺序。Out fast rasterizer还包括一个通过跟踪累积值的快速后向通道,而不限制可以接收梯度的高斯数。我们的方法的概述如图2所示。

pkzVbMd.png

见图2。优化从稀疏SfM点云开始,并创建一组3D高斯分布。然后,我们优化并自适应地控制这组高斯分布的密度。在优化过程中,我们使用我们的快速基于瓦片的渲染器,与SOTA快速辐射场方法相比,训练时间具有竞争力。经过训练后,我们的渲染器可以对各种场景进行实时导航。

4 可微三维高斯Splatting

我们的目标是优化场景表示,允许高质量的新视图合成,从一个稀疏的(SfM)点集开始,没有法线。为此,我们需要一个基元,它继承了可微分体积表示的属性,同时又是非结构化的和显式的,以允许非常快速的渲染。我们选择3D高斯,它是可微分的,可以很容易地投影到2D splats,允许快速的-混合渲染。

我们的表示法与之前使用2D点的方法相似[Kopanas等人,2021; Yifan等人,2019],并假设每个点都是一个具有法线的小平面圆。考虑到SfM点的极端稀疏性,很难估计法线。类似地,从这样的估计中优化非常有噪声的法线将是非常具有挑战性的。相反,我们将几何体建模为一组不需要法线的3D高斯函数。我们的高斯函数由一个在世界空间中定义的全3D协方差矩阵定义[Zwicker et al. 2001 a],以点(平均值)为中心:𝜇。

G(x)=e12(x)TΣ1(x)G(x) = e^{-\frac{1}{2}(x)^T\Sigma^{-1}(x)}

在我们的混合过程中,以这个高斯值乘以。

但是我们需要将3D高斯投影到2D以进行渲染。Zwicker等人[2001a]演示了如何对图像空间进行这种投影。给定观察变换,摄像机坐标系中的协方差矩阵Σ′如下:

Σ=JWΣWTJT\Sigma^{\prime}=J W \Sigma W^T J^T

其中,f是射影变换的仿射近似的雅可比矩阵。Zwicker等人[2001a]还表明,如果我们跳过Σ′的第三行和第三列,我们将获得一个2×2方差矩阵,其结构和性质与之前的工作[Kopanas等人,2021]中从具有法线的平面点开始的结果相同。

一种明显的方法是直接优化协方差矩阵Σ以获得表示辐射场的3D高斯。然而,协方差矩阵只有当它们是半正定时才有物理意义。对于所有参数的优化,我们使用梯度下降法,该方法不容易被约束以产生这样的有效矩阵,并且更新步长和梯度可以非常容易地产生无效协方差矩阵。

因此,我们选择了一种更直观、但具有同等表达能力的表示来进行优化。3D高斯的协方差矩阵Σ类似于描述椭圆体的配置。给定一个缩放矩阵和旋转矩阵,我们可以找到相应的Σ:

Σ=RSSTRT\Sigma = RSS^TR^T

为了允许两个因素的独立优化,我们将它们分开存储:一个用于缩放的3D矢量图和一个用于表示旋转的四元数图。这些矩阵可以简单地转换为它们各自的矩阵并组合,确保归一化以获得有效的单位四元数。为了避免在训练过程中由于自动微分而产生的显著开销,我们显式地导出所有参数的梯度。精确导数计算的详细信息见附录A。这种各向异性协方差的表示-适合优化-允许我们优化3D高斯以适应捕获场景中不同形状的几何形状,从而产生相当紧凑的表示。图3示出了这样的情况。

pkzVzi8.png

图1.图3。我们通过将其压缩60%(最右侧)来可视化优化后的3D高斯。这清楚地示出了在优化后紧凑地表示复杂几何形状的3D高斯的各向异性形状。离开实际渲染的图像。

5 三维高斯分布的自适应密度控制优化

我们的方法的核心是优化步骤,它创建了一个密集的3D高斯精确表示场景的自由视图合成。除了位置p、a和协方差$ \Sigma $,我们还优化了表示每个高斯的颜色c的SH系数,以正确捕获场景的视图相关外观。这些参数的优化与控制高斯密度的步骤交错,以更好地表示场景。

5.1 优化方法

优化是基于渲染的连续迭代,并将所得图像与捕获数据集中的训练视图进行比较。不可避免地,由于3D到2D投影的模糊性,几何体可能被不正确地放置。因此,我们的优化需要能够创建几何体,并且如果几何体被错误定位,则还需要能够破坏或移动几何体。3D高斯的协方差参数的质量对于表示的紧凑性是至关重要的,因为大的均匀区域可以用少量的大的各向异性高斯来捕获。

我们使用随机梯度下降技术进行优化,充分利用标准GPU加速框架,并能够根据最近的最佳实践为某些操作添加自定义CUDA内核[Fridovich-Keil and Yu et al. 2022; Sun et al. 2022]。特别是,我们的快速光栅化(请参阅第6)是我们优化效率的关键,因为它是优化的主要计算瓶颈。

我们使用一个sigmoid激活函数来限制它在[0 - 1)范围内,并获得平滑的梯度,出于类似的原因,我们使用一个指数激活函数来控制协方差的尺度。

我们将初始协方差矩阵估计为各向同性高斯,其轴等于到最近三个点的距离的平均值。我们使用类似于Plenoxels的标准指数衰减调度技术[Fridovich-Keil and Yu et al. 2022],但仅用于位置。损失函数是L1与D-SSIM项的组合

L=(1λ)L1+λLDSSIM\mathcal{L}=(1-\lambda) \mathcal{L}_1+\lambda \mathcal{L}_{\mathrm{D}-\mathrm{SSIM}}

我们在所有的测试中都使用λ\lambda= 0.2。我们在第二节中提供了学习时间表和其他元素的详细信息7.1。

5.2 高斯型自适应控制

我们从SfM的初始稀疏点集开始,然后应用我们的方法自适应地控制单位体积1上高斯的数量及其密度,使我们能够从高斯的初始稀疏集到更好地代表场景的更密集集,并且具有正确的参数。

优化预热后(参见第7.1),我们每100次迭代加密一次,并删除任何本质上透明的高斯,即,如果小于阈值,我们对高斯的自适应控制需要填充空白区域。它专注于缺失几何特征的区域(“重建不足”),但也关注高斯覆盖场景中大面积区域的区域(通常对应于“过度重建”)。我们观察到,两者都有很大的视空间位置梯度。直觉上,这可能是因为它们对应于尚未很好重建的区域,并且优化试图移动高斯函数来纠正这一点。

由于这两种情况都是致密化的良好候选者,我们使用高于阈值的视图空间位置梯度的平均幅度来致密高斯τpos\tau_{pos},我们在测试中将其设置为0.0002。接下来,我们将展示该过程的细节,如图4所示。对于在重建不足区域中的小高斯,我们需要覆盖必须创建的新几何。

为此,优选的是通过简单地创建相同大小的副本并在位置梯度的方向上移动它来克隆高斯。另一方面,需要将具有高方差的区域中的大高斯分解成较小的高斯。我们用两个新的高斯模型代替这些高斯模型,并将它们的尺度除以我们实验确定的因子ϕ\phi= 1.6。我们还通过使用原始3D高斯作为PDF进行采样来初始化它们的位置。

在第一种情况下,我们检测和治疗的需要增加系统的总体积和高斯的数量,而在第二种情况下,我们保存总体积,但增加高斯的数量。与其他体积表示类似,我们的优化可能会被靠近输入相机的浮动器卡住;在我们的情况下,这可能会导致高斯密度的不合理增加。缓和高斯数增加的一个有效方法是在每次迭代次数为3000次时将k值设置为接近于零。然后,优化在需要的情况下增加高斯的,同时允许我们的剔除方法去除小于的高斯,如上所述。高斯分布可能会缩小或增大,并与其他分布有相当大的重叠,但我们会定期删除在世界空间中非常大的高斯分布,以及在视图空间中占用较大空间的高斯分布。该策略导致对高斯总数的总体良好控制。在我们的模型中,高斯始终保持在欧几里得空间中的基元;与其他方法不同[巴伦等人,2022; Fridovich-Keil和Yu等人,2022],我们不需要对遥远或大的高斯进行空间压缩、扭曲或投影策略。

6 快速高斯微分光栅化器

我们的目标是快速整体渲染和快速排序,以允许近似的混合-包括各向异性splats -并避免对可以接收先前工作中存在的梯度的splats数量的硬性限制[Lassner和Zollhofer 2021]。为了实现这些目标,我们设计了一种基于平铺的高斯splats光栅化器,其灵感来自最近的软件光栅化方法[Lassner和Zollhofer 2021],以一次对整个图像的图元进行预排序,避免了阻碍先前的混合解决方案的每个像素排序的费用[Kopanas等人,2022,2021]。我们的快速光栅化允许有效的反向传播任意数量的混合高斯低额外的内存消耗,只需要一个恒定的开销每像素。我们的光栅化流水线是完全可微分的,并且给定到2D的投影(Sec.4)可光栅化与之前2D溅射方法相似的各向异性溅射[Kopanas等人,2021]。

**光栅化,也就是将多边形拆成不同的像素,最终实现将图像绘制在屏幕上。**http://t.csdnimg.cn/KsJ1L

我们的方法首先将屏幕分割成16×16的瓦片,然后继续对视锥和每个瓦片进行3D高斯剔除。具体来说,我们只保留与视锥相交的置信区间为99%的高斯。此外,我们使用保护频带来简单地抑制极端位置处的高斯(即,具有接近于近平面并且远在视锥之外的平均值的那些),因为计算它们的投影2D协方差将是不稳定的。然后,我们根据它们重叠的瓦片数量实例化每个高斯,并为每个实例分配一个结合视图空间深度和瓦片ID的键。然后,我们使用单个快速GPU基数排序基于这些键对高斯进行排序[梅里尔and Grimshaw 2010]。请注意,没有额外的点的每像素排序,并且基于此初始排序执行混合。因此,我们的双调和在某些构型中是近似的。然而,这些近似值变得可以忽略不计,因为splats接近单个像素的大小。我们发现,这种选择大大提高了训练和渲染性能,而不会在融合场景中产生可见的伪影。

在对高斯进行排序之后,我们通过识别第一个和最后一个深度排序的条目来为每个图块生成一个列表。对于光栅化,我们为每个图块启动一个线程块。每个块首先协作地将高斯数据包加载到共享内存中,然后对于给定的像素,通过前后遍历列表来累积颜色和色度值,从而最大化数据加载/共享和处理的并行性增益。当我们在一个像素中达到一个目标饱和度时,相应的线程停止。以规则的间隔,查询图块中的线程,并且当所有像素都已饱和时(即,转到1)。排序的详细信息和整体光栅化方法的高级概述在附录C中给出。

在光栅化过程中,饱和度是唯一的停止标准。与以前的工作相比,我们不限制接收梯度更新的混合图元的数量。我们强制执行此属性,以使我们的方法能够处理具有任意、不同深度复杂性的场景并准确地学习它们,而不必诉诸特定于场景的超参数调整。因此,在向后传递期间,我们必须在向前传递中恢复每个像素的混合点的完整序列。一种解决方案是在全局内存中存储任意长的每个像素的混合点列表[Kopanas等人,2021]。为了避免隐含的动态内存管理开销,我们选择再次遍历pertile列表;我们可以重用前向传递的高斯和tile范围的排序数组。为了方便梯度计算,我们现在从后向前遍历它们。

遍历从影响图块中任何像素的最后一个点开始,并且再次协作地将点加载到共享内存中。此外,每个像素将仅在点的深度低于或等于前向传递期间对其颜色有贡献的最后一个点的深度时才开始(昂贵的)重叠测试和点的处理。计算第2节中描述的梯度。4需要原始混合过程中每一步的累积不透明度值。而不是transversing一个显式的列表中逐步缩小不透明度在向后通过,我们可以恢复这些中间不透明度存储只有总累积不透明度在年底offorward通过。具体来说,每个点在前向过程中存储最终累积的不透明度;我们在从后到前的遍历中将其除以每个点的,以获得梯度计算所需的系数。

基本都是GL的知识,有点硬核。

7 执行、成果和评价

接下来,我们将讨论一些细节的实施,目前的结果和评价我们的算法相比,以前的工作和消融研究。

该图只是展示了部分,总体来说就是3DGS效果不错,效果约等于Mip-NeRF360,远强于其他两个。但是在训练时间和实时性遥遥领先。

后面是与几个算法的对比实验与结果图,以及消融实验的结果。不一一翻译了。

7.1 成就

7.2 结果与评价

7.3 消融实验

7.4 局限性

没啥限制,如果在看不到的场景下,也会有伪影,这是通病。大个的高斯偶尔会有伪影,可以有办法剔除它。简单的可见性算法,这可能导致高斯突然切换深度/混合顺序。这可以通过抗锯齿来解决。还可以做一些应用的上的正则化。

内存消耗巨大。

尽管与以前的基于点的方法相比,我们非常紧凑,但我们的内存消耗明显高于基于NeRF的解决方案。在大型场景的训练过程中,在我们未优化的原型中,峰值GPU内存消耗可能超过20 GB。然而,通过仔细地实现优化逻辑(类似于InstantNGP)的低级别,可以显著降低该数字。渲染训练过的场景需要足够的GPU内存来存储完整的模型(对于大规模场景需要几百MB),另外还需要30-500 MB用于光栅化器,具体取决于场景大小和图像分辨率。我们注意到,存在许多机会来进一步减少我们的方法的存储器消耗。点云的压缩技术是一个研究得很好的领域[De Queiroz and Chou 2016];看看这些方法如何适应我们的表示会很有趣。

8 结论与讨论

我们已经提出了第一种方法,该方法真正允许在各种场景和捕获风格中进行实时、高质量的辐射场渲染,同时需要与之前最快的方法竞争的训练时间。我们选择的3D高斯基元保留了体绘制的优化属性,同时直接允许快速基于splat的光栅化。我们的工作表明,与广泛接受的意见相反,连续表示并不是严格必要的,以允许快速和高质量的辐射场训练。我们的大部分(约80%)训练时间都花在Python代码上,因为我们在PyTorch中构建了我们的解决方案,以便其他人可以轻松使用我们的方法。只有光栅化例程被实现为优化的CUDA内核。我们希望将剩余的优化完全移植到CUDA,例如,在InstantNGP [Müller et al. 2022]中完成,可以为性能至关重要的应用程序实现显著的进一步加速。我们还展示了构建实时渲染原则、充分利用GPU的强大功能和软件光栅化管道架构的速度的重要性。这些设计选择是训练和实时渲染性能的关键,与以前的体积光线推进相比,在性能上具有竞争优势。看看我们的高斯模型是否可以用于对捕获的场景进行网格重建,这将是很有趣的。除了考虑到网格的广泛使用的实际影响外,这将使我们能够更好地理解我们的方法在体积和表面表示之间的连续体中的确切位置。总之,我们已经提出了第一个实时渲染辐射场的解决方案,其渲染质量可与最昂贵的先前方法相匹配,训练时间可与最快的现有解决方案竞争。

文章后续是参考文献、致谢、伪代码以及具体数学公式。值得注意是3DGS参考了很多20年前,十几年前的论文,同时也根据现在“神经网络”至上的科研环境进行了反击。在很多领域,其实原本的物理、数学建模就可以完成,使用神经网络也不过是用算力换一个黑盒去解决问题。随着计算机硬件的提高,二三十年前对于各个领域受限于软件硬件的建模论文,即便当时没有好的结果,也会给我们现在一些启示。个人认为,在当今这个环境下,还是把基础打扎实,要成为知道前因后果的化学家,科学家。而不是只会改改参数的“炼丹师”。

后续我会尝试跑通3DGS的公式,并认真了解他的数学原理,以方便我们后续,在医学影像上的三维重建。