【论文精读】FreeSplat

今天读一篇NeurIPS2024的文章,FreeSplat: Generalizable 3D Gaussian Splatting Towards Free-View Synthesis of Indoor Scenes Reconstruction,该文章提出的方法能够从长序列输入重建几何一致的 3D 场景以实现自由视角合成,作者来自NTU。
项目地址:FreeSplat

Abstract

3DGS的generalization能力较弱,现有方法主要局限于窄范围视角的插值,无法有效定位 3D 高斯点,导致难以实现自由视角合成。FreeSplat提出了:

  • 低成本的跨视角特征聚合 (Low-cost Cross-View Aggregation),通过在相邻视角间构建自适应代价体 (adaptive cost volume),并采用多尺度特征聚合来增强特征匹配。
  • 像素级三元组融合 (Pixel-wise Triplet Fusion, PTF),用于消除多视角重叠区域的冗余高斯点,并聚合跨视角的特征。
  • 自由视角训练策略 (Free-View Training, FVT),在不同数量的输入视角下进行训练,以确保模型在更广视角范围内生成稳定的视图。
    实验表明,FreeSplat在新视角合成质量和深度估计精度方面均达到了SOTA,同时推理更高效,并有效减少冗余的高斯点,使得无需深度先验即可进行前向大场景重建。

1 Introduction

主要挑战:

  • 3D 高斯点的全局定位问题:现有方法的监督主要依赖在视角内插值,这常常导致3D高斯点定位不准确,如果要渲染的是更外面的视角,就容易出现floating现象。
  • 冗余高斯点问题:进一步的,多视角信息通常通过简单的concatenation进行融合,导致在重叠区域产生冗余高斯点。
  • 长序列输入的计算成本:由于跨视角匹配的计算成本随序列长度增加,现有方法难以处理长序列输入,影响泛化能力。

基于上面提出的问题,论文的贡献如下:

  • 提出低成本跨视角特征聚合 (Low-cost Cross-View Aggregation),构建自适应代价体进行特征匹配,提高长序列输入下的计算效率。
  • 提出像素级三元组融合 (Pixel-wise Triplet Fusion, PTF),减少重叠区域的冗余 3D 高斯点,并有效聚合跨视角特征。
  • 得益于前两个高效的模块减轻了资源开销,我们提出自由视角训练策略 (Free-View Training, FVT),在不同数量的输入视角上进行训练,而不需要局限于只能输入两三个视角。这样,我们可以提高模型泛化性。

2 Related Work

介绍一些相关工作,包括新视角合成这个任务、该任务的generalization问题,还有室内scene reconstruction。

3 Preliminary

介绍3D-GS与generalizable 3D-GS。

4 Our Methodology

在这里插入图片描述

4.1 Overview

核心目标是提高3DGS的泛化能力,使其能够处理长序列输入并支持自由视角合成。为此,本文提出了两个关键模块:

  1. Low-cost Cross-View Aggregation
    • 通过构建adaptive cost volume进行高效特征匹配。
    • 采用multi-scale feature aggregation来增强3D高斯点的全局定位能力。
  2. Pixel-wise Triplet Fusion
    • 像素级对齐多视角3D高斯点,减少重叠区域的冗余点云。
    • 使用轻量级 GRU进行跨视角特征融合,提高3D高斯点的准确性。

整体流程如下:

  1. 从输入的稀疏图像序列提取特征。
  2. 相邻视角之间构建cost volume并进行深度估计。
  3. 通过unprojection将图像特征转换为gaussian triplets。
  4. 采用PTF模块逐步融合局部和全局高斯点,并去除冗余。这样我们就可以在latent feature space中融合冗余3D gaussians并且在decoding之前就结合多视角gaussian features。
  5. 最终,解码高斯点的参数,并渲染新的视角图像。

4.2 Low-cost Cross-View Aggregation

4.2.1 Efficient 2D Feature Extraction

  • 给定输入的稀疏图像序列 { I t } t = 1 T \{I_t\}_{t=1}^{T} {It}t=1T,首先提取多尺度特征
    F e t = CNN ( I t ) F m t = CNN m ( I t ) F_e^t = \text{CNN}(I_t) \\ F_m^t = \text{CNN}_m(I_t) Fet=CNN(It)Fmt=CNNm(It)
    其中:
    • F e t F_e^t Fet 是multi-scale embeddings
    • F m t F_m^t Fmt是matching feature
  • 区别于PixelSplat和MVSplat
    • 现存的方法依赖基于Transformer的特征提取,计算量大。
    • 我们的FreeSplat采用纯CNN进行高效特征提取,提高计算效率。

4.2.2 Adaptive Cost Volume

  • 目标:利用相机位姿信息,在任意长度的输入视角之间构建cost volume
  • 步骤
    1. 选择 N 个最近的相邻视角 { I t n } n = 1 N \{I^{t_n}\}_{n=1}^{N} {Itn}n=1N
    2. 定义 K 个虚拟深度平面 { d k } k = 1 K \{d_k\}_{k=1}^{K} {dk}k=1K,其中:
      d k ∈ [ d near , d far ] d_k \in [d_{\text{near}}, d_{\text{far}}] dk[dnear,dfar]
    3. 将相邻视角的特征投影到深度平面 d k d_{k} dk
      F ~ m t n , k = Trans ( P t n , P t ) F m t n \tilde{F}_m^{t_n, k} = \text{Trans}(P^{t_n}, P^t) F_m^{t_n} F~mtn,k=Trans(Ptn,Pt)Fmtn
      其中, Trans ( P t n , P t ) \text{Trans}(P^{t_n}, P^t) Trans(Ptn,Pt)是视角 t n t_{n} tn t t t的transformation matrix。
    4. 计算cost volume F c v t ∈ R K × H 4 × W 4 F_{cv}^{t} \in \mathbb{R}^{K \times \frac{H}{4} \times \frac{W}{4}} FcvtRK×4H×4W
      F cv t ( k ) = f θ ( ( 1 N ∑ n = 1 N cos ⁡ ( F m t , F ~ m t n , k ) ) ⊕ ( 1 N ∑ n = 1 N F ~ m t n , k ) ) F_{\text{cv}}^t(k) = f_{\theta} \left(( \frac{1}{N} \sum_{n=1}^{N} \cos(F_m^t, \tilde{F}_m^{t_n, k})) \oplus (\frac{1}{N} \sum_{n=1}^{N} \tilde{F}_m^{t_n, k}) \right) Fcvt(k)=fθ((N1n=1Ncos(Fmt,F~mtn,k))(N1n=1NF~mtn,k))
      其中:
      • cos ⁡ ( ⋅ , ⋅ ) \cos(\cdot, \cdot) cos(,)计算余弦相似度
      • ⊕ \oplus 代表特征concatenation
      • f θ ( ⋅ ) f_{\theta}(\cdot) fθ()是一个 1 × 1 1 \times 1 1×1CNN映射到维度1
        在这里,前面算的是每个matching feature在不同深度假设下和current view的特征的相似度,然后求平均,后面算的是相邻视角特征本身转到当前视角后的值,再平均。然后把这些信息拼接再卷积。

4.2.3 Multi-Scale Feature Aggregation

  • 目标:增强代价体的全局感受野,提升3D高斯点的准确性。
  • 方法
    1. 使用多尺度 U-Net++ 结构。先Encode代价体,然后与多尺度特征拼接,再交给U-Net++融合,upsample到full resolution并得到depth candidates map和gaussian triplet map:
      F agg t = U-Net ( E n c ( F cv t ) , { F s t } ) F_{\text{agg}}^t = \text{U-Net}(Enc(F_{\text{cv}}^{t}), \{F_s^t\}) Faggt=U-Net(Enc(Fcvt),{Fst})
    2. 通过Softmax 预测深度。第一步得到了得到深度的candidates map D c t ∈ R K × H × W D_{c}^{t} \in \mathbb{R}^{K \times H \times W} DctRK×H×W和Gaussian triplet map F l t ∈ R C × H × W F_{l}^{t} \in \mathbb{R}^{C \times H \times W} FltRC×H×W,再使用Sfotmax操作:
      D t = ∑ k = 1 K softmax ( D c t ) k ⋅ d k D^t = \sum_{k=1}^{K} \text{softmax}(D_c^t)_k \cdot d_k Dt=k=1Ksoftmax(Dct)kdk
    3. 然后,pixel-align的 F l t F_{l}^{t} Flt通过unprojection得到3D 高斯三元组
      { μ l t , ω l t , f l t } \{\mu_l^t, \omega_l^t, f_l^t\} {μlt,ωlt,flt}
      其中, μ l t ∈ R 3 × H W \mu_l^t \in \mathbb{R}^{3 \times HW} μltR3×HW是高斯中心, ω l t ∈ R 1 × H W \omega_l^t \in \mathbb{R}^{1 \times HW} ωltR1×HW是(0,1)之间的权重, f l t ∈ R ( C − 1 ) × H W f_l^t \in \mathbb{R}^{(C-1) \times HW} fltR(C1)×HW是Gaussian triplet features。

4.3 Pixel-wise Triplet Fusion

4.3.1 Pixel-wise Alignment

  • 目标:以前的方法pixel-align会导致重叠区域有很多冗余高斯,并且最多也只使用opacity来简单结合多视角下相同区域的高斯。我们想要匹配local和global 3D高斯点。
  • 方法
    1. 将全局高斯点投影到当前视角。给定Gaussian triplets { μ l t , f l t } t = 1 T \{\mu_l^t, f_l^t\}_{t=1}^{T} {μlt,flt}t=1T,我们从 t = 1 t=1 t=1开始,我们把3D的高斯中心 μ g t − 1 ∈ R 3 × M \mu_g^{t-1} \in \mathbb{R}^{3 \times M} μgt1R3×M投影到该视角:
      p g t = { x g t , y g t , d g t } = P t μ g t − 1 p_g^t = \{x_{g}^{t}, y_{g}^{t}, d_{g}^{t}\} =P^t \mu_g^{t-1} pgt={xgt,ygt,dgt}=Ptμgt1
      其中 { x g t , y g t , d g t } \{x_{g}^{t}, y_{g}^{t}, d_{g}^{t}\} {xgt,ygt,dgt}是projected 2D坐标和深度。
    2. 寻找像素级匹配。现在我们要处理当前图像的局部高斯了。我们希望回答一个问题:
      当前图像的这个局部高斯点,是不是和一个全局高斯点在同一个像素位置?
      对于第 i i i个local Gaussian,坐标为 [ x l t ( i ) , y l t ( i ) ] [x_l^t(i),y_l^t(i)] [xlt(i),ylt(i)],深度为 d l t ( j ) d_{l}^{t}(j) dlt(j),我们找到intra-pixel global projection:
      S t i = { j ∣ [ x g t ( j ) ] = x l t ( i ) , [ y g t ( j ) ] = y l t ( i ) } S_t^i = \{ j | [x_g^t(j)] = x_l^t(i), [y_g^t(j)] = y_l^t(i) \} Sti={j[xgt(j)]=xlt(i),[ygt(j)]=ylt(i)}
      其中 [ ⋅ , ⋅ ] [\cdot, \cdot] [,]是rounding操作。这是查找在同一个像素位置的全局高斯点,取整是因为像素位置必须是整数(图像像素)。
    3. 根据深度阈值选择最近的匹配。找出深度最近的匹配点,如果深度差异不超过一个阈值:
      m i = arg ⁡ min ⁡ j ∈ S t i ∣ d g t ( j ) − d l t ( i ) ∣ , if  ∣ d l t ( i ) − min ⁡ j ∈ S t i d g t ( j ) ∣ < δ ⋅ d l t ( i ) m_i = \arg\min_{j \in S_t^i} \left| d_g^t(j) - d_l^t(i) \right|, \quad \text{if } \left| d_l^t(i) - \min_{j \in S_t^i} d_g^t(j) \right| < \delta \cdot d_l^t(i) mi=argjStimin dgt(j)dlt(i) ,if  dlt(i)jStimindgt(j) <δdlt(i)
      其中 δ \delta δ是ratio threshold。这一步是为了避免错误匹配远近不同的点。
      那么,valid correspondence就是:
      F t = { ( i , m i ) ∣ i = 1 , . . . , H W ; m i ≠ ∅ } \mathbf{F^{t}} = \{(i,m_{i})|i=1,...,HW;m_{i}\neq \emptyset\} Ft={(i,mi)i=1,...,HW;mi=}
      这个集合表示:当前高斯点 i i i和全局高斯点 m i m_{i} mi是同一个 3D点的两个版本,我们准备融合它们。

4.3.2 Gaussian Triplet Fusion

  • 目标:融合那些被判定为“同一个3D点”的高斯三元组,减少冗余、保留跨视角信息。
  • 方法
    1. 几何中心融合(更新高斯中心)。给定一个pair ( i , m i ) ∈ F t (i,m_{i}) \in \mathbf{F^{t}} (i,mi)Ft,我们计算它们的中心坐标的加权求和,并更新融合后的权重 ω \omega ω,权重更新体现“观测次数累加”的含义,这个点被看到得越多,越重要:
      μ g t ( m i ) = ω l t ( i ) μ l t ( i ) + ω g t − 1 ( m i ) μ g t − 1 ( m i ) ω l t ( i ) + ω g t − 1 ( m i ) \mu_g^t(m_i) = \frac{\omega_l^t(i) \mu_l^t(i) + \omega_g^{t-1}(m_i) \mu_g^{t-1}(m_i)}{\omega_l^t(i) + \omega_g^{t-1}(m_i)} μgt(mi)=ωlt(i)+ωgt1(mi)ωlt(i)μlt(i)+ωgt1(mi)μgt1(mi)
      ω g t ( m i ) = ω l t ( i ) + ω g t − 1 ( m i ) \omega_{g}^{t}(m_{i}) = \omega_{l}^{t}(i) + \omega_{g}^{t-1}(m_{i}) ωgt(mi)=ωlt(i)+ωgt1(mi)
    2. 特征融合(使用轻量级 GRU)。不同视角下看到的点会有不同特征,我们希望融合这些信息:
      f g t ( m i ) = GRU ( f l t ( i ) , f g t − 1 ( m i ) ) f_g^t(m_i) = \text{GRU}(f_l^t(i), f_g^{t-1}(m_i)) fgt(mi)=GRU(flt(i),fgt1(mi))
      把“当前局部点的特征”当作输入,把“历史上的全局特征”当作 GRU 的 hidden state,从而得到新的融合特征。

4.3.4 Gaussian Primitives Decoding

根据Triplets获得渲染所需的参数:
Σ , α , s = M L P d ( f g T ) \Sigma, \alpha, s = MLP_{d}(f_{g}^{T}) Σ,α,s=MLPd(fgT)
而高斯中心 μ = μ g ⊤ \mu = \mu_{g}^{\top} μ=μg

4.4 Training

4.4.1 Loss Functions

  • 采用 均方误差 (MSE) + LPIPS 感知损失
    L = λ 1 ∣ ∣ C render − C gt ∣ ∣ 2 + λ 2 LPIPS ( C render , C gt ) L = \lambda_1 ||C_{\text{render}} - C_{\text{gt}}||^2 + \lambda_2 \text{LPIPS}(C_{\text{render}}, C_{\text{gt}}) L=λ1∣∣CrenderCgt2+λ2LPIPS(Crender,Cgt)
    其中:
    • λ 1 = 1 \lambda_1 = 1 λ1=1, λ 2 = 0.05 \lambda_2 = 0.05 λ2=0.05

4.4.2 Free-View Training

  • 随机选择2-8个视角进行训练,以确保不同数量的视角均能泛化。补充材料中写了实际采用这个策略训练的时候是4个视角训练,而测试时构建cost volume是使用相邻的8个视角。
  • 训练时优化高斯点的全局定位,提高模型在长序列输入下的稳定性。

5 Experiments

在室内数据集上实验,主要与pixelSplat和MVSplat做了比较。

  1. 在ScanNet上测试NVS效果,除了测试2/3视角之外,当输入long sequence(10 views)时,FreeSplat的表现依旧不错。
  2. 对比了新视角的深度估计的结果。
  3. 在Replica上做了zero-shot测试验证泛化性能。
  4. 在补充材料中,也在pixelSplat和MVSplat使用的re10k和acid数据集上做了对比。

整体来说这篇文章的实验做得很充分。

6 Conclusion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuhsiHu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值