文章目录
地址:https://arxiv.org/abs/2006.11275
为什么要看这个论文?
CenterPoint听名字有种似曾相识的感觉,没错! 这篇文章的灵感正是来自于图像中的目标检测算法CenterNet: Objects as Points[1].(二者的作者都来自于UT Austin),本文提出将3D目标表示为点(points),性能优于3DSSD、PointPainting等,端到端3D检测和跟踪速度达30 FPS!基于中心的模型通过旋转不变点准确地检测物体。
最近在分析BEV 的head的设计,在BEVDet和BEVFormer里,使用了各种3D detection head(BEVDet用了centerpoint,BEVFormer用了deformable detr)
也就是,视觉的基于BEV视角的目标检测中,与激光雷达的目标检测在这里有了一个交汇。之前了解的激光雷达的目标检测主要是anchor-free的,主要包含3种思路:
- center-base 也就是今天的这个论文主要讲的
- Voxel-Based(pillar-base) 例如PointPillars,complex-yolo,VoxelNet
- point-base :PointNet/PointNet++/Point-RCNN
说明一下:centerpoint 是对激光点云的目标检测,我一度把它跟 centertrack 弄混了。。。20221117
1. Preliminaries
2D CenterNet [64]:它获取输入图像,并预测K个类别中的每个类别的w × h热图y ∈ [0,1] w × h × K。 输出热图中的每个局部最大值 (即,其值大于其8个邻居的像素) 对应于检测到的对象的中心。 要检索2D框,CenterNet将回归到所有类别之间共享的大小映射 “s ∈ rw × h × 2”。 CenterNet体系结构使用标准的全卷积图像主干,并在顶部添加了密集的预测头。
3D Detection:令P = {(x,y,z,r)i} 是3D位置 (x,y,z) 和反射率r测量的有序点云。 3D对象检测旨在从该点云预测鸟瞰图中的一组3D对象边界框B = {bk}。 每个边界框b = (u,v,d,w,l,h,α) 由相对于对象地平面的中心位置 (u,v,d) 和3D尺寸 (w,l,h) 和由偏航 α 表示的旋转。 在不失一般性的情况下,我们使用传感器为 (0,0,0) 且偏航 = 0的自我中心坐标系。 现代3D物体检测器 [20、28、56、66] 使用3D编码器,将点云量化为regular bins。然后,基于点的网络 [40] 为bin内的所有点提取特征。然后,3D编码器将这些特征汇集到其主要特征表示中。大多数计算发生在骨干网中,骨干网仅对这些量化和池化特征表示进行操作。骨干网的输出是地图视图特征图M ∈ R^{w × L × F},其宽度为W,长度为L,在地图视图参考系中具有F个通道。宽度和高度都与单个体素仓的分辨率和骨干网络的步幅直接相关。 Common backbones include VoxelNet [56, 66] and PointPillars [28].
2. First Stage
其First Stage framework如下图所示,图中编码器阶段的虚线框代表可选项,蓝色框代表深度网络,红色框代表固定操作。
如图 3. 所示,CenterPoint 将点云在俯视图下栅格化,然后采用 CenterTrack 一样的网络结构,只是输出为目标的 3D location,size,orientation,velocity。点云俯视图下的栅格化,如果对栅格不做点云的精细化估计,那么会影响到目标位置及速度估计的精度,所以理论上 PointPillars 这种栅格点云特征学习方式能更有效的提取点云的信息,保留特征的连续化信息(但是论文的实验表明 VoxelNet 比 PointPillars 效果更好)。否则,虽然目标位置等信息的监督项是连续量,但是栅格化的特征是离散量,这会降低预测精度。具体的,网络输出为:
(
K
)
(K)
(K) 个类别的
(
K
)
(K)
(K)-channel heatmap表示目标中心点,目标的尺寸
(
s
=
(
w
,
l
,
h
)
)
(\mathbf{s}=(w,l,h))
(s=(w,l,h)) heatmap,目标的中心点 offset
(
o
=
(
o
x
,
o
y
,
o
z
)
)
(\mathbf{o}=(o _ x,o _ y,o _ z))
(o=(ox,oy,oz)) heatmap,朝向角
(
e
=
(
s
i
n
(
α
)
,
c
o
s
(
α
)
)
)
(\mathbf{e} = (\mathrm{sin}(\alpha),\mathrm{cos}(\alpha)))
(e=(sin(α),cos(α))) heatmap,目标速度
(
v
=
(
v
x
,
v
y
)
)
(\mathbf{v}=(v _ x,v _ y))
(v=(vx,vy)) heatmap。与 CenterTrack 非常相似,只不过这里的速度就是真实的物理速度。 实际上,CenterPoint的主干网络(3D encoder)采用的是PointPillars和VoxelNet的encoder。二者的区别可以通过作者的实验结果看出:由于PointPillars没有耗时的3DCNN,因而速度更快;VoxelNet因为有更多的参数,所以mAP会更高。
具体分析几个Head:
1 Center heatmap head.该头生成一个K通道热图,每个K个类都有一个通道。在训练过程中,它的目标是通过将带注释的边界框的3D中心投影到地图视图中而产生的2D高斯。我们使用焦点损失 [29,64]。自上而下的地图视图中的对象比图像中的对象稀疏。 遵循CenterNet [64] 的标准监督会产生非常稀疏的监督信号,其中大多数位置都被视为背景。为了抵消这一点,我们通过扩大在每个地面真值对象中心呈现的高斯峰来增加对目标热图Y的积极监督。具体来说,我们将高斯半径设置为 σ = max(f(wl),τ),其中 τ = 2是最小允许的高斯半径,f是在CornerNet中定义的半径函数 [29]。这样,CenterPoint保持了基于中心的目标分配的简单性; 该模型从附近的像素获得了更密集的监督。 ground truth centers are supervised using an L1 regression loss
2 Regression heads. 我们回归到对数大小,以更好地处理各种形状的盒子。
我们在对象的中心特征处存储了几个对象属性: 子体素位置细化o ∈ R2,地上高度hg ∈ R,3D尺寸s ∈ R3和偏航旋转角 (sin(α),cos(α)) ∈ R2
子体素位置细化o降低了量化误差
地面高度hg有助于将对象定位为3D,并添加mapview投影删除的缺失高程信息。
方位预测使用偏航角的正弦和余弦作为连续回归目标。
结合盒子大小,这些回归头提供了3D边界盒子的完整状态信息。
3 Velocity head and tracking.为了通过时间跟踪对象,我们学习预测每个检测到的对象的二维速度估计v ∈ R2作为额外的回归输出。速度估计是特殊的,因为它需要两个输入的时间步长。它预测当前帧和过去帧之间的对象位置差异。与其他回归目标一样,在当前时间步长,还使用地面真实对象位置的L1损耗来监督速度估计。 在推理时,我们使用此偏移量以贪婪的方式将当前的检测与过去的检测相关联.具体来说,我们通过应用负速度估计值,然后通过最近距离匹配将它们与被跟踪的对象匹配,将当前帧中的对象中心投影回前一帧。Following SORT [4], we keep unmatched tracks up to T = 3 frames before deleting them.
第一阶段检测头设计
-
中心热力图头(Center Heatmap Head)
- 输入:骨干网络(如VoxelNet或PointPillars)输出的BEV(鸟瞰图)特征图。
- 输出: K K K通道热力图( K K K为类别数),每个通道对应一类目标的中心点概率分布。
- 关键改进:
- 为解决点云稀疏性问题,动态调整高斯半径 σ = max ( f ( w l ) , τ ) \sigma = \max(f(w_l), \tau) σ=max(f(wl),τ),其中 τ = 2 \tau=2 τ=2为最小半径, f f f为CornerNet的半径函数。
- 使用Focal Loss监督热力图训练,增强对稀疏目标的检测能力。
-
回归头(Regression Heads)
每个中心点特征需回归以下属性:- 子体素位置细化( o ∈ R 2 o \in \mathbb{R}^2 o∈R2):补偿体素化和骨干网络步长导致的量化误差。
- 离地高度( h g ∈ R h_g \in \mathbb{R} hg∈R):补充BEV丢失的高度信息。
- 3D尺寸( s ∈ R 3 s \in \mathbb{R}^3 s∈R3):回归对数形式的长宽高,适应不同尺寸目标。
- 朝向角:用正弦和余弦值( sin ( α ) , cos ( α ) \sin(\alpha), \cos(\alpha) sin(α),cos(α))连续回归偏航角。
- 速度估计( v ∈ R 2 v \in \mathbb{R}^2 v∈R2):通过当前帧与前一帧特征图预测位置偏移,用于跟踪。
- 损失函数:均采用L1损失监督。
3D尺寸
-
回归目标
- 尺寸表示: s = ( log w , log l , log h ) ∈ R 3 s = (\log w, \log l, \log h) \in \mathbb{R}^3 s=(logw,logl,logh)∈R3,采用对数形式以覆盖大范围的目标尺寸。
- 监督信号:使用L1损失直接监督,训练时仅对真实目标中心位置的特征计算损失。
-
其他协同属性
尺寸回归与以下属性联合优化,共同构成完整3D框:- 亚体素位置修正 o ∈ R 2 o \in \mathbb{R}^2 o∈R2(补偿量化误差)
- 离地高度 h g ∈ R h_g \in \mathbb{R} hg∈R(补充BEV丢失的高度信息)。
3 Second stage
We use CenterPoint unchanged as a first stage. 但是,当前从对象的中心特征推断出对象的所有属性,该中心特征可能不包含用于准确对象定位的足够信息。例如,在自动驾驶中,传感器通常只看到物体的侧面,而看不到其中心。接下来,我们通过使用具有轻量级点特征提取器的第二优化级来改进中心点。
我们从预测边界框的每个面的3D中心提取一个点特征。请注意,边界框中心,顶面和底面中心都投影到地图视图中的同一点。对于每个点,我们使用双线性插值从骨干图视图输出M中提取特征。接下来,我们连接提取的点特征,并通过MLP传递它们。第二阶段在一阶段中心点的预测结果之上预测与类无关的置信度分数和框细化
For class-agnostic confidence score prediction, we follow [26, 30, 44, 46] and use a score target
I
I
I guided by the box’s 3D IoU with the corresponding ground truth bounding box(IoUt是第t个提案框和地面真相):
I
t
^
\hat{I_t}
It^ is the predicted confidence score,训练以BCE损失进行监督:
During the inference,
- we directly use the class prediction from one-stage CenterPoint
- 计算最终置信度分数为两个分数的几何平均值
,Y和 I 是对象t的第一阶段和第二阶段置信度.
第二阶段细化头(Refinement Head)
-
点特征提取
- 从第一阶段预测的3D框的中心及四个侧面中心提取点特征(避免顶/底面与中心重合)。
- 通过双线性插值从BEV特征图中获取特征,拼接后输入MLP。
-
任务分支
- 置信度预测:输出类别无关的IoU分数 I t I_t It,目标为 I t ∗ = IoU ( B t , B g t ) I_t^* = \text{IoU}(B_t, B_{gt}) It∗=IoU(Bt,Bgt),使用二值交叉熵损失。
- 框细化:对第一阶段框的尺寸、位置、朝向进行微调,同样用L1损失监督。
- 推理时,最终置信度为两阶段分数的几何平均: Q t = Y t ⋅ I t Q_t = \sqrt{Y_t \cdot I_t} Qt=Yt⋅It( Y t Y_t Yt为热力图得分)。
4 Flow Chart:
图2:我们的CenterPoint框架概述。
- 1、我们依赖于一个标准的3D Backbone,该主干从Lidar点云中提取地图视图特征表示。
- 2、然后,2D CNN架构检测头找到对象中心,并使用中心特征回归到完整的3D边界框。该框预测用于提取估计的3D边界框的每个面的3D中心处的点特征,
- 3、每个面的3D中心处的点特征将传递到MLP中以预测IoU引导的置信度得分和框回归细化。
本文的主要贡献是提出了一个两阶段的Center-based的目标检测追踪模型,在第一阶段(如图2中的a,b,c),使用CenterPoint检测三维目标的检测框中心点,并回归其检测框大小,方向和速度。在第二阶段(如图2中的d)设计了一个refinement模块,对于第一阶段中的检测框,使用检测框中心的点特征回归检测框的score并进行refinement。
设计优势
- 旋转不变性:中心点表示避免了方向枚举,简化搜索空间。
- 高效跟踪:速度回归直接关联帧间目标,无需复杂运动模型。
- 轻量细化:第二阶段仅需少量点特征,计算开销低(<10%)。
5 Evaluate
对于3D跟踪,nuScenes使用AMOTA [53],它惩罚ID开关,假阳性和假阴性,并在各种召回阈值之间平均。对于nuScenes的实验,我们将X和y轴的检测范围设置为 [-51.5 m,51.5 m],将z轴的检测范围设置为 [-5m,3m]。中心点体素使用 (0.1m,0.1m,0.2m) 体素大小,中心点柱使用 (0.2m,0.2m) 网格。
6 Cite
代码:https://github.com/tianweiy/CenterPoint
论文:https://arxiv.org/pdf/2006.11275.pdf