论文地址: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个全连接层),一个预测置信度得分,一个预测边框回归。