论文地址:Center-based 3D Object Detection and Tracking
Github 地址:Center-based 3D Object Detection and Tracking
1. 解决了什么问题?
在点云中,3D 目标通常以 3D 框的形式表示。这个表征借鉴于 2D 图像的检测,但也带来了一些问题。在 3D 世界中,目标没有特定的朝向,基于边框的检测器很难枚举出所有的朝向,或用一个与
x
x
x或
y
y
y轴对齐的边框来拟合任意旋转的物体。
点云 3D 检测有如下挑战:
- 点云比较稀疏,3D 空间的大多数区域是没有测量值的;
- 输出结果是 3D 框,在全局坐标系里通常不会很好地对齐;
- 3D 目标的大小、形状和宽高比差异很大,比如在路上,公交车和 limo 很长、行人个子很高。
3D 检测与 2D 之间有着明显的差异,使算法的迁移工作更加困难。症结在于,与
x
x
x或
y
y
y轴对齐的 2D 框并不能很好地表示任意 3D 物体。如下图所示,anchor-based 方法使用自车坐标系下
x
x
x轴或
y
y
y轴对齐的 anchors。当这个车是直行时,该方法可以检出物体;但当车子左转时,anchor-based 方法就无法拟合该旋转物体了。一个办法是将每个物体的朝向角分类为不同的 anchors,但这会增加计算成本,产生大量的 false positives。本文认为,要将 2D 域和 3D 域关联起来,根本的挑战在于如何表征物体。如下图所示,用点表征目标极大地简化了 3D 检测。
2. 提出了什么方法?
提出将 3D 目标用点来表示、检测和跟踪。在不同的主干网络下,从边框表征切换到基于中心点的表征可以提升 3D 检测
3
%
∼
4
%
3\%\sim 4\%
3%∼4%mAP。CenterPoint 是一个双阶段 3D 检测器,首先用一个关键点检测器来找到目标的中心点,回归其属性(如 3D 框大小、3D 框朝向角及速度);然后在第二阶段,使用额外的目标点特征,优化这些预测结果。双阶段优化能进一步提升
2
%
2\%
2%mAP,计算量增长
<
10
%
<10\%
<10%。
CenterPoint 使用标准的 LiDAR 主干网络,即 VoxelNet 或 PointPillars,由输入点云构建出表征。然后将这些表征 flatten 成一个俯视图,使用基于图像的关键点检测器来找到目标中心点。对于每个检到的中心点,从该点的特征回归出其它的属性,如 3D 大小、朝向和速度。在第二阶段,提取 3D 目标框四个外立面的 3D 中心点的特征。它恢复出丢失的局部几何信息(步长、局部感受野造成),能带来明显的表现提升。
基于中心的表征有多个核心优点:
- 边框有朝向角,而中心点没有。这极大地降低了目标检测器的搜索空间,使主干网络能学习任意旋转角度的物体。
- 基于中心的表征能简化下游任务。如果目标是点的话,轨迹就是其时空路径。CenterPoint 预测连续帧之间目标的相对速度(偏移),然后做贪心匹配。
- 基于点的特征提取使我们能设计出更有效、更快的双阶段优化模块。
2.1 Preliminaries
CenterNet
将目标检测看作为关键点预测问题。输入是单张图片,为
K
K
K个类别预测一个
w
×
h
w\times h
w×h形状的热力图
Y
^
∈
[
0
,
1
]
w
×
h
×
K
\hat{Y}\in [0,1]^{w\times h\times K}
Y^∈[0,1]w×h×K。输出热力图上的每个局部极大值(即像素值
≥
\geq
≥它相邻的八个像素值)都对应一个检测物体的中心。为了提取 2D 框,CenterNet 回归一个 size map
S
^
∈
R
w
×
h
×
2
\hat{S}\in \mathbb{R}^{w\times h\times 2}
S^∈Rw×h×2,由所有的类别共享。对于每个检测目标,size map 里面是中心点位置的宽度和高度。CenterNet 架构使用全卷积主干,和一个密集预测的 head。训练时,在每个标注框的中心点
q
i
\mathbf{q}_i
qi(其类别为
c
i
∈
{
1
,
.
.
.
,
K
}
c_i\in \left\{1,...,K\right\}
ci∈{1,...,K}),用高斯核来学习预测热力图,并回归目标框的大小
S
S
S。为了补偿由主干网络步长引起的量化误差,CenterNet 也会回归一个局部偏移图
O
^
\hat{O}
O^。
测试时,检测器产生
K
K
K个热力图、与类别无关的回归图。热力图上的每个局部极大值对应一个目标,置信度大小与热力图的极大值呈正相关。对于每个检测目标,检测器从相应的极大值位置得到回归值。
3D Detection
P
=
{
(
x
,
y
,
z
,
r
)
i
}
\mathcal{P}=\left\{(x,y,z,r)_i\right\}
P={(x,y,z,r)i}是 3D 位置
(
x
,
y
,
z
)
(x,y,z)
(x,y,z)的无序的点云,
r
r
r是反射的测量值。3D 检测算法预测一组 BEV 视角下的 3D 目标框
B
=
{
b
k
}
\mathcal{B}=\left\{b_k\right\}
B={bk}。每个目标框
b
=
(
u
,
v
,
d
,
w
,
l
,
h
,
α
)
b=(u,v,d,w,l,h,\alpha)
b=(u,v,d,w,l,h,α)包括中心点坐标
(
u
,
v
,
d
)
(u,v,d)
(u,v,d)、3D 大小
(
w
,
l
,
h
)
(w,l,h)
(w,l,h)和偏航角
α
\alpha
α。不失一般性地,我们采用了自车中心的坐标系,传感器坐标为
(
0
,
0
,
0
)
(0,0,0)
(0,0,0),偏航角为
0
0
0。
目前的 3D 检测器使用一个 3D 编码器,将点云量化为规则的 bins。然后,基于点的网络提取一个 bin 内所有点的特征。3D 编码器对这些特征做池化,得到初始的特征表示。计算量主要在主干网络内。主干网络的输出是一个俯视图特征
M
∈
R
W
×
L
×
F
\mathbf{M}\in \mathbb{R}^{W\times L\times F}
M∈RW×L×F,宽度为
W
W
W,长度是
L
L
L,通道数为
F
F
F。
W
,
L
W, L
W,L与单个 voxel bin 的分辨率和主干网络的步长直接相关。常用的主干网络包括 VoxelNet、PointPillars。
有了俯视图特征
M
\mathbf{M}
M,现有的检测器用一个检测 head 基于预先定义的 anchor boxes 输出检测结果。因为 3D 框有不同的尺寸和朝向,anchor-based 3D 检测器很难将
x
x
x轴或
y
y
y轴对齐的 2D 框拟合到 3D 目标。训练时,anchor-based 3D 检测器需要用 2D 框的 IoU 做标签分配,对于不同的类别和数据集,阈值选取也会造成不必要的负担。
2.2 CenterPoint
下图展示了 CenterPoint 架构。
M
∈
R
W
×
H
×
F
M\in\mathbb{R}^{W\times H\times F}
M∈RW×H×F是 3D 主干的输出特征图。第一阶段预测一个类别相关的热力图、目标大小、sub-voxel 位置优化、旋转角度、速度。所有的输出都是密集预测结果。
Center heatmap head
Center-head 目的是,在任意待检测目标的中心位置输出一个热力图 peak。该 head 输出一个 K K K通道热力图 Y ^ \hat{Y} Y^,每个通道对应一个类别。训练时,将标注框的 3D 中心点投影到俯视图,回归目标是该中心点的 2D 高斯。本文使用了 Focal Loss。俯视图中目标要比图像里的稀疏。俯视图中的距离是绝对值,而图像视角会因为透视产生畸变。在俯视图下,车辆占据的像素面积很小,而在图像视角中,少量的大目标可能占据大面积的图像区域。此外,在图像视角下,透视投影会压缩目标的深度维度,使它们的中心点彼此更加靠近。在 CenterNet 中,监督信号非常稀疏,大多数位置是背景类。我们增大每个 ground-truth 目标中心的高斯 peak,提升热力图 Y Y Y目标的正监督信号。将高斯半径设为 σ = max ( f ( w l ) , τ ) , τ = 2 \sigma=\max(f(wl), \tau), \tau=2 σ=max(f(wl),τ),τ=2是最小的高斯半径, f f f是半径函数。CenterPoint 保留了简洁的 center-based 目标分配。模型从相邻像素点获得更密集的监督信号。
Regression head
我们保留目标中心特征的多个属性:sub-voxel 位置偏移 o ∈ R 2 o\in \mathbb{R}^2 o∈R2、相较于地面的高度 h g ∈ R h_g\in\mathbb{R} hg∈R、3D 大小 s ∈ R 3 s\in\mathbb{R}^3 s∈R3,以及偏航角 ( sin ( α ) , cos ( α ) ) ∈ R 2 (\sin(\alpha),\cos(\alpha))\in \mathbb{R}^2 (sin(α),cos(α))∈R2。Sub-voxel 位置偏移 o o o能降低体素化和网络步长引发的量化误差。 h g h_g hg能帮助定位目标的 3D 位置,找回高度信息。朝向角预测将偏航角的余弦和正弦值作为连续的回归目标。这样回归 heads 就提供了 3D 框的所有信息。每个输出都有自己的 head。训练时,ground-truth 中心点用 L1 回归损失监督。回归 size 的对数能更好地处理形状间的差异。推理时,我们索引每个目标 peak 位置的 head 输出,提取所有的属性值。
Velocity head and tracking
为了跟踪目标,针对每个检测目标,模型都学习预测一个两维的速度估计
v
∈
R
2
\mathbf{v}\in\mathbb{R}^2
v∈R2,作为额外的回归输出。速度估计比较特殊,它需要当前时间戳和上一时间戳的俯视图输入。它预测当前帧和上一帧的目标位置差异。与其它回归目标不同,用 L1 损失监督当前时间戳 ground-truth 目标的速度预测。
推理时,我们使用贪心匹配策略,用该偏移量来关联当前检测结果和之前的检测结果。将速度估计值
×
(
−
1
)
\times(-1)
×(−1),把当前帧的目标中心投影回上一帧,然后根据最近距离匹配跟踪目标。每个未匹配轨迹至多会被保留
T
=
3
T=3
T=3帧。用最后已知的速度估计值来更新每个未匹配的轨迹。
CenterPoint 协同优化热力图损失和回归损失。它简化并提升了以前的 anchor-based 3D 检测器。但是,目标的所有属性都来自于目标中心的特征,这些信息不能充分保证目标的准确定位。例如,在自动驾驶场景,传感器通常只能看到物体的某一面,并不是它的中心。
2.3 Two-stage CenterPoint
在第一阶段,我们仍然使用 CenterPoint。第二阶段从主干网络的输出提取额外的点特征。从预测 3D 框的每一面的中心点都提取一个点特征。注意,在俯视图视角,目标 3D 框的中心点、3D 框顶面和底面的中心点是同一个。因此,我们只考虑预测目标框的四个外立面的中心点和一个 3D 框的中心点。通过双线性插值,从主干输出的俯视图
M
\textbf{M}
M提取每个点的特征。然后将这些点特征 concat 起来,输入一个 MLP。第二阶段预测一个与类别无关的置信度得分、边框优化偏移量。
预测与类别无关的置信度得分,用候选框和 ground-truth 框的 3D IoU 来指导 target 得分
I
I
I:
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
t个候选框和 ground-truth 框的 IoU。用二值交叉熵损失监督训练:
L
s
c
o
r
e
=
−
I
t
log
(
I
^
t
)
−
(
1
−
I
t
)
log
(
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是预测的置信度得分。推理时,直接用单阶段 CenterPoint 的类别预测,用两项得分的几何平均值来表示最终的置信度,
Q
^
t
=
Y
^
t
∗
I
^
t
\hat{Q}_t=\sqrt{\hat{Y}_t\ast \hat{I}_t}
Q^t=Y^t∗I^t,
Q
^
t
\hat{Q}_t
Q^t是目标
t
t
t的最终预测置信度得分,
Y
^
t
=
max
0
≤
k
≤
K
Y
^
p
,
k
\hat{Y}_t=\max_{0\leq k\leq K}\hat{Y}_{p,k}
Y^t=max0≤k≤KY^p,k是第一阶段的置信度得分,
I
^
t
\hat{I}_t
I^t是第二阶段预测的置信度得分。
对于边框回归,在第一阶段输出候选框的基础上,第二阶段预测一个偏移量,用 L1 损失训练模型。CenterPoint 简化了双阶段 3D 检测算法,速度要比之前使用 PointNet 特征提取和 RoIAlign 操作的两阶段方法快很多。
2.4 Architecture
第一阶段的所有输出共享一个 3 × 3 3\times 3 3×3卷积层、BN 和 ReLU。每项输出进入各自的分支(两个 3 × 3 3\times 3 3×3卷积、BN 和 ReLU)。第二阶段使用一个共享的 MLP、BN、ReLU 和 DropOut (drop rate 为 0.3 0.3 0.3),后面是两个分支( 3 3 3个全连接层),一个预测置信度得分,一个预测边框回归。