[论文翻译]Scaffold-GS: Structured 3D Gaussians for View-Adaptive Rendering


Scaffold-GS作为一个兼顾隐式和显式表达,一定程度上还弥补了3DGS的几何属性较差的缺点,还是很有参考价值的,部分翻译如下, 供各位参考,欢迎讨论指证

1 介绍

最近,三维高斯Splatting(3D-GS)[22]已经实现了最先进的渲染质量和速度。该方法从由运动恢复结构(Structure from Motion,SfM)[42]得出的点云初始化,优化一组3D高斯来表示场景。它保留了体积表示中固有的连续性,同时通过将3D高斯splatting到2D图像平面上,促进了快速的光栅化。

尽管这种方法提供了几个优点,但它往往会过度扩展高斯球体以适应每个训练视图,从而忽略了场景结构。这导致显著的冗余并限制了其可扩展性,特别是在复杂的大规模场景的背景下。此外,视角依赖的效应被嵌入到个别高斯参数中,这些参数的插值能力很小,使得它对大幅视角变化和光照效应的鲁棒性较低。

我们提出了Scaffold-GS,这是一种基于高斯的方法,它利用锚点建立分层和区域感知的3D场景表示。我们构建了一个由SfM点初始化的锚点稀疏网格。这些锚点中的每一个都连接着一组具有可学习偏移量的神经高斯,其属性(即不透明度、颜色、旋转、尺度)是基于锚特征和观察位置动态预测的。与原始的3D-GS不同,后者允许3D高斯自由漂移和分裂,我们的策略利用场景结构来指导和限制3D高斯的分布,同时允许它们局部适应不同的视角和距离。我们进一步为锚点开发了相应的生长和修剪操作,以增强场景覆盖。

通过广泛的实验,我们展示了我们的方法提供的渲染质量与原始3D-GS相当,甚至超越了它。在推理时,我们将神经高斯的预测限制在视锥体内的锚点内,并通过过滤步骤(即可学习的选择器)根据它们的不透明度过滤掉微不足道的神经高斯。因此,我们的方法可以在与原始3D-GS相似的速度(在1K分辨率下大约100 FPS)下渲染,计算开销很小。此外,我们的存储需求大大减少,因为我们只需要为每个场景存储锚点和MLP预测器。

总之,我们的贡献是:1)利用场景结构,我们从稀疏体素网格初始化锚点,以指导局部3D高斯的分布,形成分层和区域感知的场景表示;2)在视锥体内,我们即时从每个锚点预测神经高斯,以适应多样化的观察方向和距离,从而实现更稳健的新视图合成;3)我们开发了一种更可靠的锚点生长和修剪策略,利用预测的神经高斯实现更好的场景覆盖。

3 方法

原始的3D-GS [22] 通过启发式分裂和修剪操作优化高斯,以重建每个训练视图,**但通常忽略了场景的底层结构。这往往导致高斯高度冗余,并使模型对新视角和距离的鲁棒性降低。**为了解决这个问题,我们提出了一种尊重场景几何结构的分层3D高斯场景表示,使用从SfM初始化的锚点来编码局部场景信息并生成局部神经高斯。神经高斯的物理属性是从学习到的锚特征中以视角依赖的方式即时解码的。图2展示了我们的框架。我们首先简要介绍3D-GS的背景,然后详细阐述我们提出的方法。第3.2.1节介绍了如何使用来自不规则SfM点云的规则稀疏网格初始化场景锚点。第3.2.2节解释了我们如何基于锚点和视角依赖信息预测神经高斯属性。为了使我们的方法对嘈杂的初始化更加鲁棒,第3.3节介绍了基于神经高斯的“生长”和“修剪”操作来细化锚点。第3.4节详细阐述了训练细节。

3.1 预备知识

3D-GS [22] 使用一组各向异性的3D高斯来表示场景,这些高斯不仅继承了体素表示的微分属性,还通过基于瓦片的光栅化高效渲染。从一组由运动恢复结构(Structure-from-Motion, SfM)得到的点开始,每个点被指定为3D高斯的位置(均值) μ \mu μ

G ( x ) = e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) G(x) = e^{-\frac{1}{2}(x - \mu)^T \Sigma^{-1}(x - \mu)} G(x)=e21(xμ)TΣ1(xμ)

其中 x x x 是3D场景中的任意位置, Σ \Sigma Σ表示3D高斯的协方差矩阵。 Σ \Sigma Σ通过使用缩放矩阵 S S S和旋转矩阵 R R R来制定,以保持其半正定性:

Σ = R S S T R T \Sigma = R S S^T R^T Σ=RSSTRT

除了由球谐函数建模的颜色 c c c外,每个3D高斯还与一个在混合过程中乘以 G ( x ) G(x) G(x) 的不透明度 α \alpha α相关联。与传统的体素表示不同,3D-GS通过基于瓦片的光栅化而不是资源密集型的光线步进来高效渲染场景。3D高斯 G ( x ) G(x) G(x)首先根据[58]中描述的投影过程转换为图像平面上的2D高斯 G ′ ( x ′ ) G'(x') G(x)。然后设计了一个基于分块的光栅器,以高效地对2D高斯进行排序并使用Alpha混合:

C ( x ′ ) = ∑ i ∈ N c i σ i ∏ j = 1 i − 1 ( 1 − σ j ) , σ i = α i G ′ ( x ′ ) C(x') = \sum_{i \in N} c_i \sigma_i \prod_{j=1}^{i-1} (1 - \sigma_j) , \sigma_i=\alpha_iG^\prime (x^\prime ) C(x)=iNciσij=1i1(1σj)σi=αiG(x)

其中 x ′ x' x是被查询的像素位置, N N N表示与被查询像素相关联的排序2D高斯的数量。利用可微分的光栅器,所有3D高斯的属性都是可学习的,并且可以通过训练视图重建直接端到端优化。

3.2 基于锚点的分层3D高斯场景表示(Scaffold-GS)

3.2.1 锚点初始化

与现有方法一致,我们采用COLMAP生成的稀疏点云作为初始输入。随后,我们将该点云 P ∈ R M × 3 P \in \mathbb{R}^{M \times 3} PRM×3 体素化为场景:

V = { P ϵ } ⋅ ϵ V = \left\{ \frac{P}{\epsilon} \right\} \cdot \epsilon V={ϵP}ϵ

其中 V ∈ R N × 3 V \in \mathbb{R}^{N \times 3} VRN×3 表示体素中心, ϵ \epsilon ϵ 为体素尺寸。我们进一步移除重复项以减少 P P P中的冗余和不规则性。

在本研究中,**每个体素 v v v的几何中心被定义为一个锚点,该锚点配备了一个局部上下文特征向量 f v f_v fv,其维度为 R 32 \mathbb{R}^{32} R32,一个用于调整比例的向量 l v l_v lv,其维度为 R 3 \mathbb{R}^3 R3,以及 k k k个可训练的偏移矩阵 O v O_v Ov,其维度为 R k × 3 \mathbb{R}^{k \times 3} Rk×3 。**为了表述方便,我们将在后续描述中将锚点简称为 v v v。为了增强特征的表达能力,我们对 f v f_v fv 进行了多分辨率和视角依赖性的扩展。对于每个锚点 v v v,我们执行以下两个步骤:1) 创建一个特征集合 { f v , f v ↓ 1 , f v ↓ 2 } \{f_v, f_{v_{\downarrow 1}}, f_{v{\downarrow 2}}\} {fv,fv1,fv2} ,其中下标 ↓ n \downarrow_n n 表示 f v f_v fv 被按 2 n 2^n 2n 的比例进行下采样;2) 根据视角依赖的权重将这些特征融合,形成综合锚点特征 f ^ v \hat{f}_v f^v。具体地,对于给定的位于 x c x_c xc位置的相机和位于 x v x_v xv位置的锚点,我们计算它们之间的相对距离 δ v c \delta_{vc} δvc和观察方向 d ⃗ v c \vec{\mathbf{d}}_{vc} d vc,公式如下:

δ v c = ∥ x v − x c ∥ 2 , d ⃗ v c = x v − x c ∥ x v − x c ∥ 2 ( 5 ) \delta_{vc} = \|x_v - x_c\|^2, \vec{\mathbf{d}}_{vc} = \frac{x_v - x_c}{\|x_v - x_c\|^2} \quad (5) δvc=xvxc2,d vc=xvxc2xvxc(5)

这种处理方式使得锚点特征不仅包含了丰富的局部上下文信息,还具备了对不同观察角度和分辨率的适应性,为后续的神经高斯属性预测提供了强有力的特征支持。

{ w , w 1 , w 2 } = Softmax ( F w ( δ v c , d ⃗ v c ) ) ( 6 ) f ^ v = w ⋅ f v + w 1 ⋅ f v ↓ 1 + w 2 ⋅ f v ↓ 2 ( 7 ) \{w, w_1, w_2\} = \text{Softmax}(F_w(\delta_{vc}, \vec{\mathbf{d}}_{vc})) \quad (6)\\ \hat{f}_v = w \cdot f_v + w_1 \cdot f_{v_{\downarrow 1}} + w_2 \cdot f_{v_{\downarrow 2}} \quad(7) {w,w1,w2}=Softmax(Fw(δvc,d vc))(6)f^v=wfv+w1fv1+w2fv2(7)

3.2.2 神经高斯构建

在本节中,我们详细描述了我们的方法是如何从锚点派生出神经高斯。除非另有说明, F ∗ F^* F 在本节中代表特定的多层感知器(MLP)。此外,我们引入了两种高效的预过滤策略,以减少MLP的计算开销。

请添加图片描述

我们根据位置 μ ∈ R 3 \mu \in \mathbb{R}^3 μR3,不透明度 α ∈ R \alpha \in \mathbb{R} αR,与协方差相关的四元数 q ∈ R 4 q \in \mathbb{R}^4 qR4 ,以及颜色 c ∈ R 3 c \in \mathbb{R}^3 cR3 来参数化神经高斯。如图2所示,对于视椎体内每个可见的锚点,我们生成 k k k个神经高斯并预测它们的属性。给定位于 x v \mathbf{x}_v xv的锚点,其神经高斯的位置计算公式为:

{ μ 0 , . . . , μ k − 1 } = x v + { O 0 , . . . , O k − 1 } ⋅ l v ( 8 ) \{ \mu_0, ..., \mu_{k-1} \} = \mathbf{x}_v + \{ O_0, ..., O_{k-1} \} \cdot l_v \quad(8) {μ0,...,μk1}=xv+{O0,...,Ok1}lv(8)

其中 O 0 , O 1 , . . . , O k − 1 ∈ R k × 3 {O_0, O_1, ..., O_{k−1}} \in R^{k×3} O0,O1,...,Ok1Rk×3是可学习的偏移量, l v l_v lv 是与该锚点相关联的缩放因子,如第 3.2.1 节所述。 k k k 个神经高斯的属性直接从锚点特征 f ^ v \hat{f}_v f^v、相机与锚点之间的相对观察距离 δ v c \delta_{vc} δvc 和方向 d v c \mathbf{d}_{vc} dvc(公式 5)通过各自的 MLP 解码,分别表示为 F α F_α Fα F c F_c Fc F q F_q Fq F s F_s Fs。**注意,属性是在单次传递中解码的。**例如,从锚点生成的神经高斯的不透明度值由以下给出:

{ α 0 , . . . , α k − 1 } = F α ( f ^ v , δ v c , d ⃗ v c ) ( 9 ) \{\alpha_0, ..., \alpha_{k-1}\} = F_\alpha(\hat{f}_v, \delta_{vc}, \vec{\mathbf{d}}_{vc}) \quad(9) {α0,...,αk1}=Fα(f^v,δvc,d vc)(9)

它们的颜色 c i {c_i} ci、四元数 q i {q_i} qi 和尺度 s i {s_i} si 也是以类似的方式派生的。实现细节在补充材料中。

请注意,神经高斯属性的预测是即时的,这意味着只有位于视锥体内的锚点被激活以生成神经高斯。为了使光栅化更有效,我们只保留不透明度值大于预定义阈值 τ α \tau_\alpha τα的神经高斯。这大大减少了计算负载,并帮助我们的方法保持与原始 3D-GS 相当的高渲染速度。

3.3 锚点的增强与优化

生长操作神经高斯与从结构光三维扫描(SfM)点初始化的锚点紧密相连,其建模能力局限于局部区域,这在文献[22, 53]中已被指出。这对锚点的初始布局,尤其是在缺乏纹理和观测不足的区域,构成了挑战。因此,我们提出了一种基于误差的锚点生长策略,该策略在神经高斯显著的区域生成新的锚点。为了识别这些显著区域,我们首先通过创建边长为 ϵ g \epsilon_g ϵg的体素来对神经高斯进行空间量化。**对于每个体素,我们计算了在 N N N次训练迭代过程中包含的神经高斯的平均梯度 ∇ g \nabla_g g。随后,我们将梯度值超过预设阈值( ∇ g > τ g \nabla_g > \tau_g g>τg)的体素识别为显著区域,并在该体素中心部署新的锚点(如果之前未建立锚点)。**图3展示了这一生长操作的流程。在实际操作中,我们采用多分辨率体素网格对空间进行量化,允许以不同的粒度添加新锚点,其中其中 ϵ g = ϵ g / 4 m − 1 , τ g = τ ∗ 2 m − 1 \epsilon_g = \epsilon_g / 4^{m-1},\tau_g = \tau * 2^{m-1} ϵg=ϵg/4m1τg=τ2m1 m m m表示量化的级别,为了严格控制新锚点的添加,我们对候选锚点实施随机淘汰机制,这种谨慎的策略有效控制了锚点数量的快速增长。

修剪操作为了去除不重要的锚点,我们对每个锚点关联的神经高斯在N次训练迭代中的不透明度值进行累加。如果某个锚点未能产生足够不透明度的神经高斯,则将其从场景中移除,以此优化场景的表示并提升渲染效率。

通过这种精细化的锚点增强和优化策略,Scaffold-GS能够更好地适应场景的复杂性,提高渲染的真实性和效率。

3.4 损失函数构建

在本节中,我们构建了用于优化可学习参数和多层感知器(MLPs)的损失函数,这包括对渲染像素颜色的 L 1 \mathcal{L}_{1} L1损失、结构相似性指数(SSIM)的 L S S I M \mathcal{L}_{SSIM} LSSIM项,以及体积正则化 L v o l \mathcal{L}_{vol} Lvol。总的损失函数表达式为:

L = L 1 + λ S S I M L S S I M + λ v o l L v o l \mathcal{L} = \mathcal{L}_1 + \lambda_{SSIM} \mathcal{L}_{SSIM} + \lambda_{vol} \mathcal{L}_{vol} L=L1+λSSIMLSSIM+λvolLvol

其中,体积正则化 L v o l \mathcal{L}_{vol} Lvol的计算方式如下:

L v o l = ∑ i = 1 N n g P r o d ( s i ) \mathcal{L}_{vol} = \sum_{i=1}^{N_{ng}} Prod( s_{i}) Lvol=i=1NngProd(si)

这里, N n g N_{ng} Nng 表示场景中神经高斯的总数, P r o d ( ⋅ ) Prod(·) Prod() 表示向量中各个元素值的乘积,在我们的情况下指的是每个神经高斯的尺度分量 s i s_{i} si。该体积正则化项的设计旨在激励神经高斯的体积保持较小,并且减少它们之间的重叠,从而优化场景的表示精度和渲染效率。

通过精心设计的损失函数,Scaffold-GS能够在训练过程中有效平衡视觉质量和计算效率,实现高质量的3D场景渲染。

4.2. Results Analysis

特征分析:我们进一步对可学习的锚特征和选择器机制进行了分析。如图6所示,聚类模式表明,紧凑的锚特征空间能够巧妙地捕获具有相似视觉属性和几何形状的区域,这一点通过它们在编码特征空间中的接近性得到了证明。

视角适应性:为了支持我们的神经高斯是视角自适应的,我们探索了当从不同位置观察同一高斯时属性值的变化。图7展示了在不同观察位置属性强度的变化分布,同时保持了一定程度的局部连续性。这解释了我们方法与3D-GS静态属性相比,在视角适应性方面的优越性,以及其对新视图的增强泛化能力。

通过不透明度的选择过程:我们检查了神经高斯的解码不透明度和基于不透明度的选择过程(见图2(b))。首先,如果没有锚点细化模块,我们使用它们解码的不透明度值来过滤神经高斯,从随机点云中提取几何体。图8展示了剩余的神经高斯有效地从随机点中重建了推土机模型的粗略结构,突出了其在主要基于渲染的监督下进行隐式几何建模的能力。我们发现这在概念上类似于[4]中使用的建议网络,作为高效采样的几何代理估计器。

其次,我们应用了不同的k值在我们的方法中。图9显示,无论k值如何,通过训练最终激活的神经高斯的数量趋于一致,表明Scaffold-GS倾向于选择一组非冗余的高斯,这些高斯足以代表场景。

5. 结论

在这项工作中,我们介绍了Scaffold-GS,一种新颖的3D神经场景表示,用于高效的视角自适应渲染。Scaffold-GS的核心在于其由SfM引导的结构化3D高斯排列其属性是由视角依赖的MLP即时解码的。我们展示了我们的方法利用一个更紧凑的高斯集合,实现了与最新技术算法相当甚至更好的结果。我们视角自适应神经高斯的优势在3D-GS通常失败的具有挑战性的案例中尤为明显。我们进一步展示了我们的锚点以一种有意义的方式编码局部特征,这在一定程度上展示了语义模式,表明其在未来的大规模建模、操作和解释等一系列多样化任务中的潜在适用性。

7. 实现细节

Feature Bank:为了增强视角适应性,我们通过视图依赖的编码更新锚点特征。

在计算相机和锚点之间的相对距离 δ v c \delta_{vc} δvc 和视图方向 d ⃗ v c \vec{\mathbf{d}}_{vc} d vc之后,我们预测一个权重向量 w ∈ R 3 w \in \mathbb{R}^3 wR3 如下所示:

( w , w 1 , w 2 ) = Softmax ( F w ( δ v c , d ⃗ v c ) ) ( 13 ) (w, w_1, w_2) = \text{Softmax}(F_w(\delta{vc}, \vec{\mathbf{d}}_{vc})) \quad (13) (w,w1,w2)=Softmax(Fw(δvc,d vc))(13)

其中 F w F_w Fw 是一个小型多层感知器(MLP),用作视图编码函数。然后,我们通过组合包含不同分辨率信息的特征库,将视图方向信息编码到锚点特征 f v f_v fv 如下所示:

f ^ v = w ⋅ f v + w 1 ⋅ f v ↓ 1 + w 2 ⋅ f v ↓ 2 ( 14 ) \hat{f}v = w \cdot f_v + w_1 \cdot f{v\downarrow 1} + w_2 \cdot f{v\downarrow 2} \quad (14) f^v=wfv+w1fv1+w2fv2(14)

在实践中,我们通过切片和重复来实现特征库,如图10所示。我们发现这种切片和混合操作提高了Scaffold-GS捕捉不同场景粒度的能力。特征库权重的分布如图11所示。

MLP作为特征解码器:核心MLP包括不透明度MLP F α F_\alpha Fα,颜色MLP F c F_c Fc ,以及协方差MLP F s F_s Fs F q F_q Fq。**所有这些 F ∗ F_* F 都以 L i n e a r → R e L U → L i n e a r Linear \to ReLU \to Linear LinearReLULinear的风格实现,隐藏维度为32,**如图12所示。每个分支的输出都通过一个头部层激活。

  • 对于不透明度,输出通过Tanh激活,其中值0作为选择有效样本的自然阈值,最终有效的值可以覆盖[0,1)的全范围。
  • 对于颜色,我们使用Sigmoid函数激活输出:这将颜色限制在(0,1)的范围内。

{ c 0 , . . . , c k − 1 } = Sigmoid ( F c ) ( 15 ) \{c_0, ..., c_{k-1}\} = \text{Sigmoid}(F_c) \quad (15) {c0,...,ck1}=Sigmoid(Fc)(15)

  • 对于旋转,我们遵循3D-GS [22]并用标准化激活它,以获得有效的四元数。
  • 对于缩放,我们使用MLP输出调整每个锚点的基础缩放 s v s_v sv如下所示:

{ s 0 , . . . , s k − 1 } = Sigmoid ( F s ) ⋅ s v ( 16 ) \{s_0, ..., s_{k-1}\} = \text{Sigmoid}(F_s) \cdot s_v \quad (16) {s0,...,sk1}=Sigmoid(Fs)sv(16)

体素尺寸:体素尺寸 ϵ \epsilon ϵ 设置了最细的锚点分辨率。我们采用两种策略:1) 使用所有初始点中最近邻距离的中位数: ϵ \epsilon ϵ 适应点云密度,产生更密集的锚点,提高渲染质量,但可能会引入更多的计算开销;2) 手动将 ϵ \epsilon ϵ 设置为0.005或0.01:这在大多数场景中都是有效的,但可能会导致纹理较少区域的细节丢失。我们发现这两种策略在我们的实验中充分适应了各种场景复杂性。

锚点细化:正如在正文中简要讨论的那样,体素化过程表明我们的方法可能对初始SfM结果敏感。我们在图13中展示了锚点细化过程的效果,其中新的锚点增强了场景细节,并在大的无纹理区域和观察不足的区域填补了空白。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值