Center-based 3D Object Detection and Tracking
CenterPoint CVPR2021
论文链接: https://arxiv.org/abs/2006.11275
一、 Problem Statement
三维世界中的对象不遵循任何特定方向,基于box-based的检测器难以枚举所有方向或将轴对齐的边界bounding box拟合到旋转的对象。 而且3D目标检测有以下三个挑战:
- 点云稀疏
- 输出的3D bounding box通常不与任何坐标轴对齐
- 3D目标具有广泛的大小,形状和比例
所以把2D推演到3D目标检测,症结所在就是轴对齐的二维bounding box不能很好地代表自由形式的三维对象。
二、 Direction
作者发现,2D和3D领域的连接主要问题出现在目标的表示形式,因此提出了two-stage keypoint detector,CenterPoint,也就是用一个点表示3D目标。
具体来说:
使用Lidar-based backbone(VoxelNet + PointPillar) + standard image-based keypoint detector + a light-weighted second stage to refine locations
三、 Methods
先来看一下CenterPoint整体的框架:
可以看到框架主要分为三个部分:
- 3D backbone
- Detection head
- Refinement head
1. 3D backbone
目前3D目标backbone一般采用voxel或者pointpillars。首先会把点云进行量化到regular bins。然你后使用point-based network提取bins中所有点的特征。紧接着使用3D encoder池化这些特征。Backbone网络的输出是一个map-view feature-map,维度为 M ∈ R W × L × F M \in \R^{W \times L \times F} M∈RW×L×F, W W W是宽, L L L是长, F F F是通道数。
2. Detection head
当有了feature-map之后,就会紧接着到detection head。一般使用anchor-based detection head。但对于3D bounding boxes来说,它们有不同的大小和方向,因此拟合一个axis-aligned 2D box 到3D目标是困难的。 其次,在训练的时候,anchor-based 3D detector依赖2D Box IoU来进行目标匹配,为不同的类或不同的数据集选择正/负阈值会产生不必要的负担。因此作者提出用center point来表示3D目标。
对于CenterPoint Head,作者提出了两个分支:
- Center heatmap head
- Regression heads
对于第一个head,目的是在任何检测到的目标的中心位置生成一个heatmap peak。也就是说,要生成一个 K K K通道的heatmap Y ^ \hat{Y} Y^,对应于 K K K个类别。
在训练过程中,heatmap peak将通过将带标注的bounding box的三维中心投影到地图视图(map-view)中而生成的二维高斯曲线作为目标。然后使用Focal loss进行训练。因为目标在map-view视角是比在image-view中稀疏的。
如果直接使用标准的CenterNet进行训练,会导致非常稀疏的监督信号,大部分位置会被认为是背景。为了解决这个问题,作者通过扩大每个ground-truth 目标中心的Gaussian peak, 增大了target heatmap
Y
Y
Y 的positive supervision。具体来说,就是把Gaussian radius设置为:
σ
=
m
a
x
(
f
(
w
l
)
,
τ
)
\sigma = max(f(wl), \tau)
σ=max(f(wl),τ)
其中
τ
=
2
\tau=2
τ=2是最小的Gaussian radius,
f
f
f是radius function。
3. Regression head
除了中心点,还需要回归以下性质:
- a sub-voxel location refinement, o ∈ R 2 o \in \R^2 o∈R2
- height-above-ground, h g ∈ R h_g \in \R hg∈R
- 3D size, s ∈ R 3 s \in \R^3 s∈R3
- yaw rotation angle, ( s i n ( α ) , c o s ( α ) ) ∈ R 2 (sin(\alpha), cos(\alpha)) \in \R^2 (sin(α),cos(α))∈R2
sub-voxel location refinement是用来减少来自于backbone中voxelization 和 striding的量化误差。 height-above-ground有助于定位目标和增加遗漏的评价信息。方向性的预测使用了sine和cosine,作为一个连续的回归目标。结合以上信息,就可以得到一个3D bounding box。
在训练的时候,只有ground-truth中心会被监督,且使用的是L1 regression loss。
3. velocity head and tracking
作者也实验了速度预测和追踪。velocity estimation,
v
∈
R
2
v \in \R^2
v∈R2。速度预测需要两帧数据,分别是当前的和过去的。然后预测这两帧的位置差别。Velocity estimation使用L1 loss进行监督。
在推理的时候,使用这个误差,把当前的检测和过去的进行关联。然后把当前帧的目标中心投影到前一帧,计算它们负的速度估计,然后进行最近距离的匹配。
CenterPoint把所有的heatmap结合起来,而且regression loss是在一个目标函数里面来同时进行优化,简化了3D目标检测。但是目前所有的性质,都是基于一个点,也就是目标的中心点来进行回归的。可能存在一个问题就是无法获取足够的信息来进行精确的定位。比如说,在自动驾驶中,传感器通常只能看到目标的一部分,或者一边,并不是它的中心点。因此基于这个问题,作者提出了第二个阶段: refinement stage with a light-weight point-feature extractor。
4. Refinement Stage
这一个部分从backbone的输出提取额外的point-feature。我们从预测的3D目标的每个面的每个中心提取一个point-feature。因为这个Bounding box的中心,上面和底部的中心在map-view中都是一个中心,因此作者就考虑了四个点和一个中心点。对于每个点,通过对backbone map-view输出的 M M M进行双线性插值来获取特征。 然后拼接这些extracted point-features 然后输入到MLP中。最后输出的是class-agnostic confidence score和box refinement。
对于class-agnostic confidence score,ground-truth bounding box为:
I
=
min
(
1
,
max
(
0.2
×
I
o
U
t
−
0.5
)
)
I = \min(1, \max(0.2 \times IoU_t - 0.5))
I=min(1,max(0.2×IoUt−0.5))
其中
I
o
U
t
IoU_t
IoUt是
t
t
h
t_{th}
tth predicted box和ground-truth box的IoU。然后最后使用binary cross entropy loss进行监督。
L
s
c
o
r
e
=
−
I
t
l
o
g
(
I
^
t
)
−
(
1
−
I
t
)
l
o
g
(
1
−
I
^
t
)
L_{score} = -I_t log(\hat{I}_t) - (1-I_t)log(1-\hat{I}_t)
Lscore=−Itlog(I^t)−(1−It)log(1−I^t)
其中 I ^ t \hat{I}_t I^t是预测的confidence score。
在推理的时候,直接使用第一阶段的class prediction。然后通过下面式子计算final confidence score:
Q
^
t
=
Y
^
t
∗
I
^
t
\hat{Q}_t = \sqrt{\hat{Y}_t * \hat{I}_t}
Q^t=Y^t∗I^t
对于Box refinement regression, 使用L1 loss进行监督。
四、 Conclusion
CenterPoint有三个优点:
- 与边界框不同,点没有固有方向。这大大减少了对象检测器的搜索空间,同时允许backbone学习对象的旋转不变性及其相对旋转的旋转等效性。
- Center-based表示形式,简化了下游任务,比如tracking。
- 基于点的特征提取使我们能够设计一个有效的两阶段细化模块,该模块比以前的方法快得多。
表现SOTA,而且比较简单易用。
Reference
- https://blog.csdn.net/Yong_Qi2015/article/details/108396159