GaussianFlowOcc: Sparse and Weakly Supervised Occupancy Estimation using Gaussian Splatting and Temporal Flow
原文链接:https://arxiv.org/abs/2502.17288v4

1. 问题定义和场景表达

3D占用预测的目标是基于当前帧 L L L个视图的图像 I = { I i } i = 1 L I=\{I^i\}_{i=1}^L I={Ii}i=1L估计自车周围的3D几何与语义。

与过去的方法使用语义体素表达不同,本文使用3D高斯分布表达3D场景。场景被定义为 N N N个高斯 G = { G i } i = 1 N G=\{G_i\}_{i=1}^N G={Gi}i=1N,每个高斯包含一组属性:均值 μ ∈ R 3 \mu\in\mathbb R^3 μR3、不透明度 o ∈ [ 0 , 1 ] o\in[0,1] o[0,1]、尺寸 s ∈ R 3 s\in\mathbb R^3 sR3、旋转四元数 r ∈ R 4 r\in\mathbb R^4 rR4和语义分数 c ∈ R C c\in\mathbb R^C cRC C C C为语义类别数)。

本文训练一个模型 M ( I ) M(I) M(I)估计3D高斯 G G G。如果需要,可很容易地通过后处理将高斯表达转化为体素表达,从而与之前的方法进行比较。

2. 模型结构

在这里插入图片描述

  1. 使用图像编码器提取图像特征 I ^ \hat I I^,与高斯的初始位置和特征一起送入高斯Transformer。
  2. 高斯Transformer迭代地使用与图像之间的交叉注意力高斯之间的自注意力与过去帧高斯之间的时间注意力,将初始高斯转化到其最终位置。
  3. 高斯头估计剩下的高斯属性和语义。同时,时间模块计算每个高斯指向其时间邻居的3D流。
  4. 最终的高斯与其时间偏移量被送入高斯溅射流程,渲染输入相机视角和时间相邻帧下的深度和语义图。
  5. 模型使用渲染与真实深度/语义分割图直接的损失进行训练。

2.1 初始高斯

本文按照类似之前工作的查询初始化方法,初始化 N N N个可学习高斯均值 G μ 0 ∈ R N × 3 G_\mu^0\in\mathbb R^{N\times 3} Gμ0RN×3和隐特征 G f 0 ∈ R N × D G_f^0\in\mathbb R^{N\times D} Gf0RN×D。其它属性不进行初始化,而是在高斯头使用隐特征进行预测。

2.2 图像编码器

使用预训练的图像主干ResNet50提取图像特征 I ^ \hat I I^

2.3 高斯Transformer

在这里插入图片描述
高斯Transformer包含 B B B个块,每个块 b b b包含以下小节所示的5个连续模块。

2.3.1 位置编码

上一个块的高斯均值 G μ b − 1 G_\mu^{b-1} Gμb1被MLP编码到隐维度 D D D,随后与上一个块的高斯特征 G f b − 1 G_f^{b-1} Gfb1相加。

2.3.2 高斯-图像交叉注意力

使用可变形交叉注意力,将当前高斯位置 G μ G_\mu Gμ根据相机参数投影到图像上,并在投影点周围采样一组图像特征,作为注意力的键与值。

2.3.3 诱导自注意力

标准的自注意力有二次时间和空间复杂度 O ( N 2 ) O(N^2) O(N2),限制了能处理的高斯数量。本文提出诱导自注意力(ISA),使得空间复杂度近似线性。如下图A所示,ISA使用两个通过瓶颈连接的注意力替代标准自注意力,引入 M M M个可学习隐向量,称为诱导点 P ∈ R M × D ( M ≪ N ) P\in\mathbb R^{M\times D}(M\ll N) PRM×D(MN)。这些诱导点从所有高斯聚合信息,得到瓶颈表达 H H H。所有高斯会再次与诱导点交互,从而实现高斯与高斯之间的交互。其计算复杂度为 O ( M N ) O(MN) O(MN)。完整过程可写为:
I S A ( G f ) = M H A ( G f , H , H ) , H = M H A ( P , G f , G f ) ISA(G_f)=MHA(G_f,H,H),H=MHA(P,G_f,G_f) ISA(Gf)=MHA(Gf,H,H),H=MHA(P,Gf,Gf)其中 M H A ( Q , K , V ) MHA(Q,K,V) MHA(Q,K,V)为标准多头自注意力(包含跳跃连接和FFN)。
在这里插入图片描述

2.3.4 诱导时间注意力

类似地,使用诱导时间注意力(ITA)促使时间信息在帧间进行高效传播,如上图B所示。首先使用诱导点 P P P关注过去帧的高斯特征,计算瓶颈特征 Z Z Z,随后将当前帧高斯特征与 Z Z Z交互。记 G f ′ G'_f Gf为上一帧的最终高斯特征,ITA可表达为
I T A ( G f , G f ′ ) = M H A ( G f , Z , Z ) , Z = M H A ( P , G f ′ , G f ′ ) ITA(G_f,G'_f)=MHA(G_f,Z,Z),Z=MHA(P,G'_f,G'_f) ITA(Gf,Gf)=MHA(Gf,Z,Z),Z=MHA(P,Gf,Gf)

2.3.5 高斯修正

该步骤用于更新高斯均值,以输入到下一个块。使用MLP(记为 R e c t ( G f ) Rect(G_f) Rect(Gf))估计残差,并添加到当前均值细化位置: G μ b + 1 = G μ b + Δ G μ b , Δ G μ b = R e c t ( G f b ) G_\mu^{b+1}=G_\mu^b+\Delta G_\mu^b,\Delta G_\mu^b=Rect(G_f^b) Gμb+1=Gμb+ΔGμb,ΔGμb=Rect(Gfb)

2.4 高斯头

高斯头使用一系列MLP头估计高斯剩下的属性。其中,不透明度 o o o使用Sigmoid函数限制范围,且旋转四元数 r r r被单位化。

3. 时间传播

收集过去帧的最终高斯均值,根据自车运动和预测的时间流移动到当前帧下,计算位置编码后与过去帧的最终高斯特征相加,得到用于ITA的过去帧的高斯特征 G f ′ G'_f Gf

4. 高斯溅射监督

使用3D高斯表达场景,可在训练时利用高斯溅射高效渲染深度和语义图。使用预训练模型生成2D语义标签和深度真值,并用2D渲染损失训练模型(深度损失使用MSE损失,语义损失使用交叉熵损失)。这使得训练是弱监督的,不需要3D标注或额外传感器数据(如激光雷达)。

5. 时间高斯溅射

由于自动驾驶中的相机视锥重叠区域很小,学习深度和场景几何较为困难。本文引入时间高斯溅射,即对于时间视野 T T T,使用 T T T个过去帧和 T T T个将来帧的标签和对应的相机参数。使用高斯溅射渲染所有时间相机视角下的深度和语义图,并计算相同的2D渲染损失。

但上述操作忽略了运动的物体,会导致监督信号的跨帧不一致。

6. 时间模块和高斯流

为解决上述问题,本文引入时间模块修正物体运动。通过估计每个高斯在 t ∈ [ − T , T ] t\in[-T,T] t[T,T]时刻的3D运动偏移量,可以将当前帧3D高斯与时间视野内所有帧对齐。

首先定义可学习时间token Ψ ∈ R 2 T × D \Psi\in\mathbb R^{2T\times D} ΨR2T×D,每个表示一帧,并附加到对应帧来自高斯Transformer的高斯特征上。最后,使用MLP估计3D运动向量 v ( t ) ∈ R 3 v(t)\in\mathbb R^3 v(t)R3

预测的偏移量会与高斯均值相加,将高斯转移到目标帧中的位置,随后进行高斯溅射。

时间模块与模型的其余部分一起训练,且仅使用渲染损失监督,而无需运动真值。

7. 体素化

为了与其余占用预测方法比较,需要将高斯表达转化为体素表达。对每个体素中心 p = ( x , y , z ) p=(x,y,z) p=(x,y,z),查询其所有的3D高斯分布值,并累积其不透明度和语义分数:
v o ( p ; G ) = ∑ i = 1 P exp ⁡ ( − 1 2 ( p − μ i ) T Σ − 1 ( p − μ i ) ) o i v c ( p ; G ) = ∑ i = 1 P exp ⁡ ( − 1 2 ( p − μ i ) T Σ − 1 ( p − μ i ) ) c i v_o(p;G)=\sum_{i=1}^P\exp(-\frac12(p-\mu_i)^T\Sigma^{-1}(p-\mu_i))o_i\\ v_c(p;G)=\sum_{i=1}^P\exp(-\frac12(p-\mu_i)^T\Sigma^{-1}(p-\mu_i))c_i vo(p;G)=i=1Pexp(21(pμi)TΣ1(pμi))oivc(p;G)=i=1Pexp(21(pμi)TΣ1(pμi))ci累积不透明度低于一定阈值的被分类为空体素;语义分数最大的语义类别被视为预测语义类别。

总结:

  • 2D监督来源:本文方法无需3D标签,使用预训练模型从图像生成2D监督
  • 高斯初始化:本文使用类似查询初始化方法初始化高斯位置和特征;
  • 2D监督视角:本文使用了相邻帧的视图进行监督,渲染前每个高斯会根据预测的场景流移动。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐