SPA

本文提出了 SPA,一个通用的 3D 空间感知表示学习框架。SPA 利用神经渲染(Mildenhall et al., 2021)作为多视图图像的预训练任务。多视图图像更易于处理且更易获取,非常适合大规模训练,例如从互联网视频中提取数据。

具体来说,给定一个基础的二维图像骨干网络(如 ViT),首先从输入图像中提取多视图特征图。利用已知的相机位姿,从这些特征图中构建一个特征体积,并通过采样射线应用可微分神经渲染。该过程生成多视图 RGB-D 图像和语义图,用于无标签监督,从而在预训练阶段增强二维图像骨干网络的 3D 空间感知能力。

SPA 的核心贡献在于提出了一个显著的空间假设:3D 空间感知对于具身表示学习至关重要。为了验证 SPA 的有效性,进行了迄今为止规模最大的具身表示学习评估,显著超越了以往的研究。评估涵盖了 268 个任务、8 个模拟器,以及超过 10 种 SOTA 表示学习方法。


Input process

给定一组多视图图像 I={I1,I2,,IN}I = \{I_1, I_2, \dots, I_N\},其中每个图像 IiR3×H×WI_i \in \mathbb{R}^{3 \times H \times W}NZ+N \in \mathbb{Z}^+ 表示视图数量,我们使用一个二维图像骨干网络 FF(例如 ViT)对每张图像进行单独处理,生成潜在特征 L={li}i=1NL = \{l_i\}_{i=1}^N。为了增强模型的鲁棒性,我们对输入图像随机掩码,但不使用 ViT 解码器或 MAE 重建目标。

对于每个特征 lil_i,被掩盖的位置用掩码 token 填充,并将全局类标记与其他 patch 标记拼接,作为 read-out token(类似于 DPT [Ranftl et al., 2020])。随后,对这些标记进行反 patch 化,得到大小为 (H/P)×(W/P)(H/P) \times (W/P) 的潜在特征图,其中 PP 是 ViT 的 patch 大小。最后,通过两个简单的上采样层将其转换为与输入分辨率匹配的特征图 MiM_i。每个上采样层包括一个卷积层、一个 GELU 和一个像素重排层 [Shi et al., 2016],上采样因子为 P\sqrt{P}

Dynamic volume construction

为了实现多视图交互,从多视图特征图 MM 构建一个三维特征体积。

具体来说,首先使用可用的深度数据、稀疏点或预定义规则估计场景的边界。然后,将场景划分为大小为 X×Y×ZX \times Y \times Z 的体素网格,体素大小根据需要捕获的细节(如物体的精细结构或较大的环境)动态调整。体素特征 V~\tilde{V} 使用可学习的位置嵌入初始化。每个体素通过已知的变换矩阵 TT 投影到多视图特征图上。随后,应用可变形注意力机制(Deformable Attention)[Zhu et al., 2021],其中多视图特征作为键和值,体素特征作为查询。最后,通过一个三维卷积层对输出体积特征进行精炼,得到最终的特征体积 VV。这一过程可表示为:

V=Conv3D(DeformAttn(V~,M,T)).V = \text{Conv3D}(\text{DeformAttn}(\tilde{V}, M, T)).

Differentiable volumetric rendering

在构建特征体积后,采用可微分神经渲染 [Mildenhall et al., 2021] 将二维和三维域连接起来。为了更好地表示几何结构,使用隐式符号距离函数(Signed Distance Function, SDF)场建模(类似于 NeuS [Wang et al., 2021])。SDF 表示查询点到最近表面的三维距离,隐式捕获三维几何信息。

给定特征体积 VV,通过一个 3D CNN ϕ\phi 直接生成三个输出:一个 SDF 特征体积 SRX×Y×ZS \in \mathbb{R}^{X \times Y \times Z}、一个 spherical harmonic (SH) (Yu et al., 2021; Zhu et al., 2023a) coefficient field KRD×X×Y×ZK \in \mathbb{R}^{D \times X \times Y \times Z} 和一个语义特征体积 FRCsemantic×X×Y×ZF \in \mathbb{R}^{C_{\text{semantic}} \times X \times Y \times Z}。公式如下:

S,K,F=ϕ(V).S, K, F = \phi(V).

与之前的工作使用 MLP 对每个采样点单独计算属性不同,这里直接对 VV 3D CNN。这种方法消除了逐点 MLP 计算的需求,减少了冗余处理,显著提高了时间和内存效率。

Loss function

Lrender=λcolorCiC^i+λdepthDiD^i+λsemanticFiF^iL_{\text{render}} = \lambda_{\text{color}} \cdot \|C_i - \hat{C}_i\| + \lambda_{\text{depth}} \cdot \|D_i - \hat{D}_i\| + \lambda_{\text{semantic}} \cdot \|F_i - \hat{F}_i\|

L=Lrender+λeikonalLeikonal+λsdfLsdf+λfreeLfreeL = L_{\text{render}} + \lambda_{\text{eikonal}} L_{\text{eikonal}} + \lambda_{\text{sdf}} L_{\text{sdf}} + \lambda_{\text{free}} L_{\text{free}}。