论文阅读:GaussianFormer: Scene as Gaussians for Vision-Based 3D Semantic Occupancy Prediction
Abstract
3D语义占有率预测旨在获得周围场景的3D细粒度几何和语义,是以视觉为中心的自主驾驶健壮性的重要任务。现有的场景表示方法大多采用体素等密集网格表示场景,忽略了场景占用的稀疏性和对象尺度的多样性,从而导致资源分配的不平衡。为了解决这一问题,我们提出了一种以对象为中心的表示方法来描述具有稀疏3D语义高斯的3D场景,其中每个高斯表示一个灵活的感兴趣区域及其语义特征。我们通过注意力机制从图像中收集信息,并迭代地提炼3D高斯图的属性,包括位置、协方差和语义。然后,我们提出了一种高效的高斯-体素散布方法来生成3D入住率预测,该方法只聚合某个位置的相邻高斯图。我们在广泛采用的nuScenes和Kitti-360数据集上进行了广泛的实验。实验结果表明,GaussianFormer的性能与目前最先进的方法相当,内存消耗仅为其17.8%-24.8%。代码可从以下网址获得:https://github.Com/Huang-yh/GaussianFormer.
1 Introduction
是否使用LiDART进行3D感知长期以来一直是自动驾驶公司的核心争论。虽然以视觉为中心的系统具有经济优势,但它们无法捕捉任意形状的障碍物,从而阻碍了驾驶的安全性和稳健性[13,17,25,26]。3D语义占用预测方法[4,16,18,35,50,57]的出现通过预测周围3D空间中每个体素的占用状态来解决这个问题,这促进了各种新出现的任务,例如端到端自动驾驶[46]、4D占用预测[58]和自我监督3D场景理解[15]。
尽管3D占有率预测有着广阔的应用前景,但其密集的输出空间对如何高效地表示3D场景提出了极大的挑战。基于体素的方法[23,50]为每个体素分配一个特征向量,以获得描述3D场景的细粒度结构的密集表示。考虑到3D空间的稀疏性,它们使用从粗到精的上采样[46,50]或体素滤波[23,33]来提高效率。由于大多数体素空间是空闲的[3],基于Bev的方法[27,56]压缩高度维度并使用鸟瞰(BEV)作为场景表示,但它们通常需要多尺度融合[56]等后处理来捕捉更精细的细节。TPVFormer[16]用两个额外的平面概括了BEV,并与三透视图(TPV)实现了更好的性能和复杂性权衡。然而,它们都是基于网格的方法,不可避免地会受到空网格的冗余,从而导致下游任务的更复杂[46]。使用基于网格的表示来捕捉场景动态也更加困难,因为在3D空间中移动的是对象而不是网格[58]。
本文首次提出了一种面向对象的三维语义占有率预测方法。我们使用一组3D语义高斯来稀疏地描述3D场景。每个高斯表示一个灵活的感兴趣区域,并由均值、协方差及其语义类别组成。我们提出了一种GaussianFormer模型来有效地从图像输入中获取3D语义高斯图。我们随机初始化一组查询来实例化3D高斯图,并采用交叉注意机制从多尺度图像特征中聚集信息。我们迭代地改进3D高斯图的属性,以实现更流畅的优化。为了有效地融合3D高斯人之间的交互作用,我们将它们视为位于高斯均值的点云,并利用3D稀疏卷积来处理它们。然后,我们从更新的查询中解码3D语义高斯的属性作为场景表示。受图像绘制中的三维高斯散布方法的启发[20],我们设计了一个高效的高斯体素散布模块,该模块聚合相邻的高斯体素来生成某个3D位置的语义占有率。所提出的3D高斯表示使用稀疏和自适应的特征集来描述3D场景,但由于高斯混合的通用逼近能力,仍然可以建模细粒度结构[8,11]。在三维高斯表示的基础上,GaussianFormer进一步使用稀疏卷积和基于局部聚集的高斯-体素散布来实现高效的三维语义占用预测,如图1所示。我们分别在nuScenes和Kitti-360数据集上进行了大量的实验,用于从周围摄像机和单目摄像机进行3D语义占用预测。GaussianFormer获得了与现有最先进方法相当的性能,而内存消耗仅为其17.8%-24.8%。我们的定性可视化显示,GaussianFormer能够生成场景的整体和逼真的感知。
3 Proposed Approach
在本节中,我们介绍了用于3D语义占用预测的3D高斯飞溅方法。我们首先引入一种以对象为中心的3D场景表示,它用3D语义高斯自适应地描述感兴趣的区域(Sec. 3.1)。然后,我们解释了如何有效地将图像输入的信息转换为3D高斯,并详细介绍了模型设计,包括自编码、图像交叉注意和属性细化(Sec. 3.2)。最后,我们详细介绍了高斯到体素飞溅模块,该模块基于局部聚集生成密集的3D占用预测,并且可以使用CUDA(Sec. 3.2)。
3.1 Object-centric 3D Scene Representation
基于视觉的3D语义占用预测旨在以多视图相机图像作为输入来预测每个体素网格的密集占用状态和语义。形式上,给定一组多视图图像 I = { I i ∈ R 3 × H × W ∣ i = 1 , . . . , N } \mathcal{I}=\{\mathbf{I}_i\in\mathbb{R}^{3\times H\times W}|i=1,...,N\} I={Ii∈R3×H×W∣i=1,...,N},以及相应的内在函数 K = { K i ∈ R 3 × 3 ∣ i = 1 , . . . , N } \mathcal{K} = \{\mathbf{K}_i \in \mathbb{R}^{3\times3}|i = 1,...,N\} K={Ki∈R3×3∣i=1,...,N} 和外质 T = { T i ∈ R 4 × 4 ∣ i = 1 , . . . , N } \mathcal{T} = \{\mathbf{T}_i \in \mathbb{R}^{4\times4}|i = 1,...,N\} T={Ti∈R4×4∣i=1,...,N},目标是预测3D语义占用 O ∈ C X × Y × Z \mathbf{O}\in\mathcal{C}^{X\times Y\times Z} O∈CX×Y×Z,其中 N N N 、 { H , W } \{H,W \} {H,W}、 C \mathcal{C} C 和 { X , Y , Z } \{X,Y,Z\} {X,Y,Z}表示视图数量、图像分辨率、语义类别集和目标体积分辨率。
自动驾驶场景包含各种规模的前景对象(例如公交车和行人)以及不同复杂性的背景区域(例如道路和植被)。密集体素表示 (Dense voxel representation) 忽视了这种多样性,并以相等的存储和计算资源处理每个3D位置,这往往会因为资源分配不合理而导致棘手的负担。平面表示 (Planar representations),例如BEV和TPV,通过首先将3D信息编码到2D特征图中以提高效率,然后从2D特征恢复3D结构来实现3D感知。尽管平面表示对资源友好,但它们可能会导致细节丢失。基于网格的方法很难适应不同场景的感兴趣区域,从而导致表示和计算冗余。
为了解决这个问题,我们提出了一种用于3D语义占用预测的以对象为中心的3D表示,其中每个单元描述感兴趣区域而不是固定网格,如图2所示。我们用许多3D语义高斯来表示自动驾驶场景,其中每一个都实例化了以均值、协方差和语义逻辑为特征的语义高斯分布。3D位置的占用预测可以通过对在该位置评估的语义高斯分布的值进行总和来计算。具体来说,我们使用一组
P
P
P 3D高斯
G
=
{
G
i
∈
R
d
∣
i
=
1
,
.
.
.
,
P
}
\mathcal{G}=\{\mathbf{G}_i\in\mathbb{R}^d|i=1,...,P\}
G={Gi∈Rd∣i=1,...,P} 对于每个场景,并且每个3D高斯由形式为
(
m
∈
R
3
,
s
∈
R
3
,
r
∈
R
4
,
c
∈
R
∣
C
∣
)
(\mathbf{m}\in\mathbb{R}^3,\mathbf{s}\in\mathbb{R}^3,\mathbf{r}\in\mathbb{R}^4,\mathbf{c}\in\mathbb{R}^{|\mathcal{C}|})
(m∈R3,s∈R3,r∈R4,c∈R∣C∣) 的d维载体表示,其中
d
=
10
+
∣
C
∣
d=10+|\mathcal{C}|
d=10+∣C∣,
m
\mathbf{m}
m、
s
\mathbf{s}
s、
r
\mathbf{r}
r、
c
\mathbf{c}
c 分别表示均值、比例、旋转载体和语义逻辑。因此,在点p =(x,y,z)处评估的语义高斯分布
g
\mathbf{g}
g 的值为
g
(
p
;
m
,
s
,
r
,
c
)
=
exp
(
−
1
2
(
p
−
m
)
T
Σ
−
1
(
p
−
m
)
)
c
\mathbf{g}(\mathbf{p};\mathbf{m},\mathbf{s},\mathbf{r},\mathbf{c})=\exp\bigl(-\frac{1}{2}(\mathbf{p}-\mathbf{m})^T\mathbf{\Sigma}^{-1}(\mathbf{p}-\mathbf{m})\bigr)\mathbf{c}
g(p;m,s,r,c)=exp(−21(p−m)TΣ−1(p−m))c
Σ = R S S T R T , S = d i a g ( s ) , R = q 2 r ( r ) , \mathbf{\Sigma}=\mathbf{RSS}^T\mathbf{R}^T,\quad\mathbf{S}=\mathrm{diag}(\mathbf{s}),\quad\mathbf{R}=\mathrm{q2r}(\mathbf{r}), Σ=RSSTRT,S=diag(s),R=q2r(r),
其中
Σ
\Sigma
Σ、
d
i
a
g
(
⋅
)
\mathrm{diag}(\cdot)
diag(⋅) 和
q
2
r
(
⋅
)
\mathrm{q2r}(\cdot)
q2r(⋅) 分别代表协方差矩阵、从载体构建对角矩阵的函数以及将四元数转换为旋转矩阵的函数。那么
p
\mathbf{p}
p 点的占用预测结果可以用公式表示为各个高斯对位置
p
\mathbf{p}
p 的贡献的总和:
o
^
(
p
;
G
)
=
∑
i
=
1
P
g
i
(
p
;
m
i
,
s
i
,
r
i
,
c
i
)
=
∑
i
=
1
P
exp
(
−
1
2
(
p
−
m
i
)
T
Σ
i
−
1
(
p
−
m
i
)
)
c
i
\hat{o}(\mathbf{p};\mathcal{G})=\sum_{i=1}^P\mathbf{g}_i(\mathbf{p};\mathbf{m}_i,\mathbf{s}_i,\mathbf{r}_i,\mathbf{c}_i)=\sum_{i=1}^P\exp\bigl(-\frac12(\mathbf{p}-\mathbf{m}_i)^T\mathbf{\Sigma}_i^{-1}(\mathbf{p}-\mathbf{m}_i)\bigr)\mathbf{c}_i
o^(p;G)=i=1∑Pgi(p;mi,si,ri,ci)=i=1∑Pexp(−21(p−mi)TΣi−1(p−mi))ci
与体素表示相比,均值和协方差属性允许3D高斯表示根据对象规模和区域复杂性自适应地分配计算和存储资源。因此,我们需要更少的3D高斯来建模场景,以获得更高的效率,同时仍然保持表现力。同时,3D高斯表示以3D高斯为基本单位,从而避免了平面表示中因降维而可能造成的细节损失。此外,每个3D高斯都具有明确的语义含义,使得从场景表示到占用预测的转换比其他通常涉及从多维特征解码每个体素语义的表示中的转换要容易得多。
3.2 GaussianFormer: Image to Gaussians
基于场景的3D语义高斯表示,我们进一步提出了GaussianFormer模型,以从多视图图像中学习有意义的3D高斯。整个管道如图3所示。我们首先将3D高斯的属性及其相应的多维查询初始化为可学习的载体。然后我们迭代地细化GaussianFormer的 B B B 块内的高斯属性。每个模块包括一个自编码模块,用于实现3D高斯之间的交互,一个图像交叉注意模块,用于聚合视觉信息,以及一个细化模块,用于纠正3D高斯的属性。
Gaussian Properties and Queries. 我们在GaussianFormer中介绍了两组功能。高斯属性(Gaussian Properties) G = { G i ∈ R d ∣ i = 1 , . . . , P } \mathcal{G} = \{\mathbf{G}_i \in \mathbb{R}^d|i = 1,...,P\} G={Gi∈Rd∣i=1,...,P} 是第3.1节中讨论的物理属性,它们实际上是模型的学习目标。另一方面,高斯查询(Gaussian queries) Q = { Q i ∈ R m ∣ i = 1 , . . . , P } \mathcal{Q} = \{\mathbf{Q}_i\in\mathbb{R}^m|i=1,...,P\} Q={Qi∈Rm∣i=1,...,P} 是在自编码和图像交叉注意模块中隐式编码3D信息的多维特征载体,并为细化模块中的纠正提供指导。我们将高斯属性初始化为可学习的载体,由图3中的初始属性表示。
Self-encoding Module. 出于效率考虑,具有体素或平面表示的方法通常实现具有可变形注意力的自编码模块,但这对于非结构化3D高斯表示来说并没有得到很好的支持。相反,我们利用3D稀疏卷积 (3D sparse convolution) 来允许3D高斯之间的交互,与可变形注意力共享相同的线性计算复杂性。具体来说,我们将每个高斯视为位于其平均值 m \mathbf{m} m 处的点,对生成的点云进行体素化(在图3中用 Voxelization 表示),并对体素网格应用稀疏卷积。由于3D高斯 P P P 的数量比 X × Y × Z X \times Y \times Z X×Y×Z 少得多,因此稀疏卷积可以有效地利用高斯的稀疏性。
Image Cross-attention Module. 图像交叉注意模块(ICA)旨在从图像中提取视觉信息,用于我们的基于视觉的方法。为了详细说明,对于3D高斯
G
\mathbf{G}
G,我们首先生成一组3D参考点
R
=
{
m
+
Δ
m
i
∣
i
=
1
,
.
.
.
,
R
}
\mathcal{R}=\{\mathbf{m}+\Delta\mathbf{m}_i|i=1,...,R\}
R={m+Δmi∣i=1,...,R} 通过用偏置值
Δ
m
\Delta \mathbf{m}
Δm 置换平均值
m
\mathbf{m}
m 。我们根据高斯协方差计算偏差,以反映其分布的形状。然后,我们将3D参考点投影到具有外质
T
\mathcal{T}
T 和内质
K
\mathcal{K}
K 的图像特征地图上。最后,我们用检索到的图像特征的加权和更新高斯查询
Q
\mathbf{Q}
Q :
I
C
A
(
R
,
Q
,
F
;
T
,
K
)
=
1
N
∑
n
=
1
N
∑
i
=
1
R
D
A
(
Q
,
π
(
R
;
T
,
K
)
,
F
n
)
\mathrm{ICA}(\mathcal{R},\mathbf{Q},\mathbf{F};\mathcal{T},\mathcal{K})=\frac1N\sum_{n=1}^N\sum_{i=1}^R\mathrm{DA}(\mathbf{Q},\pi(\mathcal{R};\mathcal{T},\mathcal{K}),\mathbf{F}_n)
ICA(R,Q,F;T,K)=N1n=1∑Ni=1∑RDA(Q,π(R;T,K),Fn)
其中
F
\mathbf{F}
F 、
D
A
(
⋅
)
\mathrm{DA}(\cdot)
DA(⋅)、
π
(
⋅
)
\pi(\cdot)
π(⋅)分别表示图像特征图、可变形注意力函数和从世界到像素坐标的转换(the transformation from world to pixel coordinates)。
Refinement Module. 我们使用细化模块在相应的高斯查询的指导下纠正高斯属性,这些高斯查询在先前的自编码和图像交叉注意模块中聚集了足够的3D信息。具体来说,我们在物体检测方面从DETR [60]中汲取灵感。对于3D高斯 $ \mathbf{G=(m,s,r,c)}$ ,我们首先用多层感知器(MLP)从高斯查询
Q
\mathbf{Q}
Q解码中间属性
G
^
=
(
m
^
,
s
^
,
r
^
,
c
^
)
\mathbf{\hat{G}}=(\mathbf{\hat{m}},\mathbf{\hat{s}},\mathbf{\hat{r}},\mathbf{\hat{c}})
G^=(m^,s^,r^,c^)。当用中间性质细化旧性质时,我们将中间平均值
m
^
\mathbf{\hat{m}}
m^ 视为残差,并将其与旧平均值
m
\mathbf{m}
m 相加,同时我们直接用其他中间性质
(
s
^
,
r
^
,
c
^
)
(\mathbf{\hat{s}},\mathbf{\hat{r}},\mathbf{\hat{c}})
(s^,r^,c^) 替换相应的旧性质:
G
^
=
(
m
^
,
s
^
,
r
^
,
c
^
)
=
M
L
P
(
Q
)
,
G
n
e
w
=
(
m
+
m
^
,
s
^
,
r
^
,
c
^
)
\mathbf{\hat{G}}=(\mathbf{\hat{m}},\mathbf{\hat{s}},\mathbf{\hat{r}},\mathbf{\hat{c}})=\mathrm{MLP}(\mathbf{Q}),\quad\mathbf{G}_{new}=(\mathbf{m}+\mathbf{\hat{m}},\mathbf{\hat{s}},\mathbf{\hat{r}},\mathbf{\hat{c}})
G^=(m^,s^,r^,c^)=MLP(Q),Gnew=(m+m^,s^,r^,c^)
我们用残差连接来细化高斯的平均值,以便在GaussianFormer的整个
B
B
B 块中保持一致性。其他属性的直接替换是由于担心我们应用于协方差和语义logit的sigmoid和softmax激活的梯度消失。
3.3 Gaussian-to-Voxel Splatting
由于高斯混合的通用逼近能力[8,11],3D语义高斯可以有效地表示3D场景,因此可以直接处理以执行运动规划和控制等下游任务。具体来说,为了实现3D语义占用预测,我们设计了一个高效的高斯到体素飞溅模块,仅使用局部聚合操作将3D高斯表示有效地转换为3D语义占用预测。
尽管 公式(3)将变换的主要思想展示为3D高斯贡献的总和,但由于棘手的计算和存储复杂性( O ( X Y Z × P ) O(XYZ\times P) O(XYZ×P)),查询每个体素位置的所有高斯是不可行的。由于公式(1)中的权重 exp ( − 1 2 ( p − m ) T Σ − 1 ( p − m ) ) \exp\bigl(-\frac12(\mathbf{p}-\mathbf{m})^T\boldsymbol{\Sigma}^{-1}(\mathbf{p}-\mathbf{m})\bigr) exp(−21(p−m)TΣ−1(p−m)) 相对于 mahalanobis距 离的平方呈指数级衰减,因此当距离足够大时,它应该可以忽略不计。基于语义高斯分布的局部性,我们仅考虑每个体素位置附近的3D高斯,以提高效率。
如图4所示,我们首先根据3D高斯的平均值
m
\mathbf{m}
m 将其嵌入到大小为
X
×
Y
×
Z
X \times Y \times Z
X×Y×Z 的目标体素网格中。对于每个3D高斯,我们根据其尺度属性
s
\mathbf{s}
s 计算其邻近区域的半径。我们将高斯指数和邻近区域内每个体素的指数作为一个数组
(
g
,
v
)
(g,v)
(g,v) 附加到列表中。然后我们根据体素的指数对列表进行排序,以得出每个体素应该关注的3D高斯指数:
s
o
r
t
v
o
x
(
[
(
g
,
v
g
1
)
,
.
.
.
,
(
g
,
v
g
k
)
]
g
=
1
P
)
=
[
(
g
v
1
,
v
)
,
.
.
.
,
(
g
v
l
,
v
)
]
v
=
1
X
Y
Z
\mathrm{sort}_{vox}\big([(g,v_{g_1}),...,(g,v_{g_k})]_{g=1}^P\big)=[(g_{v_1},v),...,(g_{v_l},v)]_{v=1}^{XYZ}
sortvox([(g,vg1),...,(g,vgk)]g=1P)=[(gv1,v),...,(gvl,v)]v=1XYZ
其中
k
k
k,
l
l
l 分别表示某个高斯的邻近体素的数量,以及对某个体素有贡献的高斯的数量。最后,我们可以仅用邻近的高斯有效地逼近公式(3):
o
^
(
p
;
G
)
=
∑
i
∈
N
(
p
)
g
i
(
p
;
m
i
,
s
i
,
r
i
,
c
i
)
\hat{o}(\mathbf{p};\mathcal{G})=\sum_{i\in\mathcal{N}(\mathbf{p})}\mathbf{g}_i(\mathbf{p};\mathbf{m}_i,\mathbf{s}_i,\mathbf{r}_i,\mathbf{c}_i)
o^(p;G)=i∈N(p)∑gi(p;mi,si,ri,ci)
其中
N
(
p
)
\mathcal{N}(\mathbf{p})
N(p) 代表p点的相邻高斯集。考虑到3D高斯的动态邻居尺寸,高斯到体素飞溅的实现并不平凡。为了充分发挥图形处理器的并行计算能力,我们采用CUDA编程语言实现,以达到更好的加速效果。
整个GaussianFormer模型可以以端到端的方式有效训练。对于训练,follow TPVFormer,我们使用交叉熵损失 L c e \mathcal{L}_{ce} Lce和lovasz-softmax [2]损失 L l o v \mathcal{L}_{lov} Llov。为了以迭代方式细化高斯属性,我们对每个细化模块的输出应用监督。总损失函数为 L = ∑ i = 1 B L c e i + L l o v i \mathcal{L} = \sum^B_{i=1} \mathcal{L}_{ce}^i + \mathcal{L} _{lov} ^i L=∑i=1BLcei+Llovi ,其中 i i i 表示第 i i i 个区块。