本文介绍一个多视角的3D检测模型:BEVDepth,论文收录于 AAAI2023。在这篇文章中,作者提出了一种新的具有可信深度估计的三维物体检测器。本文提出的BEVDepth通过利用激光雷达显式深度监督来提高图像深度估计的可信度。作者引入了摄像机感知深度估计模块,以增强深度预测能力。此外,针对不精确特征投影带来的副作用,设计了一种新的深度细化模块。此外借助定制的高效体素池化和多帧机制,BEVDepth在nuScenes测试集上实现了60.9%NDS,NDS得分首次达到60%。
论文链接:https://arxiv.org/abs/2206.10092
项目链接:https://github.com/Megvii-BaseDetection/BEVDepth
文章目录
1. Introduction
引言部分作者提出了疑问:目前3D检测器学习到的深度估计质量真的能满足精确地3D目标检测要求吗?为了回答这个问题,作者首先可视化了基于Lift-splat检测器学习到的深度(下图所示)。尽管此检测器取得了30 mAP,但是它学到的深度非常差(虚线框中是相对准确的深度预测区域,通常是和地面相邻的区域)。
表1中作者将学习到的深度用LiDAR生成的深度来代替,可以看到mAP和NDS提高了20个点左右(0.282/0.470,0.327/0.515),显示了提高深度估计对摄像头3D检测非常关键。
2. Delving into Depth Prediction in Lift-splat
在引言中,作者发现基于LSS的检测器即使深度差得惊人,仍然可以获得合理的3D检测结果。在本节中,作者首先回顾建立在LSS上的基线3D检测器的总体结构。然后,在基线检测器上进行了简单的实验,以揭示为什么观察到前面的现象。最后,讨论了该检测器的三个不足之处,并指出了可能的解决方案。
2.1 Model Architecture for Base Detector
基线检测器使用CenterPoint检测头来代替原始LSS分割头。简单来说它包含4个组成部分:
- 1)图像编码器从 N N N 个图像中提取图像特征, F 2 d = { F i 2 d ∈ F^{2 d}=\left\{F_i^{2 d} \in\right. F2d={Fi2d∈ R C F × H × W , i = 1 , 2 , … , N } \left.\mathbb{R}^{C_F \times H \times W}, i=1,2, \ldots, N\right\} RCF×H×W,i=1,2,…,N} 。
- 2) 深度网络从图像特征中估计图像深度, D p r e d = { D i p r e d ∈ D^{pred}=\left\{D_i^{pred} \in\right. Dpred={Dipred∈ R C D × H × W , i = 1 , 2 , … , N } \left.\mathbb{R}^{C_D \times H \times W}, i=1,2, \ldots, N\right\} RCD×H×W,i=1,2,…,N},其中 C D C_D CD 表示深度区间个数。
- 3)视觉转换,将2D图像转换到3D空间,然后池化转为BEV特征, F i 3 d = F i 2 d ⊗ D i pred , F i 3 d ∈ R C F × C D × H × W F_i^{3 d}=F_i^{2 d} \otimes D_i^{\text {pred }}, \quad F_i^{3 d} \in \mathbb{R}^{C_F \times C_D \times H \times W} Fi3d=Fi2d⊗Dipred ,Fi3d∈RCF×CD×H×W。
- 4)3D检测头预测物体类别,3D box尺寸位置和其它属性。
2.2 Making Lift-splat work is easy
这里作者首先用一个随机初始化的张量替换 D p r e d D^{pred} Dpred,并在训练和测试阶段冻结它。结果如表1所示,用随机soft值替换 D p r e d D^{pred} Dpred 后,mAP仅下降3.7%(从28.2%降至24.5%)。即使特征深度灾难性地被破坏,深度分布的soft性质在一定程度上仍然有助于投影到正确的深度位置。
进一步将soft随机深度替换为hard随机深度,观察到有6.9%的降幅。这表明只要正确位置的深度有激活,检测头就可以工作。这也解释了为什么在图1中的大多数区域学习到的深度较差,但仍然有一定的检测mAP。
2.3 Making Lift-splat work well is hard
为了更清楚地说明作者的想法,作者比较了两条基线:一条是基于LSS的检测器,称为Base检测器,另一条是使用点云进行深度监督,称为增强检测器。
- Inaccurate depth 在base检测器中,深度模块梯度来自于检测损失,是间接的,很自然地我们要去分析学到的深度质量。作者对比了两种方法:一是评估每个物体的所有像素,另一个是评估每个物体预测最好的像素。结果如表2所示,隐式学习深度是不准确的,结果远远不能令人满意。
- Depth Module Over-fitting 正如前面所述,Base检测器只学习预测了部分区域的深度。大多数像素没有预测合理的深度,引发了对深度模块泛化能力的担忧。具体地说,这种方式的检测器学习深度可能对图像大小、相机参数等超参数非常敏感。为了验证这一点,作者选择图像大小作为变量,并进行了以下实验来研究该模型的泛化能力:首先,使用输入大小为 256×704 的输入分辨率训练基线检测器和增强检测器。然后分别用192×640、256×704和320×864大小的分辨率对它们进行测试。如图2所示,当测试图像大小与训练图像大小不一致时,Base检测器会失去更高的精度。增强检测器的性能损失要小得多。这种现象意味着,没有深度损失的模型有更高的过拟合风险,因此它也可能对相机内部、外部或其它超参数中的噪声敏感。
- Imprecise BEV Semantics 一旦使用学习到的深度将图像特征去投影到锥体特征,则采用体素池化操作将它们聚集到BEV。图3示出了在没有深度监督的情况下,图像特征不能被适当地投影。因此,池化操作仅聚合了部分语义信息。在这种情况下,增强型检测器池化效果更好。在上述分析的基础上,作者认识到了在多视角三维检测器中赋予更好的深度的必要性,并提出了作者的解决方案 BEVDepth。
3. BEVDepth
BEVDepth是一种新型的多视角3D检测器,具有可靠的深度。它利用摄像头感知深度预测模块(DepthNet)上的显式深度监督,以及对投影后的截体特征的新型深度细化模块来实现这一点。
Explicit Depth Supervision 在base检测器中,深度模块的监督来自于检测损失,然后由于单目相机深度估计的难度,只使用检测损失不足以监督深度模块。因此,作者提出使用点云数据
P
P
P 的真值
D
g
t
D^{gt}
Dgt 来监督深度预测
D
p
r
e
d
D^{pred}
Dpred。
R
i
∈
R
3
×
3
R_i \in \mathbb R^{3 \times 3}
Ri∈R3×3 和
t
i
∈
R
3
t_i \in \mathbb R^3
ti∈R3 表示激光雷达到第
i
i
i 个相机的旋转和平移矩阵,
K
i
∈
R
3
×
3
K_i \in \mathbb R^{3 \times 3}
Ki∈R3×3 表示第
i
i
i 个相机的内参,为了获得真值
D
g
t
D^{gt}
Dgt,计算下式:
P
i
i
m
^
(
u
d
,
v
d
,
d
)
=
K
i
(
R
i
P
+
t
i
)
P_i^{\hat{i m}}(u d, v d, d)=K_i\left(R_i P+t_i\right)
Piim^(ud,vd,d)=Ki(RiP+ti)
为了对齐点云和预测深度的维度,还使用了最小池化和one hot 编码,对于分类损失,作者使用了 Binary Cross Entropy。
Camera-aware Depth Prediction 根据传统相机模型,估计深度需要使用到相机内参,因此需要把相机内参建模到深度网络中。具体地,相机内参首先使用MLP来升维特征,然后它们用来作为图像特征权重,然后将相机内参和外参相结合,输入到深入网络中,整个过程可以写为下面的式子。
D
i
pred
=
ψ
(
S
E
(
F
i
2
d
∣
M
L
P
(
ξ
(
R
i
)
⊕
ξ
(
t
i
)
⊕
ξ
(
K
i
)
)
)
)
D_i^{\text {pred }}=\psi\left(S E\left(F_i^{2 d} \mid M L P\left(\xi\left(R_i\right) \oplus \xi\left(t_i\right) \oplus \xi\left(K_i\right)\right)\right)\right)
Dipred =ψ(SE(Fi2d∣MLP(ξ(Ri)⊕ξ(ti)⊕ξ(Ki))))
Depth Refinement Module 为了提高深度估计的质量,作者还设计了一个深度优化模块,首先将 F 3 d F^{3d} F3d 特征从 [ C F , C D , H , W ] [C_F,C_D,H,W] [CF,CD,H,W] 维度转换到 [ C F × H , C D , W ] [C_F \times H,C_D,W] [CF×H,CD,W]。然后再 C D × W C_D \times W CD×W 平台插入几个 3x3 卷积层,它的输出最后再输入到 Voxel/Pillar 池化操作。一方面,当深度预测置信度很低时深度优化模块可以沿着深度方向聚合特征,当深度预测不准确时深度优化模块可以修正其位置,只要感受野足够大。总之,深度细化模块为View Transformer阶段赋予了一种纠正机制,使其能够细化那些放置不当的特征。
4. Experiment
下面是实验部分,除了特别说明,作者使用 Resnet-50作为主干网,图片大小是 256x704。表4中可以看到基线检测器取得了28.2%mAP和32.7%NDS。增加深度损失提高了2.2%mAP。在表5中,不同的深度损失函数对最终性能影响相差无几。
下面是与其它方法的比较。