深度解析 Scaffold-GS:结构化 3D 高斯与视角自适应渲染

3690 字
18 分钟
深度解析 Scaffold-GS:结构化 3D 高斯与视角自适应渲染

1. 引言:3DGS 的”结构缺失”问题#

1.1 3D Gaussian Splatting 的成功与局限#

3D Gaussian Splatting(3DGS) 自 2023 年问世以来,以其卓越的渲染质量和实时速度迅速成为神经渲染领域的新标杆:

特性3DGS 的优势
渲染质量媲美甚至超越 NeRF 的新视角合成质量
渲染速度~100 FPS(1080p),远快于 NeRF 的逐点采样
可微渲染端到端可训练,无需手工设计
初始化基于 SfM 点云,自然利用几何先验

然而,3DGS 存在一个根本性缺陷

3DGS 允许高斯”自由漂移和分裂”来拟合每个训练视角,忽视了底层场景几何结构,导致大量冗余高斯和视角变化鲁棒性差。

1.2 冗余问题的具体表现#

问题具体表现后果
过度膨胀高斯为适应每个视角而膨胀存储膨胀、渲染效率下降
忽视几何高斯分布与场景几何无结构对应视角变化时容易产生伪影
视角过拟合视角依赖效果被烘焙到参数中新视角合成质量下降
大面积纹理纹理稀疏区域需要大量高斯填充效率低下
多尺度场景不同观察距离需要不同密度高斯3DGS 容易产生针状伪影

1.3 Scaffold-GS 的核心思想#

Scaffold-GS(CVPR 2024)的核心洞察:

用稀疏体素网格中的锚点(Anchor Points)来引导神经高斯的分布,让高斯在结构约束下自适应地响应视角变化。

与 3DGS 的核心区别

方面3DGSScaffold-GS
高斯分布无结构、自由漂移由锚点引导、有结构
属性预测训练时直接优化推理时由 MLP 动态预测
视角适应参数烘焙视角相关 MLP 解码
存储方式每个高斯的完整属性仅存储锚点 + MLP 权重
高斯数量数十万~数百万显著更少

2. 核心架构:双层层级结构#

2.1 为什么需要双层结构?#

3DGS 的问题在于”单层”——每个高斯独立存储所有属性,没有层级组织来捕捉场景结构。

Scaffold-GS 引入双层结构

第一层:锚点层(Anchor Layer)
└── 稀疏体素网格中的锚点
├── 位置 x_v(体素中心)
├── 局部上下文特征 f_v ∈ R^32
├── 缩放因子 l_v ∈ R^3
└── k 个可学习偏移量 O_v ∈ R^(k×3)
第二层:神经高斯层(Neural Gaussian Layer)
└── 从锚点"生长"出来的神经高斯
├── 位置 μ(锚点 + 偏移 × 缩放)
├── 不透明度 α(MLP 预测)
├── 颜色 c(MLP 预测)
├── 旋转 q / 四元数(MLP 预测)
└── 缩放 s(MLP 预测)

2.2 整体管线流程#

输入:SfM 点云(COLMAP)
┌─────────────────────────────┐
│ Step 1: 锚点初始化 │
│ SfM 点云 → 体素化 → 锚点网格 │
│ 每个锚点:位置、特征、缩放、偏移 │
└────────────┬────────────────┘
┌─────────────────────────────┐
│ Step 2: 视角裁剪 │
│ 只保留视锥体内的锚点 │
│ (仅激活可见锚点) │
└────────────┬────────────────┘
┌─────────────────────────────┐
│ Step 3: 神经高斯生成 │
│ 每个锚点 → k 个神经高斯 │
│ MLP 预测:α, c, q, s │
│ 输入:锚点特征 + 视角位置/方向 │
└────────────┬────────────────┘
┌─────────────────────────────┐
│ Step 4: 不透明度过滤 │
│ α < τ_α 的神经高斯被丢弃 │
│ (仅保留有意义的高斯) │
└────────────┬────────────────┘
┌─────────────────────────────┐
│ Step 5: 瓦片光栅化渲染 │
│ 与 3DGS 相同的渲染管线 │
└────────────┬────────────────┘
新视角图像

3. 锚点初始化:从 SfM 到稀疏体素网格#

3.1 体素化过程#

Scaffold-GS 首先将 SfM 点云 PRM×3\mathbf{P} \in \mathbb{R}^{M \times 3} 进行体素化:

V={Pϵ}ϵ\mathbf{V} = \left\{ \left\lfloor \frac{\mathbf{P}}{\epsilon} \right\rceil \right\} \cdot \epsilon

其中 ϵ\epsilon 是体素大小,VRN×3\mathbf{V} \in \mathbb{R}^{N \times 3} 是体素中心集合。

为什么要体素化?

原始 SfM 点云体素化后
稀疏且不规则规则分布的网格
密度不均匀均匀覆盖场景
无结构信息天然编码空间邻域关系
可能存在空洞通过插值填补

3.2 锚点的属性#

每个锚点 vVv \in \mathbf{V} 配备以下属性:

属性维度描述
位置xvR3x_v \in \mathbb{R}^3体素中心(由体素化决定)
局部特征fvR32f_v \in \mathbb{R}^{32}可学习的局部上下文特征
缩放因子lvR3l_v \in \mathbb{R}^3控制神经高斯分布范围
偏移量OvRk×3\mathbf{O}_v \in \mathbb{R}^{k \times 3}kk 个可学习的位置偏移

3.3 多分辨率视角自适应特征增强#

核心创新:锚点特征不是固定的,而是视角相关的

对于每个锚点 vv,构建特征库

{fv,fv1,fv2}\{ f_v, f_{v_{\downarrow_1}}, f_{v_{\downarrow_2}} \}

其中 n\downarrow_n 表示特征被下采样 2n2^n 倍(实现:slicing 和 repeating)。

给定相机位置 xc\mathbf{x}_c 和锚点位置 xv\mathbf{x}_v

δvc=xvxc2,dvc=xvxcxvxc2\delta_{vc} = \| \mathbf{x}_v - \mathbf{x}_c \|_2, \quad \vec{\mathbf{d}}_{vc} = \frac{\mathbf{x}_v - \mathbf{x}_c}{\| \mathbf{x}_v - \mathbf{x}_c \|_2}

通过小型 MLP FwF_w 预测权重,然后加权融合:

{w,w1,w2}=Softmax(Fw(δvc,dvc))\{ w, w_1, w_2 \} = \text{Softmax}(F_w(\delta_{vc}, \vec{\mathbf{d}}_{vc}))f^v=wfv+w1fv1+w2fv2\hat{f}_v = w \cdot f_v + w_1 \cdot f_{v_{\downarrow_1}} + w_2 \cdot f_{v_{\downarrow_2}}

这一设计让锚点能够根据观察距离和方向,自适应地融合不同分辨率的特征,从而更准确地预测神经高斯属性。

4. 神经高斯动态推导#

4.1 神经高斯的参数化#

每个神经高斯由以下参数定义:

参数含义预测方式
位置 μ\mu高斯中心锚点 + 偏移 × 缩放
不透明度 α\alpha透明度MLP FαF_\alpha 预测
颜色 ccRGB(可选球谐)MLP FcF_c 预测
旋转 qq四元数(协方差)MLP FqF_q 预测
缩放 ss各向异性缩放MLP FsF_s 预测

4.2 位置计算#

对于锚点 xv\mathbf{x}_v,其 kk 个神经高斯的位置为:

{μ0,,μk1}=xv+{O0,,Ok1}lv\{ \mu_0, \ldots, \mu_{k-1} \} = \mathbf{x}_v + \{ \mathcal{O}_0, \ldots, \mathcal{O}_{k-1} \} \cdot l_v

其中 {O0,,Ok1}Rk×3\{\mathcal{O}_0, \ldots, \mathcal{O}_{k-1}\} \in \mathbb{R}^{k \times 3} 是可学习的偏移量,lvl_v 是该锚点的缩放因子。

4.3 属性 MLP 预测#

神经高斯的属性由对应的 MLP 在推理时动态预测

{α0,,αk1}=Fα(f^v,δvc,dvc)\{ \alpha_0, \ldots, \alpha_{k-1} \} = F_\alpha(\hat{f}_v, \delta_{vc}, \vec{\mathbf{d}}_{vc}){ci}=Fc(f^v,δvc,dvc)\{ c_i \} = F_c(\hat{f}_v, \delta_{vc}, \vec{\mathbf{d}}_{vc}){qi}=Fq(f^v,δvc,dvc)\{ q_i \} = F_q(\hat{f}_v, \delta_{vc}, \vec{\mathbf{d}}_{vc}){si}=Fs(f^v,δvc,dvc)\{ s_i \} = F_s(\hat{f}_v, \delta_{vc}, \vec{\mathbf{d}}_{vc})

MLP 结构(所有 MLP 一致):

LINEAR(in_dim, 32) → ReLU → LINEAR(32, out_dim)

4.4 不透明度预过滤#

为提高效率,仅保留不透明度超过阈值的高斯:

αiτα\alpha_i \geq \tau_\alpha

这大幅减少了渲染时的计算量,使得 Scaffold-GS 能保持与 3DGS 相当的渲染速度。

5. 锚点精细化:生长与修剪#

5.1 为什么需要精细化?#

初始锚点由 SfM 点云体素化得到,可能存在以下问题:

问题原因影响
纹理稀疏区域空洞SfM 在低纹理区域点云稀疏场景覆盖不完整
观察不足区域部分区域训练视角少新视角质量差
冗余锚点体素化可能过于密集存储浪费

Scaffold-GS 通过**生长(Growing)修剪(Pruning)**策略解决这些问题。

5.2 生长策略:基于梯度的锚点添加#

核心思想:在高斯梯度较大的区域添加新锚点——这意味着”需要更多细节”。

步骤

  1. 将神经高斯空间量化到体素中(大小 ϵg\epsilon_g
  2. 对每个体素,计算 NN 次迭代的神经高斯平均梯度 g\nabla_g
  3. 如果 g>τg\nabla_g > \tau_g,在该体素中心添加新锚点

多分辨率生长

ϵg(m)=ϵg/4m1,τg(m)=τg×2m1,m{1,2,3}\epsilon_g^{(m)} = \epsilon_g / 4^{m-1}, \quad \tau_g^{(m)} = \tau_g \times 2^{m-1}, \quad m \in \{1, 2, 3\}

更小的体素用于更精细的层次,更大的阈值防止过于密集。

随机消除:对候选锚点应用随机消除,防止锚点过快增长。

5.3 修剪策略:移除无效锚点#

核心思想:移除无法产生有意义神经高斯的锚点。

步骤

  1. 累积锚点的神经高斯不透明度 αaccum\alpha_{\text{accum}}
  2. 如果 αaccum<0.5\alpha_{\text{accum}} < 0.5,移除该锚点

5.4 精细化管线图#

初始锚点(来自 SfM 体素化)
┌─────────────────────────────┐
│ 训练过程中 │
│ • 累积神经高斯梯度 │
│ • 累积神经高斯不透明度 │
└────────────┬────────────────┘
┌────────────┴────────────────┐
↓ ↓
Growing(梯度大) Pruning(不透明度低)
↓ ↓
添加新锚点 移除无效锚点
↓ ↓
└────────────┬────────────────┘
精细化后的锚点网格

6. 训练目标与损失函数#

6.1 总损失函数#

Scaffold-GS 的总损失函数:

L=L1+λSSIMLSSIM+λvolLvol\mathcal{L} = \mathcal{L}_1 + \lambda_{\text{SSIM}} \mathcal{L}_{\text{SSIM}} + \lambda_{\text{vol}} \mathcal{L}_{\text{vol}}
损失项权重作用
L1\mathcal{L}_11.0重建损失,确保像素级准确性
LSSIM\mathcal{L}_{\text{SSIM}}0.2结构相似性损失,保持结构完整性
Lvol\mathcal{L}_{\text{vol}}0.001体积正则化,防止高斯过度重叠

6.2 体积正则化的意义#

体积正则化项定义:

Lvol=i=1NngProd(si)\mathcal{L}_{\text{vol}} = \sum_{i=1}^{N_{\text{ng}}} \text{Prod}(s_i)

其中 Prod()\text{Prod}(\cdot) 是向量元素的乘积(即缩放向量 sis_i 的三个分量之积)。

几何意义:鼓励神经高斯小而紧凑,减少不必要的重叠:

  • 大的 sis_i → 大的 Prod(si)\text{Prod}(s_i) → 大的损失
  • 重叠的高斯 → 冗余渲染 → 大的 Prod\text{Prod} 惩罚

6.3 可学习参数#

Scaffold-GS 的可学习参数:

参数描述数量
锚点特征 fvf_v每个锚点的局部特征Nanchor×32N_{\text{anchor}} \times 32
锚点缩放 lvl_v每个锚点的分布范围Nanchor×3N_{\text{anchor}} \times 3
偏移量 Ov\mathbf{O}_v每个锚点的 kk 个偏移Nanchor×k×3N_{\text{anchor}} \times k \times 3
MLP 权重Fw,Fα,Fc,Fq,FsF_w, F_\alpha, F_c, F_q, F_s共享(场景无关)

关键:MLP 权重是场景无关的,同一个 MLP 可以用于所有场景。大幅减少了每个场景的存储需求。

7. 与 3DGS 的详细对比#

7.1 渲染质量对比#

Mip-NeRF360 数据集

方法PSNR (↑)SSIM (↑)LPIPS (↓)
3DGS28.690.8700.182
Mip-NeRF36029.230.8440.207
Scaffold-GS28.840.8480.220

Tanks & Temples 数据集

方法PSNR (↑)SSIM (↑)LPIPS (↓)
3DGS23.140.8410.183
Scaffold-GS23.960.8530.177

Deep Blending 数据集

方法PSNR (↑)SSIM (↑)LPIPS (↓)
3DGS29.410.9030.243
Scaffold-GS30.210.9060.254

7.2 效率对比#

渲染速度与存储压缩

数据集方法FPS存储 (MB)存储压缩比
Mip-NeRF3603DGS97693
Mip-NeRF360Scaffold-GS1021564.4×
Tanks & Temples3DGS123411
Tanks & TemplesScaffold-GS110874.7×
Deep Blending3DGS109676
Deep BlendingScaffold-GS1396610.2×

Scaffold-GS 在渲染速度相当的情况下,实现了 4~10 倍的存储压缩!

7.3 复杂场景的鲁棒性#

Scaffold-GS 在以下挑战场景中表现出色:

挑战场景3DGS 的问题Scaffold-GS 的优势
薄几何结构产生针状伪影锚点约束提供更可靠的形状
纹理稀疏区域需要大量高斯填充更紧凑的表示,细节更可靠
光照效果过拟合特定光照视角自适应预测更鲁棒
观察不足区域新视角模糊锚点结构填补空洞
多尺度内容远近距离需要不同密度多分辨率特征自然处理

8. 关键数学公式汇总#

  1. 3D 高斯定义
G(x)=e12(xμ)TΣ1(xμ)G(x) = e^{-\frac{1}{2} (x - \mu)^T \Sigma^{-1} (x - \mu)}
  1. 协方差矩阵分解
Σ=RSSTRT\Sigma = RSS^T R^T
  1. 瓦片光栅化混合
C(x)=iNciσij=1i1(1σj),σi=αiGi(x)C(x') = \sum_{i \in N} c_i \sigma_i \prod_{j=1}^{i-1} (1 - \sigma_j), \quad \sigma_i = \alpha_i G'_i(x')
  1. 体素化锚点初始化
V={Pϵ}ϵ\mathbf{V} = \left\{ \left\lfloor \frac{\mathbf{P}}{\epsilon} \right\rceil \right\} \cdot \epsilon
  1. 神经高斯位置计算
{μ0,,μk1}=xv+{O0,,Ok1}lv\{ \mu_0, \ldots, \mu_{k-1} \} = \mathbf{x}_v + \{ \mathcal{O}_0, \ldots, \mathcal{O}_{k-1} \} \cdot l_v
  1. 视角自适应特征融合
f^v=wfv+w1fv1+w2fv2\hat{f}_v = w \cdot f_v + w_1 \cdot f_{v_{\downarrow_1}} + w_2 \cdot f_{v_{\downarrow_2}}
  1. 属性 MLP 预测
{αi,ci,qi,si}=F(f^v,δvc,dvc)\{ \alpha_i, c_i, q_i, s_i \} = F_*(\hat{f}_v, \delta_{vc}, \vec{\mathbf{d}}_{vc})
  1. 总训练损失
L=L1+λSSIMLSSIM+λvolLvol\mathcal{L} = \mathcal{L}_1 + \lambda_{\text{SSIM}} \mathcal{L}_{\text{SSIM}} + \lambda_{\text{vol}} \mathcal{L}_{\text{vol}}
  1. 体积正则化
Lvol=i=1NngProd(si)\mathcal{L}_{\text{vol}} = \sum_{i=1}^{N_{\text{ng}}} \text{Prod}(s_i)

9. 实现细节#

9.1 默认超参数#

参数默认值说明
kk(每个锚点的神经高斯数)10用于所有实验
MLP 隐藏层维度32所有 MLP
MLP 层数2LINEAR → ReLU → LINEAR
梯度累积迭代数 NN100用于锚点精细化
默认生长阈值 τg\tau_g64ϵ64\epsilon复杂场景用 16ϵ16\epsilon
修剪不透明度阈值0.5累积不透明度低于此值则修剪
λSSIM\lambda_{\text{SSIM}}0.2SSIM 损失权重
λvol\lambda_{\text{vol}}0.001体积正则化权重

9.2 MLP 结构可视化#

输入:\hat{f}_v (32D) + δ_vc (1D) + \vec{d}_vc (3D)
拼接 → 36D
LINEAR(36, 32) → ReLU → LINEAR(32, out_dim)
输出:α_i / c_i / q_i / s_i

9.3 多分辨率特征库实现#

特征库通过 Slicing 和 Repeating 实现:

原始特征 f_v: [f_0, f_1, f_2, ..., f_31] (32D)
下采样 2 倍: [f_0, f_2, f_4, ..., f_30] (16D) → 补零到 32D
下采样 4 倍: [f_0, f_4, f_8, ..., f_28] (8D) → 补零到 32D
拼接 → [f_v, f_{v_{\downarrow_1}}, f_{v_{\downarrow_2}}]
加权融合(MLP 预测权重)

10. 总结与展望#

Scaffold-GS 的核心贡献#

  1. 双层层级结构:锚点引导神经高斯分布,兼顾结构约束和局部自适应
  2. 视角自适应属性预测:MLP 动态解码视角相关的神经高斯属性
  3. 多分辨率特征融合:锚点特征根据观察距离和方向自适应调整
  4. 锚点精细化策略:基于梯度的生长和基于不透明度的修剪
  5. 显著存储压缩:4~10 倍压缩比,同时保持甚至提升渲染质量

当前局限#

局限描述潜在改进方向
初始化依赖 SfM需要 COLMAP 提供初始点云自监督初始化或神经网络预测
MLP 推理开销每个神经高斯都需要 MLP 推理特征缓存或更高效的解码器
场景规模限制单场景表示,大规模场景需分块层次化多场景组织
动态场景仅支持静态场景引入时间维度的表示扩展

未来研究方向#

方向描述相关工作
大规模场景Scaffold-GS 锚点特征可用于场景理解Street Gaussians, Rural Radiance Fields
动态场景加入时间维度的结构化表示Dynamic 3DGS,时空锚点
局部编辑利用锚点的语义特征进行局部修改Gaussian Editor
物理仿真锚点结构支持更自然的物理属性附加PhysicsGS
生成式扩展用 Scaffold-GS 作为 3D 生成的目标表示Scaffold-LRM

在 3DGS 家族中的位置#

Scaffold-GS 是 3DGS 最重要的改进之一,它引入的结构化思想影响了后续大量工作:

3DGS (2023)
├── Scaffold-GS (2024) ← 结构化高斯、视角自适应
│ ├── 引入了"锚点"的概念
│ ├── MLP 动态预测属性
│ └── 生长/修剪策略
├── GaussianEditor (2024)
├── Street Gaussians (2024)
├── GES (2024)
└── ... (更多后续工作)

Scaffold-GS 证明了”结构化”是 3DGS 进化的关键方向之一。 通过引入锚点层级和视角自适应机制,它不仅解决了 3DGS 的冗余问题,还为 3DGS 在大规模场景理解、局部编辑、动态场景等更广泛的应用奠定了基础。

参考资料#

  1. Lu, T., Yu, M., Xu, L., Xiangli, Y., Wang, L., Lin, D., & Dai, B. (2024). “Scaffold-GS: Structured 3D Gaussians for View-Adaptive Rendering.” CVPR 2024, pp. 20654-20664.
  2. Kerbl, B., Kopanas, G., Leimkühler, T., & Drettakis, G. (2023). “3D Gaussian Splatting for Real-Time Radiance Field Rendering.” ACM TOG (SIGGRAPH).
  3. Barron, J. T., Mildenhall, B., Tulsiani, S., & Tagliasacchi, A. (2021). “Mip-NeRF 360: Unbounded Anti-Aliased Neural Radiance Fields.” CVPR 2022.
  4. Xu, Q., Xu, Z., Philip, J., Bi, S., Shu, Z., Sunkavalli, K., & Ngiam, J. (2023). “Point-NeRF: Point-based Neural Radiance Fields.” arXiv.
  5. Fridovich-Keil, S., Yu, A., Tancik, M., Chen, Q., Recht, B., & Kanazawa, A. (2022). “Plenoxels: Radiance Fields without Neural Networks.” CVPR 2022.
  6. Müller, T., Evans, A., Schied, C., & Keller, A. (2022). “Instant Neural Graphics Primitives with a Multiresolution Hash Encoding.” ACM TOG (SIGGRAPH).
  7. Schönberger, J. L., & Frahm, J.-M. (2016). “Structure-from-Motion Revisited.” CVPR 2016 (COLMAP).
  8. Wang, Z., Wu, S., Xie, W., Chen, M., & Prisacariu, V. A. (2023). “NeRF—: Neural Radiance Fields without Known Camera Parameters.” arXiv.
  9. “city-super/scaffold-gs.” GitHub: city-super/scaffold-gs.

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

深度解析 Scaffold-GS:结构化 3D 高斯与视角自适应渲染
https://aiattnstudio.link/posts/scaffold-gs/
作者
Federico
发布于
2026-07-16
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author

Federico

AI Research Lab

Hello, I'm Federico.

关于实验室 / About
公告

欢迎来到Federico的个人博客

分类
标签
站点统计
57文章
7分类
404标签