【论文精读】3D Gaussian Splatting for Real-Time Radiance Field Rendering
文章目录
- 文章信息
- 摘要
- 背景
- 本文新方法
- 方法介绍
- 实验结果
- CSS概念
- 关键词及短语
- 一、引言
- 背景-引入
- 背景-当前问题
- 引出本文方法
- 研究目标
- 研究方法
- 二、相关工作
- 2.1 传统的场景重建与渲染
- 2.2 神经渲染和辐射场
- 2.3 基于点的渲染和辐射场
- 三、概述
- 四、可微3D高斯溅射
- 五、基于自适应密度控制的3D高斯优化
- 5.1 优化
- 5.2 高斯分布的自适应控制
- 六、高斯函数的快速可微光栅化
- 七、实施情况,结果以及评估
- 7.1 实现
- 7.2 结果与评价
- 7.3 消融
- 7.4 局限性
- 八、讨论与结论
- 致谢
- 参考文献
- 附录A 梯度计算细节
- 附录B 优化与密集化算法
- 附录C 渲染器的详细信息
- 附录D 每个场景的误差度量
- 参考资料
文章信息
用于实时辐射场渲染的3D高斯溅射算法
https://doi.org/10.1145/3592433
摘要
图1 我们的方法实现了辐射场的实时渲染,其渲染效果与现有方法[Barron et al 2022]一样有着最佳渲染效果,所以仅仅需要优化时间来超越现有的方法[Fridovich-Keil and Yu et al 2022; Müller et al 2022]。能够实现这样的效果关键是使用了一种新颖的3D高斯场景的表示方法,这为场景优化和新视图的合成提供了加速支持。注意,在相同训练时间下,我们实现了与InstantNGP[Müller et al 2022]方法相似的效果;同时,我们通过训练51分钟就实现了这个方法的最优效果,并且略优于Mip-NeRF360 [Barron et al 2022]方法。
背景
辐射场方法最近改变了用多张照片或视频进行场景捕获和新试图合成的方法。然而,要实现高质量的视觉效果仍然需要训练和渲染高成本的神经网络,并且最快的方式也要在速度和质量之间进行权衡。目前,对于无界并且完整的场景(不是孤立的对象)和1080p分辨率的渲染效果,没有任何方法可以实现实时速率的显示。
本文新方法
我们介绍了三个关键元素来使得我们实现最先进的视觉效果,同时保证训练时间的竞争性,最重要的是能够实现(>=30fps)的1080p分辨率的高质量实时新场景合成。
方法介绍
首先,从相机标定过程中产生的点云开始,我们用3D高斯来表示场景,这样在避免空空间不必要计算的同时保留了场景优化所需要的连续体积辐射场的特性;之后,我们实现3D高斯的交错优化/密度控制,特别是要优化各向异性方差来对场景进行精确表示;最后,我们设计了一个快速可感知的渲染算法,该算法可以支持各向异性飞溅,既加速了训练过程又可以进行实时渲染。
实验结果
我们在几个已有数据集上证明了(我们方法的)最先进的视觉质量和实时渲染效果。
CSS概念
计算方法->渲染;基于点的模型;光栅化;机器学习方法
关键词及短语
新的视图合成,辐射场,3D高斯,实时渲染
一、引言
背景-引入
- 常用方法介绍:由于网络和点的显式特点,并且适合很基于GPU/CUDA的快速光栅化,所以它们是最常见的3D场景表示方法。
- 最近研究介绍:而最近的神经辐射场(NeRF)方法建立于连续的场景表示之上,通常优化多层感知机(MLP)并使用体积射线来捕获场景进行新视图合成。类似(NeRF)地,目前为止最有效的辐射场解决方案是通过插值进行存储的,比如体素[Fridovich-Keil and Yu et al 2022]、散列[Müller et al 2022]、网格或点[Xu et al 2022]。
背景-当前问题
尽管这些方法的连续性有助于优化,然而渲染时所需的随机采样成本很高,同时可能会导致出现噪声。
引出本文方法
我们介绍了一种结合了两种世界最佳(方案效果)的新方法:我们的3D高速表示有着最先进的(SOTA)优化的视觉质量和有竞争力的训练时间,而我们基于平铺的飞溅方式在几个已有数据集[Barron et al 2022; Hedman et al 2018; Knapitsch et al 2017] (见图1)上实现了1080p分辨率的SOTA质量的实时渲染效果。
研究目标
- 本研究目标:我们的目标是要实现实时渲染多张照片拍摄的场景,同时创建与典型的真实场景已有最优效果一样快的优化时间的表示(方法)。
- 最近研究方法的局限性:最近的方法[[Fridovich-Keil and Yu et al 2022; Müller et al 2022]实现了快速训练,但是(该方法)很难达到和当前SOTA的NeRF方法一样的视觉质量,同时需要花费长达48小时的训练时间。快速但质量较低的辐射场方法能够根据场景实现交互式渲染时间(每秒10-15帧),但是无法实现高分辨率的 实时渲染。
研究方法
- 总概:我们的解决方案建立在三个主要组件上。
- 第一个组成部分-介绍3D高斯方法:我们首先介绍一个灵活且具有表现力的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高斯的属性-3D位置,不透明度𝛼,各向异性协方差和球谐(SH)函数-与自适应密度控制步骤相结合,其中我们在优化时添加和偶尔删除3D高斯。优化过程产生了一个合理紧凑的、非结构化和精确的场景表示(所有场景测试为1-5万高斯)
- 第三个组成部分-实时渲染方法:我们方法的第三个也是最后一个组成部分是我们的实时渲染解决方法,该方法遵循最近的工作[Lassner and Zollhofer 2021],使用快速GPU排序算法,并受到了基于平铺光栅化的启发。
然而,由于我们的3D高斯表示方法,我们可以执行遵从于可见性排序的各向异性飞溅-由于排序和𝛼混合-并可以通过跟踪所需的尽可能多的排序飞溅遍历来实现快速准确的向后传递。- 总结:总而言之,我们做出了以下贡献:
- 引入各向异性3D高斯模型作为辐射场的高质量非结构化表示。
- 一种3D高斯属性的优化方法,与自适应密度控制交织在一起,为捕获场景创建高质量的表示。
- GPU的快速可微分渲染方法是可感知的,允许各向异性飞溅和快速反向传播,来实现高质量的新颖视图合成。
- 取得的效果:我们在之前发表果的数据集上的结果表明,我们可以从多视图捕获中优化我们的3D高斯,并实现与先前最佳质量的隐式辐射场方法相同或更好的质量。我们还可以实现类似最快方法的训练速度和质量,最重要的是(我们)为新颖视图的合成提供了首个高质量的实时渲染(方法)。
二、相关工作
总述:我们首先简要概述了传统的重建,然后讨论了基于点的渲染和辐射场工作,讨论了它们的相似性;辐射场是一个广阔的领域,所以我们只关注直接相关的工作。关于该领域的完整性描述,请参阅最近优秀的调查[Tewari et al 2022; Xie et al 2022]。
2.1 传统的场景重建与渲染
第一种新视图合成方法是基于光场,首先进行密集采样[Gortler et al 1996; Levoy and Hanrahan 1996],然后可以非结构化捕获[Buehler et al 2001]。
- SfM介绍:运动恢复结构(SfM)[Snavely et al 2006]的出现使一个全新的领域成为可能,在这个领域中,可以使用照片集合来合成新颖的视图。SfM在相机校准期间估计稀疏点云,最初是用于3D空间的简单可视化。
- MVS的影响:多年来,之后的多视图立体(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 and Koltun 2020; Thies et al 2019]。这些方法的主要缺点是使用了基于MVS的几何结构;而且,使用CNN进行最终渲染经常会导致时间闪烁。
新视图合成的体积表示方法由Soft3D提出[Penner和Zhang 2017];- 目前已有的基于NeRF的解决方案:之后提出了结合体积射线的深度学习技术[Henzler et al 2019; Sitzmann et al 2019],该技术建立在连续可微密度场的基础上来表示几何形状。由于查询体积所需大量样本,使用体积光线推进进行渲染的方法成本较高。神经辐射场(NeRFs)引入了重要性采样和位置编码来提高质量,但是由于使用了大型的多层感知机,影响了速度。NeRF的成功导致后续方法的大量涌现,这些方法通常是引入正则化策略来解决质量和速度问题;Mip-NeRF 360有着当前最优的新视图合成图像质量[[Barron et al 2022]]。
- 基于NeRF方案的缺陷:尽管渲染质量很好,但是训练时间和渲染时间仍然很长;
- 我们方法的优势:我们能够达到甚至在某些情况下超过这种渲染质量,还可以快速训练和实时渲染。
- 已有方法如何进行快速训练和渲染?:最近的方法主要通过三种设计方式来实现更快训练或渲染:使用空间数据结构来存储(神经)特征,之后在体积射线行进期间进行内插,不同的编码和MLP能力。这些方法包括空间离散化的不同变体[Chen et al 2022b,a; Fridovich-Keil and Yu et al 2022; Garbin et al 2021; Hedman et al 2021; Reiser et al 2021; Takikawa et al 2021; Wu et al 2022; Yu et al 2021]、码本[Takikawa et al 2022],和哈希表等编码[Müller et al 2022],可以使用更小的MLP或完全的前述神经网络[Fridovich-Keil and Yu et al 2022; Sun et al 2022]。这些方法中值得注意的是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 et al 2005; Pfister et al 2000; Ren et al 2002; Zwicker et al 2001b]。
- 可微点渲染方法介绍:最近人们对基于可微点的渲染技术很感兴趣[Wiles et al 2020; Yifan et al 2019]。用神经增强点,并使用CNN进行渲染[Aliev et al 2020; Rückert et al 2022],从而实现快速甚至实时视图合成;
- 可微点渲染方法缺陷:然而它们仍然依赖于MVS来获取初始的几何形状,因此会继承它的缺陷,最明显的在诸如无特征/反光区域或薄结构等棘手情况下出现过度或不足的重建。
- 𝛼-blending与NeRF介绍: 基于点的𝛼-blending和NeRF风格的体绘制在本质上共享相同的图像形成模型。具体来说,颜色𝐶是沿着光线的体绘制:
C=∑i=1NTi(1−exp(−σiδi))ciwithTi=exp(−∑j=1i−1σjδj)(1)C=\sum_{i=1}^{N} T_{i}\left(1-\exp\left(-\sigma_{i}\delta_{i}\right)\right)\mathbf{c}_{i} \quad \text{with} \quad T_{i}=\exp\left(-\sum_{j=1}^{i-1}\sigma_{j}\delta_{j}\right) \tag{1}C=i=1∑NTi(1−exp(−σiδi))ciwithTi=exp(−j=1∑i−1σjδj)(1)其中密度𝜎、透射率𝑇和颜色c的样本沿射线取间隔δi\delta_{i}δi
,这样可以重写为
C=∑i=1NTiαici(2)C=\sum_{i=1}^{N} T_{i} \alpha_{i} \mathbf{c}_{i} \tag{2} C=i=1∑NTiαici(2)
其中αi=(1−exp(−σiδi))andTi=∏j=1i−1(1−αj)\alpha_{i} = \left( 1 - \exp\left( -\sigma_{i}\delta_{i} \right) \right) \quad \text{and} \quad T_{i} = \prod_{j=1}^{i-1} \left( 1 - \alpha_{j} \right) αi=(1−exp(−σiδi))andTi=j=1∏i−1(1−αj)
典型的基于神经点的方法(例如,[Kopanas et al 2022, 2021])通过混合重叠像素的
N\mathcal{N} N
个有序点来计算像素的颜色𝐶:C=∑i∈Nciαi∏j=1i−1(1−αj)(3)C=\sum_{i\in\mathcal{N}} c_{i} \alpha_{i} \prod_{j=1}^{i-1} \left(1 - \alpha_{j}\right) \tag{3} C=i∈N∑ciαij=1∏i−1(1−αj)(3)
其中cic_{i} ci
是每个点的颜色,αi\alpha_{i} αi
是通过评估具有协方差的2D高斯Σ[Yifan et al 2019]与学习到的每个点不透明读相乘得到的。
从公式2和公式3我们可以清楚地看出,图像的形成模型是相同的。然而,渲染算法有很大不同。NeRFs是一种连续表示,隐式地表示空/占用空间;公式2中的样本需要昂贵的随机采样来找到,同时也有随之而来的噪声和计算费用。相比之下,点是一种非结构化的、离散的表示,足够灵活,可以像NeRF一样创建、破坏和位移几何图形。这是通过优化不透明度和位置来实现的,如之前的工作所示[Kopanas et al 2021],同时避免了完整体表示的缺点。
7. 我们的渲染方法的灵感来源:Pulsar[Lassner and Zollhofer 2021]实现了快速的球体栅格化,这启发了我们基于tile和排序的渲染器。
8. 我们渲染方法的特点:然而,根据上面的分析,我们希望在排序splat上保持(近似)常规的𝛼-blending,以具有体表示的优势:与它们的顺序无关方法,我们的光栅化具有可见性顺序。此外,我们在像素中的所有splat上反向传播梯度,并栅格化各向异性splat。这些部分有助于实现我们高质量的视觉效果(参见第7.3节)。此外,之前提到的方法也使用CNN进行渲染,导致时间不稳定。尽管如此,Pulsar的渲染速度[Lassner and Zollhofer 2021]和ADOP [Rückert et al 2022]是我们开发快速渲染方法的动力。
9. 神经点Catacaustics方法介绍:在关注高光效果的同时,神经点Catacaustics [Kopanas et al 2022]的基于扩散点的渲染轨迹通过使用MLP克服了这种时间不稳定性,但是仍然需要MVS几何作为输入。该类别中的新方法[Zhang et al 2022]不需要MVS,也使用SH来确定方向。
10. 神经点Catacaustics方法缺陷:然而,它仅仅能处理一个对象的场景,并且需要masks进行初始化。尽管对于低分辨率和低点数来说是快速的,但是对于如何将其扩展到典型数据集的场景是不清楚的[Barron et al 2022; Hedman et al 2018; Knapitsch et al 2017]。
11. 我们的方法的特点:我们使用3D高斯分布进行更灵活的场景表示,不需要使用MVS几何体,并且实现了实时渲染,这要归功于我们的基于tile的投影高斯分布渲染算法。
12. 已有方法缺陷-不能实时显示速率:最近一种方法[Xu et al 2022]使用径向基函数的方法来用点来表示辐射场。他们在优化过程中使用点修剪和密集技术,但是使用体积射线行进不能实现实时显示速率。
13. 3D高斯的应用:在人体行为捕获领域,3D高斯模型已经被用于表示捕获的人体[Rhodin等人2015;Stoll et al 2011];最近,它们被用于体积射线行进的视觉任务[Wang et al 2023]。神经体积基元也在类型的背景下被提出[Lombardi et al 2021]。尽管这些方法启发了我们选择3D高斯作为场景表示,但是它们专注于重建和渲染单个鼓励的物体(人体或人脸)这种特定情况,导致了场景深度与复杂度较小。
14. 我们运用3D高斯和已有方法的区别/优势:相比之下,我们的对于各向异性协方差的优化,交错优化/密度控制,以及用于渲染的高效深度排序,可以处理包括背景在内的完整的复杂场景,无论是室内还是室外,都具有较大的深度复杂度。
三、概述
我们方法的输入是一组静态场景的图像,以及由SfM[Schönberger和Frahm 2016]进行相应的相机校准,其副作用是产生稀疏点云。基于这些点,我们创建了一组3D高斯(第4节),由位置(均值)、协方差矩阵和不透明度𝛼定义,这是非常灵活的优化机制。这导致了3D场景的合理紧凑的表示,其部分原因是高度各向异性的体积的splat能够被用于紧凑地表示精细结构。辐射场的方向外观分量(颜色)用球谐函数(SH)表示,遵循标准做法[Fridovich-Keil and Yu et al 2022; Müller et al 2022]。我们的算法通过3D高斯参数的一系列优化步骤,即位置、协方差,𝛼和SH系数于自适应控制高斯密度的操作相交叉来进一步创建辐射场表示(第5节).我们的方法是实现高效率的关键是我们基于tile的光栅器(第6节),它允许𝛼-blending和各向异性splat,多亏了快速排序使可见性顺序等方法(的快速实现成为可能)。快速光栅化还包括通过追踪累积𝛼值的快速向后传播,对可接收梯度的高斯数没有限制,我们方法的概述如图2所示。
图2 优化从稀疏的SfM点云开始,同时创建一组3D高斯分布。然后优化和自适应控制这组高斯分布的密度。在优化的过程中,我们使用快速的基于tile的渲染器,与SOTA快速辐射场方法相比,训练时间可观。并且经过训练后,我们的渲染器可以实时导航各种场景。
四、可微3D高斯溅射
本文优化目标:本文的目标是优化一种场景表示,从没有法线的稀疏点集(SfM)开始,可以实现高质量的新视图合成。
如何做到?:要做到这一点,我们需要一个继承可微体表示的属性的基元,同时是非结构化和显示的,来实现非常快速的渲染。
选择3D高斯的原因:我们选择3D高斯,因为它是可微的,可以很容易投影到2D splat,同时可以进行快速𝛼-blending渲染。
我们的表示方式:我们的表示方法与之前使用2D点的方法类似[Kopanas et al 2021; Yifan et al 2019],并且假设每个点都是一个具有法线的小平面圆。考虑到SfM点的极端稀疏性,是很难估计法向量的。同样,从这样的估计中优化有极大噪声的法向量是及具挑战性的。然而,我们将几何图形建模作为一组3D高斯模型是不需要法线的。我们的高斯分布由一个定义在世界空间中的完整的3D协方差矩阵所确定[Zwicker et al 2001a]。以点(均值)𝜇为中心:
G(x)=e−12(x)TΣ−1(x)(4)G(\mathbf{x}) = e^{-\frac{1}{2}(\mathbf{x})^{T}\mathbf{\Sigma}^{-1}(\mathbf{x})} \tag{4} G(x)=e−21(x)TΣ−1(x)(4)
在我们的混合过程中,这个高斯函数要乘𝛼。
然而,我们需要把我们的3D高斯模型投影到2D来进行渲染。Zwicker et al [2001a]演示了如何将这种投影到图像空间。给定一个视图变换𝑊,在相机坐标系中的协方差矩阵Σ’如下所示:Σ′=JWΣWTJT(5)\mathbf{\Sigma}' = J W \mathbf{\Sigma} W^{T} J^{T} \tag{5} Σ′=JWΣWTJT(5)
其中𝐽是射影变换中仿射近似的雅可比矩阵。Zwicker et al [2001a]还表明,如果我们跳过Σ’的第三行和第三列,我们将得到一个2×2的方差矩阵,其结构和特性与从具有法线的平面点开始的情况相同,这与之前的研究[Kopanas等人2021]结果一致。
- 我们的优化参数方法:一个显而易见的方法就是直接优化协方差矩阵Σ来获得代表辐射场分布的3D高斯分布。然而协方差矩阵只有在半正定是才具有物理意义。为了优化我们所有的参数,我们采用了梯度下降法,但这种方法难以被有效约束来生成有效的矩阵,而且更新步骤和梯度很容易导致生成无效的协方差矩阵。因此,我们选择了一种更直观但同样具有表现力的表示方式来优化。3D高斯分布的协方差矩阵Σ与描述椭球体的形状类似。给定一个缩放矩阵𝑆和旋转矩阵𝑅,我们可以找到相应的Σ:
Σ=RSSTRT(6)\Sigma = R S S^{T} R^{T} \tag{6} Σ=RSSTRT(6)
为了能够分别对这两个因素进行独立优化,我们将其分开存储:一个用于缩放的3D向量𝑠和一个用于表示旋转的四元数𝑞。这些可以直接转换为各种的矩阵并进行组合,同时要确保将𝑞进行标准化处理,从而得到一个有效的单位四元数。为了避免训练过程中由于自动微分而产生的显著开销,我们明确推导出了所有参数的梯度。具体的导数计算详见附录A。
A 梯度计算的细节
回想一下,Σ/Σ’是高斯分布的世界/视图空间协方差矩阵,𝑞是旋转,𝑠是缩放,𝑊是视图变换,𝐽是投射变换的仿射近似的雅可比矩阵。我们可以使用链式法则来求出缩放和旋转的导数:
dΣ′ds=dΣ′dΣdΣds(8)\frac{d\Sigma^\prime}{d s} = \frac{d\Sigma^\prime}{d\Sigma} \frac{d\Sigma}{d s} \tag{8} dsdΣ′=dΣdΣ′dsdΣ(8)
和dΣ′dq=dΣ′dΣdΣdq(9)\frac{d\Sigma^{\prime}}{d q} = \frac{d\Sigma^{\prime}}{d\Sigma}\frac{d\Sigma}{d q} \tag{9} dqdΣ′=dΣdΣ′dqdΣ(9)
将等式5进行简化,设𝑈 = 𝐽𝑊,Σ ′为UΣUT中(对称的)上左2×2矩阵,用下标表示矩阵,我们可得偏导数
∂Σ′∂Σij=(U1,iU1,jU1,iU2,jU1,jU2,iU2,iU2,j)\frac{\partial\Sigma^{\prime}}{\partial\Sigma_{ij}} = \left( \begin{array}{ll} U_{1,i}U_{1,j} & U_{1,i}U_{2,j} \\ U_{1,j}U_{2,i} & U_{2,i}U_{2,j} \end{array} \right) ∂Σij∂Σ′=(U1,iU1,jU1,jU2,iU1,iU2,jU2,iU2,j)接下来,我们求出导数 𝑑Σ/𝑑𝑠 和 𝑑Σ/𝑑𝑞。由于Σ=RSSTRT因此我们可以计算出 M = R S ,并将其重写为 Σ = M MT。因此,我们可以写做:
dΣds=dΣdMdMds\frac{d \Sigma}{d s} = \frac{d \Sigma}{d M} \frac{d M}{d s}dsdΣ=dMdΣdsdM和
dΣdq=dΣdMdMdq\frac{d\Sigma}{d q} = \frac{d\Sigma}{dM} \frac{dM}{d q}dqdΣ=dMdΣdqdM
由于协方差矩阵 Σ(及其梯度)是对称的,所以共同的前一部分可以通过dΣdM=2MT\frac{d\Sigma}{d M} = 2M^{T} dMdΣ=2MT
来紧凑地求得。
为了实现缩放,我们还得出:
∂Mi,j∂sk={Ri,kif j=k0otherwise}\frac{\partial M_{i,j}}{\partial s_{k}} = \left\{ \begin{array}{cc} R_{i, k} & \text{if } j = k \\ 0 & \text{otherwise} \end{array} \right\} ∂sk∂Mi,j={Ri,k0if j=kotherwise}
为了求出旋转的梯度,我们回顾了一下具有实部𝑞𝑟和虚部𝑞𝑖 , 𝑞𝑗 , 𝑞𝑘的单位四元数𝑞 转换为旋转矩阵 𝑅 的过程:R(q)=2(12−(qj2+qk2)(qiqj−qrqk)(qiqk+qrqj)(qiqj+qrqk)12−(qi2+qk2)(qjqk−qrqi)(qiqk−qrqj)(qjqk+qrqi)12−(qi2+qj2))(10)R(q)=2\begin{pmatrix} \frac{1}{2}-\left(q_{j}^{2}+q_{k}^{2}\right) & \left(q_{i}q_{j}-q_{r}q_{k}\right) & \left(q_{i}q_{k}+q_{r}q_{j}\right) \\ \left(q_{i}q_{j}+q_{r}q_{k}\right) & \frac{1}{2}-\left(q_{i}^{2}+q_{k}^{2}\right) & \left(q_{j}q_{k}-q_{r}q_{i}\right) \\ \left(q_{i}q_{k}-q_{r}q_{j}\right) & \left(q_{j}q_{k}+q_{r}q_{i}\right) & \frac{1}{2}-\left(q_{i}^{2}+q_{j}^{2}\right) \end{pmatrix} \tag{10} R(q)=221−(qj2+qk2)(qiqj+qrqk)(qiqk−qrqj)(qiqj−qrqk)21−(qi2+qk2)(qjqk+qrqi)(qiqk+qrqj)(qjqk−qrqi)21−(qi2+qj2)(10)
因此,我们得出以下关于 𝑞 的各组成部分的梯度值:
∂M∂qr=2(0−syqkszqjsxqk0−szqi−sxqjsyqi0),∂M∂qi=2(0syqjszqksxqj−2syqi−szqrsxqksyqr−2szqi)∂M∂qj=2(−2sxqjsyqiszqrsxqi0szqk−sxqrsyqk−2szqj),∂M∂qk=2(−2sxqk−syqrszqisxqr−2syqkszqjsxqisyqj0)(11)\begin{aligned} &\frac{\partial M}{\partial q_{r}} = 2\left(\begin{array}{ccc} 0 & -s_{y}q_{k} & s_{z}q_{j} \\ s_{x}q_{k} & 0 & -s_{z}q_{i} \\ -s_{x}q_{j} & s_{y}q_{i} & 0 \end{array}\right), \quad \frac{\partial M}{\partial q_{i}} = 2\left(\begin{array}{ccc} 0 & s_{y}q_{j} & s_{z}q_{k} \\ s_{x}q_{j} & -2s_{y}q_{i} & -s_{z}q_{r} \\ s_{x}q_{k} & s_{y}q_{r} & -2s_{z}q_{i} \end{array}\right) \\ \\ &\frac{\partial M}{\partial q_{j}} = 2\left(\begin{array}{ccc} -2s_{x}q_{j} & s_{y}q_{i} & s_{z}q_{r} \\ s_{x}q_{i} & 0 & s_{z}q_{k} \\ -s_{x}q_{r} & s_{y}q_{k} & -2s_{z}q_{j} \end{array}\right), \quad \frac{\partial M}{\partial q_{k}} = 2\left(\begin{array}{ccc} -2s_{x}q_{k} & -s_{y}q_{r} & s_{z}q_{i} \\ s_{x}q_{r} & -2s_{y}q_{k} & s_{z}q_{j} \\ s_{x}q_{i} & s_{y}q_{j} & 0 \end{array}\right) \end{aligned} \tag{11} ∂qr∂M=20sxqk−sxqj−syqk0syqiszqj−szqi0,∂qi∂M=20sxqjsxqksyqj−2syqisyqrszqk−szqr−2szqi∂qj∂M=2−2sxqjsxqi−sxqrsyqi0syqkszqrszqk−2szqj,∂qk∂M=2−2sxqksxqrsxqi−syqr−2syqksyqjszqiszqj0(11)
求取四元数归一化的梯度是非常简单的。
这种各向异性协方差的表示形式-适用于优化-使我们能够对3D高斯分布进行优化,来适应所捕获场景中不同形状的几何结构,从而实现较为紧凑的表示形式。图3展现了这种情况。
图3 在优化处理后,我们将3D高斯分布图形模型缩小了60%,结果如图所示(最右侧)。这清楚地表明了3D高斯的各向异性形状,这些形状在优化后能够紧凑地表示复杂的几何形状。左侧是真实渲染的图像
五、基于自适应密度控制的3D高斯优化
总述:我们方法的核心在于优化步骤,该步骤会生成一组密集的3D高斯分布,能够准确地描绘出场景的特征,实现自由视图的合成。除了位置𝑝,𝛼以及协方差Σ以外,我们还优化了代表每个高斯分布颜色𝑐的SH系数,以准确捕捉场景在不同视角下的外观特征。这些参数的优化与控制高斯密度的步骤交替进行,以更好地表示场景。
5.1 优化
- 优化过程如何实现?:该优化过程是通过反复的渲染操作来实现的,每次都会将生成的图像与采集数据集中的训练视图进行对比。不可避免的是,由于3D到2D投影的不明确性,几何图形可能会被错误地摆放。因此,我们的优化需要既能创建几何图形,也能在几何图形位置不正确时对其进行删除或移动。3D高斯分布协方差参数的质量对于表示的紧凑性至关重要,因为通过少量大型各项异性高斯分布就能捕捉到较大的均匀区域。
- 随机梯度下降法的使用:我们采用随机梯度下降算法进行优化,充分利用了标准GPU加速框架,并能够为某些操作添加自定义的CUDA核心,遵循了近期的最佳实践[fridovic - keil和Yu等人2022;Sun et al 2022]。特别地,我们所采用的快速栅格化技术(见第6节)对于优化的效率至关重要,因为它是整个优化过程中的主要计算瓶颈。
- sigmoid激活函数和指数型激活函数的使用:我们为参数𝛼使用了sigmoid激活函数,将其限制在[0−1)范围内,并且可以获得平滑的梯度;同时,处于类似的原因,我们还使用了协方差规模的指数型激活函数。
- 协方差矩阵的使用:我们将初始协方差矩阵设定为一个各向异性的高斯分布,其轴方向与距离最近的三个点的平均值所构成的连线方向相同。
- 损失函数的使用:我们采用了与Plenoxels [Fridovich-Keil and Yu et al. 2022]类似的一种标准的指数衰减调度技术,但仅应用于位置信息上。损失函数是
L1\mathcal{L}_{1} L1
与一个D-SSIM项的组合:
L=(1−λ)L1+λLD-SSIM(7)\mathcal{L} = (1 - \lambda) \mathcal{L}_{1} + \lambda \mathcal{L}_{\text{D-SSIM}} \tag{7} L=(1−λ)L1+λLD-SSIM(7)
在我们的所有测试中,我们都使用了𝜆 = 0.2这个值。我们在7.1节中详细地介绍了学习计划以及其他相关内容。
5.2 高斯分布的自适应控制
我们首先基于SfM获取初始的稀疏点集,然后应用我们的方法来自适应地控制高斯分布的数量及其在单位体积内的密度1(1当然,高斯分布的密度不应与NeRF中的密度𝜎相混淆)。
每100次迭代移除不透明度小于阈值的点:在优化预热阶段(见7.1节)之后,我们每100次迭代进行一次数据的密集化处理,并移除任何透明度极低的高斯分布,即其中的参数𝛼小于
ϵα\epsilon_{\alpha} ϵα
。
我们对高斯分布的自适应控制需要填补空白区域。它主要针对那些几何特征缺失(即“重建不足”)的区域,同时也针对那些在场景中由高斯分布覆盖大面积区域的场景(这些区域对应于“过度重建”)。我们观察到,两者在视图控件中都有很大的位置梯度。直观地说,这很可能是由于这些区域尚未得到充分重建,而优化过程则试图移动高斯分布来纠正这一情况。对于重建不充分的区域会出现较大的梯度:由于这两种情况都适合进行密度化处理,因此我们对视空间位置梯度的平均幅度高于阈值
τpos\tau_{\text{pos}} τpos
的高斯函数进行密度化处理,在我们的测试中,我们将该阈值设置为0.0002。
接下来,我们将详细介绍这一过程,如图4所示。
图4 我们的自适应高斯密度化方案。最上面一行(重建不足):当小规模几何结构(黑色轮廓)未被完全覆盖时,我们会复制相应的高斯函数。最下面一行(过度重建):如果小规模的几何图形由一个大的splat表示,我们将其分为两部分。
具体针对“重建不足”区域的操作:对于重建不足区域较小的高斯分布而言,我们需要覆盖并确定必须创建的新的几何结构。为此最好是对高斯函数进行克隆操作,即简单地创建一个相同大小的副本,并沿着位置梯度的方向移动它。
具体针对“过度重建”区域的操作:另一方面,在方差较高的区域,较大的高斯分布需要被分割成较小的高斯分布。我们用另外两个新的高斯函数来替代这些高斯函数,并将它们的尺度值除以一个系数𝜙= 1.6,这个系数是通过实验决定的。我们还通过使用原始的3D高斯分布作为采样PDF来初始化它们的位置。
在第一种情况下,我们会检测并处理需要同时增加系统总体积和高斯分布数量的问题;而在第二种情况下,我们会保持总体积不变,但增加高斯分布的数量。周期性将不透明度𝛼的值置为0来去除floaters:与其他体积表示方式一样,我们的优化过程可能会在靠近输入相机的漂浮点上停滞不前;在我们的情况下,这可能会导致高斯密度出现不合理的增加。一种有效控制高斯分布数量增加的方法是,在每进行N = 3000次迭代时,将𝛼的值设置为接近零的值。随后,该优化方法会在需要的情况下增加高斯函数中的𝛼值,同时允许我们的剔除方法移除上述𝛼值小于
ϵα\epsilon_{\alpha} ϵα
的高斯函数。周期性去除较大的高斯分布避免重叠:高斯分布的数值可能会增大或减小,并且会与其他分布有一定程度的重叠,但我们会定期移除在世界空间中数值过大或在视图空间中覆盖范围过大的高斯分布。
这种策略能偶有效地对高斯分布的总数进行整体控制。在我们的模型中,高斯分布始终在欧几里得空间中保持为基本形态;与其他方法[Barron et al 2022; Fridovich-Keil and Yu et al 2022]不同,我们不需要针对距离较远或较大的高斯分布来采用空间压缩、变形或投影策略。
六、高斯函数的快速可微光栅化
本文的实现的目标:我们的目标是实现快速的整体渲染和快速排序,以便能够近似𝛼-blending-包括各向异性splat-并且避免像之前研究[Lassner and Zollhofer 2021]中那样能够接收具有梯度的splat数量的严格限制。
本文的实现方法:为了实现这些目标,我们设计了一种基于tile的栅格化器,用于处理高斯splat,其灵感来源于近期的软件栅格化方法[Lassner and Zollhofer 2021]。该栅格化器可以一次性对整个图像的图元进行预先排序,从而避免了以往对每个像素进行排序所带来的成本,这种排序方式曾阻碍了之前𝛼-blending解决方[Kopanas et al 2022, 2021]。我们的快速栅格化器能够高效地对任意数量的混合高斯函数进行反向传播,并且额外的内存消耗极低,每像素仅需固定的开销。我们的栅格化流程是完全可微的,而且通过将数据投影到二维平面(见第4节)后,能够对具有各向异性特征的splat进行栅格化处理,其效果类似于之前的二维splat绘制方法[Kopanas et al 2021]。
分割图像,筛选3DGS:我们的方法首先将屏幕分割成16×16的tiles,然后针对视锥体以及每个小块对高斯函数进行筛选。具体而言,我们只保留那些具有99%置信区间且该区间与视锥体相交的高斯分布。此外,我们采用一个保护带来简单地剔除处于极端位置的高斯分布(即那些均值接近近平面且远在视锥体之外的分布),因为计算其投影的二维协方差会存在不稳定的情况。
对筛选出的高斯进行深度排序: 然后,我们根据每个高斯分布函数所覆盖的tile的数量对其进行实例化,并为每个实例分配一个包含视图控件深度的tile ID的组合键。然后,我们利用单个高性能的GPU基于这些键对高斯分布进行排序[Merrill and Grimshaw 2010].注意,这里没有对每个像素点进行额外的排序操作,而是根据这一初始排序来进行混合处理。因此,在某些情况下,我们的𝛼-blending可能是近似的。然而,当splat的大小接近单个像素大小时,这些近似值就变得可以忽略不计。我们发现,这一选择极大地提升了训练和渲染的效率,同时在融合场景中也不会产生明显的瑕疵。
对高斯分布进行排序后,我们通过找出给定tile相匹配的深度排序列表中的第一个和最后一个元素,为每个tile生成一个列表。每个tile并行地splat:对于栅格化处理,我们为每个tile启动一个线程块。每个块首先会协同高斯分布的包加载到共享内存中,然后针对给定的像素,通过从前向后遍历列表的方式累加颜色和𝛼值,从而在数据加载/共享以及处理方面最大限度地提高并行性。
若像素不透明度α饱和则停止相应进程:饱和当在一个像素中达到参数𝛼的饱和值时,相应的线程就会停止运行。每隔一定时间,会对一个tile中的线程进行查询,当所有像素都达到饱和状态(即𝛼值趋近于1)时,这个tile的处理就会终止。有关排序的详细信息以及整个光栅化方法的高层次概述均在附录C中有所介绍。
附录C 渲染器的细节
排序。我们的设计基于这样一个假设:存在大量较小的splat,为此,我们通过在每一帧开始时使用基数排序对碎片进行一次排序来进行优化。我们将屏幕分割成16×16像素大小的tiles(或称为bins)。我们通过在每个与之重叠的16×16的tile中实例化每个splat的方式来为每个tile创建一个splat列表。这导致需要处理的高斯分布数量有所适度增加,但这一增加效应被更简单的控制流程以及优化后的GPU基数排序的高并行性所抵消[Merrill and Grimshaw 2010]。我们为每个splats实例分配一个长度最多为64位的密钥,其中低32位用于编码其投影深度,而高32位则用于编码重叠图块的索引。索引的精确大小取决于当前分辨率下能容纳多少个tile。因此,对于所有斑点图像,深度排序这一问题都能在并行处理的同时通过单一的基数排序法得到直接解决。经过排序后,我们能够高效地生成每个tile对应的高斯分布列表,从而通过识别排序数组中具有相同tile标识的范围的起始和结束位置来进行处理。这是同时进行的,为每个64位数组元素启动一个线程,以将该元素的较高32位与其两个相邻元素的相应位进行比较。与[Lassner and Zollhofer 2021]相比,我们的栅格化处理方式彻底摒弃了逐个基本图形的处理步骤,并生成了在前向处理过程中更紧凑的每个图元列表以供遍历。们在算法2中对采样化方法进行了高层次的概述。
算法2 3D高斯分布的GPU软件栅格化
𝑤、ℎ:要转为栅格图形式的图像的宽度和高度
𝑀、𝑆:在世界空间中的高斯均值和协方差
𝐶、𝐴:高斯颜色和不透明度
𝑉 :当前摄像机的视图配置
数值稳定性。在反向传播过程中,我们通过将前向传播中累积的不透明度值依次除以每个高斯函数的 𝛼 值,来重建用于梯度计算所需的中间不透明度值。如果处理方式简单粗暴,这一过程很可能会出现数值不稳定的情况(比如出现除以零的情况)。为了解决这个问题,在前向和后向传递过程中,我们都跳过任何 α 值小于 𝜖 的混合更新(我们将𝜖进行限制,使其不超过 0.99。最后,在将高斯滤波器纳入正向栅格化处理流程之前,我们会计算如果加入该滤波器后的累积不透明度值,并在其值超过0.9999之前停止从前向后进行混合操作。
在栅格化的过程中,𝛼的饱和度是唯一的终止条件。与以往的工作不同,我们并未对接受梯度更新的混合几何体的数量进行限制。我们确立了这一特性,以便使我们的方法能够处理具有任意不断变化的深度复杂度的场景,并能够准确地对其进行学习,而无需进行针对特定场景的超参数调整。在反向传播过程中,因此我们必须在正向传播过程中获取每个像素点的完整混合点序列。一种解决方案是将每个像素点的任意长度的混合点列表存储在全局内存中[Kopanas et al 2021]。
- 反向传播误差时按tile对高斯进行索引:为避免隐含的动态内存管理开销,我们转而选择再次遍历这些分块列表;我们可以重复利用前向传播过程中得到的高斯分布和tile排序数组。为了便于进行梯度计算,我们现在采用从后向前的顺序来遍历这些数据。该遍历过程从影响到该tile中任何像素的最后一个点开始,然后再次将这些点加载到共享内存中,这一过程是协同进行的。此外,只有当每个像素的深度小于或等于向前传递过程中影响其颜色的上一个点的深度时,才会开始(耗时的)重叠测试以及对这些点的处理。第4节中所描述的梯度计算需要在原始混合过程中每一步所积累的不透明度值。在反向传播过程中,我们无需逐一查阅逐步减小的不透明度列表,而是可以通过在向前传播结束时仅存储总累积透明度来恢复这些中间的不透明度。具体而言,在正向处理过程中,每个点都会存储最终累积的不透明度值𝛼。我们通过将此值除以我们在逆向遍历过程中每个点的𝛼值,从而得到用于梯度计算所需的系数。
七、实施情况,结果以及评估
接下来,我们将讨论一些实施细节,展示研究结果,并对我们的算法与先前工作以及消融研究进行评估。
图5 我们展示了我们方法与以往方法的对比情况,以及从未参与训练的测试视角获取的相应真实图像。这些场景自上而下依次为:来自Mip-NeRF360数据集的“自行车”、“花园”、“树桩”、“柜台”和“房间”;DrJohnson的Deep Blending数据集[Hedman et al 2018]中的“游戏室”以及Tanks&Temples的“卡车”和“火车”。不明显的质量差异通过箭头/图例突出显示出来了。
表1 我们的方法基于三个数据集与以往的研究进行定量评估。标有星号“†”的结果直接取自原始论文,其余结果均是在我们自己的实验中得出的。
图6 在某些场景(如上图所示)中,我们可以看到,即便在 7K 次迭代(对于此场景大约需要 5 分钟)的情况下,我们的方法也很好地捕捉到了列车的影像。在 30000 次迭代(约 35 分钟)后,背景杂波已显著减少。对于其他场景(如下所示),其差异几乎难以察觉;7000 次迭代(约 8 分钟)就已经达到了非常高的质量了。
表2 合成 NeRF 的 PSNR 分数方面,我们从 10 万个随机初始化的点开始计算。从各篇论文中提取出的相互对比的指标。
7.1 实现
我们使用Python,并借助PyTorch框架实现了我们的方法,并为栅格化编写了自定义的CUDA内核,这些内核是基于之前方法[Kopanas et al 2021]的扩展版本,并且使用了NVIDIA CUB排序程序中的快速基数排序方法[Merrill and Grimshaw 2010]。我们还使用开源软件SIBR[Bonopera et al 2020]构建了一个交互式查看器,用于实现交互式查看功能。我们利用这一实现方式来测量所达到的帧率。源代码以及我们所有的数据均可在以下网址获取:https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/
优化细节。为了保证稳定性,我们在较低分辨率下先进行“热身”(预处理)计算。具体而言,我们先以四分之一的图像分辨率开始优化过程,并在250和500次迭代后上采样两次。
SH系数优化对角度信息的缺乏这种情况较为敏感。对于那些典型的“类似NeRF的”拍摄方式,即通过围绕中心物体的整个半球所拍摄的照片来观察该物体这种方式而言,这种优化方法效果良好。然而,如果捕获过程中存在角部区域缺失的情况(例如,在捕获场景的角落时,或者进行“由内向外”[Hedman et al 2016]的捕获操作时),那么优化过程中可能会产生与SH的零阶分量(即基础色或漫反射色)完全不符的值。为了解决这个问题,我们首先只对零阶部分进行优化,然后每执行1000次迭代后引入一个SH频带,直至涵盖所有4个SH频带。
7.2 结果与评价
结果。我们对我们的算法进行了测试,测试对象包括从先前发布的数据集中选取的总共13个真实场景,以及来自Blender合成数据集[Mildenhall et al 2020]中的场景。特别地,我们对Mip-Nerf360[Barron et al 2022]中呈现的全部场景集以及来自Tanks&Temples数据集[2017]的两个场景以及Hedman等人[Hedman et al. 2018]提供的两个场景,采用了我们的方法进行测试,这些场景时当前NeRF渲染质量的最高水平。我们选取的这些场景有着截然不同的拍摄风格,既包括有明确边界的室内场景,也涵盖广阔无边的户外环境。在我们的评估中,所有实验均采用相同的超参数配置。所有结果均是在 A6000 GPU上运行得出的,除了 Mip-NeRF360 方法(详情见下文)。
此外,我们还展示了一组场景的渲染视频路径,这些场景中的画面与输入照片中的画面视角差异较大。
真实世界的场景。就质量而言,目前的顶尖技术是 Mip-Nerf360[Barron et al 2021]。我们将此方法作为衡量标准进行对比。我们还与两种最新的快速 NeRF 方法进行了比较:InstantNG[Müller et al 2022] 和Plenoxels[Fridovich-Keil and Yu et al 2022]。
对于数据集,我们采用训练集/测试集划分方法,参考了 Mip-NeRF360 提出的方案,每 8 张照片中选取 1 张作为测试样本,以便进行一致且有意义的比较,从而生成误差指标。所使用的标准指标包括 PSNR(峰值信噪比)、L-PIPS(损失型图像质量评估)和 SSIM(结构相似性指数),这些指标在文献中最为常用;详情请见表 1。表格中的所有数字均来自我们对作者代码的自行运行结果,这些结果涵盖了所有先前的方法。但 Mip-NeRF360 在其数据集上的相关数据除外,在该数据集上,我们直接从原始出版物中复制了这些数字,以避免混淆当前的SOTA。对于我们图表中的图像,我们使用了我们自行开发的 Mip-NeRF360 系统:这些系统的运行数据详见附录D。
附录D 每个场景的误差度量
表4至表9列出了我们在所有考虑的技术和实际场景中所收集到的各种误差指标。我们列出了所使用的Mip-NeRF360数据集中的数值,以及我们在论文中用于生成图像的自定义数据集的数值;在整个Mip-NeRF360 数据集上,这些指标的平均值分别为:峰值信噪比(PSNR)为27.58,结构相似性指数(SSIM)为 0.790,LPIPS 值为0.240。
表4 Mip-NeRF360 场景的 SSIM 分数。† 摘自原始论文。
表5 Mip-NeRF360 场景的 PSNR 分数。† 摘自原始论文。
表6 Mip-NeRF360 场景的 LPIPS 分数。† 摘自原始论文。
表7 Tanks&Temples场景以及深度融合场景的 SSIM 分数。
表8 Tanks&Temples场景以及深度融合场景的峰值信噪比(PSNR)得分。
表9 Tanks&Temples场景以及深度融合场景的 LPIPS 分数。
我们还展示了平均训练时间、渲染速度以及用于存储优化参数所占用的内存情况。我们报告了 InstantNGP 基本配置(Base)的运行结果,其进行了 35000 次迭代;还报告了作者所建议的一个稍大一些的网络(Big)的运行结果;此外,我们还有两种配置,分别为 7000 次和 30000 次迭代。图6中我们展现了我们的两种配置在视觉效果上的差异。在很多情况下,7K 次迭代所达到的质量已经相当不错了。
表3 消融实验的 PSNR 分数。在本次实验中,我们手动将每个场景输入图像的高分辨率版本下采样至我们其他实验所设定的渲染分辨率。这样做可以减少随机产生的误差(例如,源于预下采样后的 Mip-NeRF360 输入中的JPEG压缩)。
训练时间因数据集而异,我们分别进行了报告。请注意,不同数据集中的图像分辨率也会有所不同。在该项目的网站上,我们提供了所有测试视图的渲染图,这些渲染图用于计算所有方法(包括我们自己的方法以及之前的研究成果)在所有场景中的统计结果。请注意,我们在所有渲染过程中都保留了原始输入的分辨率。
该表格显示,我们完全收敛的模型所达到的性能水平与目前SOTA的Mip-NeRF360 方法相当,有时甚至还要更好;请注意,在相同的硬件配置下,他们的平均训练时间是48小时2(2我们在一个配备 4 个GPU的A100节点上对 Mip-NeRF360 进行了12小时的训练,这相当于在单个 GPU上进行48小时的训练。),而我们的则为35至45分钟,而且他们的渲染速度为每帧10秒。请注意,A100系列的显卡比A6000系列的显卡运行速度更快。经过5到10分钟的训练,我们的模型能达到与InstantNGP和Plenoxels相当的精度,而进一步的训练时间则能让我们达到最先进的精度,这一点其他快速方法所不具备。对于Tanks&Temples,我们能够在与基础版“即时NGP”相似的训练时间内达到相当的品质(在我们的测试中,训练时间约为 7 分钟)。
我们还展示了这一对比的可视化结果,其中包含了我们所采用的渲染方法以及用于对比的先前方法在图5中所对应的未被纳入测试的视图;我们方法的测试结果是基于30000次训练迭代得出的。我们发现,在某些情况下,即便是Mip-NeRF360也存在一些我们的方法能够避免的瑕疵(例如,在“自行车”、“树桩”等场景中的植被模糊现象,或者在“房间”场景中的墙面模糊情况)。在补充的视频和网页中,我们对不同距离下的路径进行了对比展示。我们的方法能够较好地保留被充分覆盖区域的视觉细节,即便是在较远的距离下也是如此,而以往的方法往往做不到这一点。
合成有界场景。除了真实场景之外,我们还在合成的 Blender 数据集[Mildenhall et al 2020]上对我们的方法进行了评估。所提及的这些场景提供了详尽的一系列画面,其尺寸有限,并且包含了精确的拍摄参数。在这种情况下,即便采用随机初始化的方式,我们也能取得SOTA的效果:我们从一个包围场景边界的区域内随机生成 10 万个均匀分布的高斯随机数开始进行训练。我们的方法能够迅速且自动地将它们缩减至约6到10千个有意义的高斯分布。经过 30K次迭代后,训练模型的最终规模达到每个场景约200到500K个高斯分布。为了兼容性,我们在表2中使用白色背景进行了报告,并将我们取得的PSNR分数与之前的方法进行了比较。示例在图 10(从左数第二个图)以及补充材料中。经过训练的合成场景的渲染速度达到了180-300FPS。
紧密。与显式的明确场景表示方法相比,我们在优化过程中所使用的各向异性高斯分布能够以更少的参数来模拟复杂的形状。我们通过将我们的方法与[Zhang et al 2022]所获得的那些高度紧凑、基于点的模型进行对比评估,来展示这一点。我们从他们通过前景掩码进行空间分割所得到的初始点云开始,不断进行优化,直至达到与他们所公布的峰值信噪比值相当的水平。这种情况通常会在2到4分钟内发生。我们仅使用他们所报告数据量的四分之一就超过了他们的指标,最终模型的平均大小为 3.8MB,而他们的模型大小为 9MB。我们注意到,在本次实验中,我们仅使用了球谐函数的两种形式,与他们的方式类似。
7.3 消融
我们分离出了各自不同的贡献以及所采用的算法选择,并设计了一系列实验来评估其效果。具体而言,我们对我们的算法的以下方面进行了测试:基于SfM的初始化、密集化策略、各向异性协方差、允许无限数量的splat具有梯度这一特性,以及球谐函数的使用。表3总结了各选择的量化效果。
基于SfM的初始化。我们还评估了从SfM点云中初始化3D高斯分布的重要性。对于此次消融操作,我们均匀地选取了一个边长为输入相机边界框尺寸三倍的立方体。我们发现,我们的方法表现相当出色,即便没有使用SfM点,也能避免完全失败的情况。相反,它主要在背景中降解,见图7。此外,在那些训练视角覆盖不足的区域,随机初始化方法似乎存在更多的无法通过优化消除的“floaters多余元素”。另一方面,合成的 NeRF 数据集不存在这种现象,因为它没有背景,并且受到输入相机的严格限制(请参阅上述讨论)。
密集化。接下来,我们将对我们的两种密集化方法进行评估,更具体地说,就是第5节中所描述的克隆和拆分策略。我们分别禁用每个方法,并对其余方法进行优化,而将当前方法保持不变。结果表明,将大高斯函数进行拆分对于实现背景的良好重建至关重要(如图 8所示),而复制小高斯函数而非对其进行拆分则能实现更优且更快的收敛效果,尤其是在场景中出现细小结构时更是如此。
图7 使用SfM点进行初始化会有所帮助。上方:使用随机点云进行初始化。下方:使用 SfM 点进行初始化。
图8 针对“克隆”和“分裂”这两种情况的密集化策略的实施(第5节)。
图9 如果我们限制能够接收梯度的点的数量,那么对视觉效果的影响将是显著的。左侧:接收梯度的高斯函数数量上限为10个。右侧:我们的完整方法。
梯度splat的无限深度复杂性。我们评估是否在处理完最前面的 N 个点后省略梯度计算是否能提高速度且不牺牲质量,这与Pulsar[Lassner and Zollhofer 2021]中所提出的观点一致。在本次测试中,我们选择了 N = 10,这一数值比 Pulsar 中的默认值高出两倍,但由于梯度计算中的严重近似,导致优化过程变得不稳定。对于“卡车”场景,其峰值信噪比(PSNR)下降了 11 分贝(见表 3 中的有限带宽部分),其视觉效果如图 9 所示(针对“花园”场景)。
各向异性协方差。在我们的方法中,一个重要的算法选择是针对三维高斯分布的全协方差矩阵进行优化。为了展示这一选择的效果,我们进行了一项消融实验,即通过优化一个控制三维高斯函数在所有三个轴上的半径的单一标量值,来消除各向异性。优化的结果如图10所示。我们观察到,这种各向异性显著提升了三维高斯函数与表面对齐的能力,从而能够在保持相同点数的情况下实现更高的渲染质量。
球谐函数。最后,球谐函数的使用提高了我们的总体峰值信噪比得分,因为它们能够弥补视图相关的效应(见表3)。
7.4 局限性
我们的方法并非毫无局限性。在观测效果不佳的区域,会出现伪影;在这些区域,其他方法也会遇到困难(例如图11中的Mip-NeRF360)。尽管上述所述的各向异性高斯分布具有诸多优点,但我们的方法仍会产生细长的伪影或“斑点状”的高斯分布(见图 12);而且在这些情况下,以往的方法也难以奏效。
而且在我们的优化过程中生成大尺寸的高斯函数时,我们偶尔也会出现突兀噪点。这种情况通常会在那些外观受视角影响较大的地区出现。造成这些突兀噪点的一个原因在于,在渲染器中通过设置保护带来对高斯函数进行了简单滤除。采用一种更基于原则的淘汰方法能够消除这些不良现象。另一个因素是我们所采用的简单可见性算法,该算法可能导致高斯函数突然改变深度/混合顺序。这个问题可以通过抗锯齿技术来解决,而抗锯齿技术我们将在后续工作中进行探讨。此外,目前我们并未对优化过程施加任何正则化处理;这样做有助于解决那些看不见的部分以及出现的伪影问题。
虽然我们在全面评估中使用了相同的超参数,但早期实验表明,在处理非常大的场景(例如城市数据集)时,降低位置学习率可能是必要的,以便能够收敛。
图10 我们对场景进行了两种设置的训练,一种是关闭高斯各向异性功能,另一种是开启该功能。使用各向异性体splats能够实现精细结构的建模,并且对视觉效果有着显著的影响。请注意,出于说明目的,我们在两种配置中都限制了Ficus使用的高斯函数数量不超过 5000 个。
尽管与之前的基于点的算法相比,我们的结构非常紧凑,但我们的内存消耗却明显高于基于NeRF的解决方案。在对大型场景进行训练时,我们未进行优化的原型程序中,GPU的内存使用峰值可能会超过 20GB。然而,通过仔细地在较低层级上实施优化逻辑(类似于即时NGP 的方法),这一数字是可以大幅降低的。渲染训练好的场景需要足够的 GPU 内存来存储完整的模型(对于大规模场景而言,需数十兆字节的空间),此外还需要30至500兆字节的内存用于光栅化器,具体用量取决于场景的大小和图像的分辨率。我们注意到,我们的方法仍有许多可进一步优化的空间,以降低其内存消耗。点云的压缩技术是一个已被深入研究的领域[De Queiroz and Chou 2016];很有趣的是,看看这些方法能否被应用于我们的表述方式中会是怎样的情形。
图11 失败案例对比:Mip-NeRF360 出现“漂浮物”和颗粒状外观(左图,前景部分),而我们的方法生成的是粗糙且各向异性的大圆环,从而导致视觉效果不够精细(右图,背景部分)。火车场景。
图12 在与训练过程中所观察到的情况差异较大的视图中,我们的方法可能会产生一些伪影(如图所示)。此外,在这些情况下,Mip-NeRF360 也会出现一些瑕疵(如图所示,左图)。DrJohnson场景。
八、讨论与结论
我们提出了首个真正能够实现实时、高质量辐射场渲染的方法,该方法适用于各种场景和拍摄风格,并且所需的训练时间与之前最快的方法相当。
我们选择使用三维高斯基本体,这既能保持体积渲染的特性以实现优化,又能直接支持基于splat的快速渲染。我们的研究结果表明——与普遍的看法相反——并非必须采用连续的表示方式才能实现快速且高质量的辐射场训练。
我们大部分的训练时间都花在了Python代码上,因为我们是使用 PyTorch构建解决方案的,这样就能让其他人更方便地使用我们的方法。只有栅格化程序被优化为了CUDA内核的实现方式。我们预计,将剩余的所有优化全部迁移到 CUDA 平台(例如如在 InstantNGP[Müller et al 2022]中所做那样),能够为那些对性能要求极高的应用带来显著的进一步提速效果。
我们还强调了基于实时渲染原理进行开发的重要性,同时充分利用了 GPU 的强大性能以及软件光栅化管道架构的高速处理能力。这些设计选择对于训练过程和实时渲染的性能提升都至关重要,相比之前的体积射线追踪技术,它们在性能方面具有显著优势。
很有趣的是,我们能否利用这些高斯模型来对所捕获的场景进行网格重建呢?考虑到网格的广泛应用,这将有助于我们更清晰地了解我们的方法在体积表示与表面表示之间的连续体中的确切位置。
总之,我们提出了首个针对辐射场的实时渲染解决方案,其渲染质量与此前最昂贵的解决方案相当,而训练时间则与现有的最快解决方案相当。
致谢
参见原文
参考文献
参见原文
附录A 梯度计算细节
移动到了正文中提及处
附录B 优化与密集化算法
我们的优化和密集化算法已在算法1中进行了总结。
算法1 优化与密集化
𝑤,ℎ:训练图像的宽度和高度
附录C 渲染器的详细信息
移动到了正文中提及处
附录D 每个场景的误差度量
移动到了正文中提及处
参考资料
- 为什么要精读SCI?怎么样精读SCI?精度到什么层次?【精读SCI】【写作逻辑】
- 精读,成就SCI【如何精读论文】【如何发SCI】【经验分享】
- SCI精读与写作逻辑深度剖析【动手写SCI】【学不会当场跪下】【万能模型】【SCI写作】【SCI精读】【一年六篇SCI】
- 【论文讲解】用点云结合3D高斯构建辐射场,成为快速训练、实时渲染的新SOTA!