【论文笔记】GaussianFlowOcc: Sparse and Weakly Supervised Occupancy Estimation using Gaussian Splatting an
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 s∈R3、旋转四元数 r ∈ R 4 r\in\mathbb R^4 r∈R4和语义分数 c ∈ R C c\in\mathbb R^C c∈RC( C C C为语义类别数)。
本文训练一个模型 M ( I ) M(I) M(I)估计3D高斯 G G G。如果需要,可很容易地通过后处理将高斯表达转化为体素表达,从而与之前的方法进行比较。
2. 模型结构

- 使用图像编码器提取图像特征 I ^ \hat I I^,与高斯的初始位置和特征一起送入高斯Transformer。
- 高斯Transformer迭代地使用与图像之间的交叉注意力、高斯之间的自注意力、与过去帧高斯之间的时间注意力,将初始高斯转化到其最终位置。
- 高斯头估计剩下的高斯属性和语义。同时,时间模块计算每个高斯指向其时间邻居的3D流。
- 最终的高斯与其时间偏移量被送入高斯溅射流程,渲染输入相机视角和时间相邻帧下的深度和语义图。
- 模型使用渲染与真实深度/语义分割图直接的损失进行训练。
2.1 初始高斯
本文按照类似之前工作的查询初始化方法,初始化 N N N个可学习高斯均值 G μ 0 ∈ R N × 3 G_\mu^0\in\mathbb R^{N\times 3} Gμ0∈RN×3和隐特征 G f 0 ∈ R N × D G_f^0\in\mathbb R^{N\times D} Gf0∈RN×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μb−1被MLP编码到隐维度 D D D,随后与上一个块的高斯特征 G f b − 1 G_f^{b-1} Gfb−1相加。
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) P∈RM×D(M≪N)。这些诱导点从所有高斯聚合信息,得到瓶颈表达 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=1∑Pexp(−21(p−μi)TΣ−1(p−μi))oivc(p;G)=i=1∑Pexp(−21(p−μi)TΣ−1(p−μi))ci累积不透明度低于一定阈值的被分类为空体素;语义分数最大的语义类别被视为预测语义类别。
总结:
- 2D监督来源:本文方法无需3D标签,使用预训练模型从图像生成2D监督;
- 高斯初始化:本文使用类似查询初始化方法初始化高斯位置和特征;
- 2D监督视角:本文使用了相邻帧的视图进行监督,渲染前每个高斯会根据预测的场景流移动。
更多推荐



所有评论(0)