论文阅读笔记2:Objects as Points
论文地址:https://arxiv.org/pdf/1904.07850.pdf
论文代码:https://github.com/xingyizhou/CenterNet
Abstract
目标检测识别往往在图像上将目标以轴对称的框形式框出。大多成功的目标检测器都先穷举出潜在目标位置,然后对该位置进行分类,这种做法浪费时间,低效,还需要额外的后处理。本文中,我们采用不同的方法,构建模型时将目标作为一个点——即目标BBox的中心点。我们的检测器采用关键点估计来找到中心点,并回归到其他目标属性,例如尺寸,3D位置,方向,甚至姿态。我们基于中心点的方法,称为:CenterNet,相比较于基于BBox的检测器,我们的模型是端到端可微的,更简单,更快,更精确。我们的模型实现了速度和精确的最好权衡,以下是其性能:
MS COCO dataset, with 28:1% AP at 142 FPS, 37:4% AP at 52 FPS, and 45:1% AP with multi-scale testing at 1.4 FPS.
Introduction
当前的目标检测用一个紧紧包含目标的轴对称的边界框来表示每一个目标。对于每一个目标,使用分类器来确定每个框中是否为特定的目标还是背景。
One-stage detectors 在图像上滑动复杂排列的可能bbox(即锚点),然后直接对框进行分类,而不会指定框中内容。
Two-stage detectors 对每个潜在框重新计算图像特征,然后将那些特征进行分类。
Post-processing 也即是non-maxima suppression(非极大值抑制),通过计算IoU来移除对同一个instance的重复检测。这种后处理很难区分和训练,因此现有大多检测器都不是端到端可训练的。
本文提出了一种简便和高效的方法。使用目标边界框中心的一个点来代表目标。然后在中心点位置回归出目标的一些属性,例如:size, dimension, 3D extent, orientation, pose。 而目标检测问题变成了一个标准的关键点估计问题。我们仅仅将图像传入全卷积网络,得到一个heatmap,heatmap峰值点即中心点,每个特征图的峰值点位置预测了目标的宽高信息。不需要NMS做后处理。
Related work
- Object detection by region classification RCNN Fast-RCNN
- Object detection with implicit anchors Faster-RCNN通过检测网络生成region proposal。在低分辨率图像网格周围采样固定形状的边界框(anchors),对每个anchor进行是否为前景的分类。然后对每一个前景样本进行多类别分类,得到最终的结果。
我们的方法类似于anchor-based单阶段的方法,一个中心点可以看做一个形状未知的anchor。然而,存在一些重要的不同点:- 我们分配的锚点仅仅是放在位置上,没有尺寸框。没有手动设置的阈值做前后景分类。(像Faster RCNN会将与GT IOU >0.7的作为前景,<0.3的作为背景,其他不管)
- 每个目标仅仅有一个正的锚点,因此不会用到NMS,我们提取关键点特征图上局部峰值点(local peaks)
- CenterNet 相比较传统目标检测而言(缩放16倍尺度),使用更大分辨率的输出特征图(缩放了4倍),因此无需用到多重特征图锚点
- Object detection by keypoint estimation CornerNet检测边界框的两个角点作为关键点,ExtremeNet检测所有物体的上下左右以及中心店来检测目标。然而它们都需要在关键点检测后加上一个grouping阶段,这会显著拖慢它们的算法。而CenterNet只是对每个目标简单的提取一个中心店,因此不需要grouping以及post-processing。
Preliminary
用$I\in R^{W×H×3}$表示长为H宽为W的输入图像。我们的目标是产生一个关键点heat map $Y\in[0,1]^{\frac{W}{R}×\frac{H}{R}×C}$,R为输出步长,C为关键点的类别数量。$\hat{Y}_{xyz}=1$表示检测到的关键点,$\hat{Y}_{xyz}=0$表示背景。我们采用了几个不同的全卷积编码-解码网络来预测图像 I 得到的$\hat{Y}$:
- stacked hourglass network
- upconvolutional residual networks (ResNet)
- deep layer aggregation (DLA)
对于类别为c的真实框的关键点$p\in R^2$,我们计算它在低分辨率上对应的关键点为$\overline{p}=\lfloor\frac{p}{R}\rfloor$。我们将GT关键点通过高斯核$Y_{xyz}=exp{(-\frac{(x-\overline{p}_{x})^2+(y-\overline{p}_{y})^2}{2\sigma_{p}^2})}$分散到heat map $Y\in[0,1]^{\frac{W}{R}×\frac{H}{R}×C}$上,其中$\sigma_{p}$是目标尺度自适应的标准方差。如果对于同个类 c (同个关键点或是目标类别)有两个高斯函数发生重叠,我们选择元素级最大的。训练目标函数如下,像素级逻辑回归的focal loss:
由于图像下采样时,GT的关键点会因数据是离散的而产生偏差,我们对每个中心点附加预测了个局部偏移$\hat{O}\in R^{\frac{W}{R}×\frac{H}{R}×2}$,所有类别 c 共享同个偏移预测,这个偏移同个 L1 loss来训练:
只会在关键点$\overline{p}$位置 做监督操作,其他位置无视。
关于这个损失函数补充一点解释。这个损失函数与focal loss类似,对于easy example的中心店,适当减少其训练比重也就是loss值。
- 当$Y_{xyc}=1$时,$(1-\hat{Y}_{xyc})^\alpha$就充当了矫正的作用。
- 当$\hat{Y}_{xyc}$接近于1时,说明是容易检测出来的点,这个值就会相应比较低。
- 当$\hat{Y}_{xyc}$接近于0时,说明这个中心点还没有学习到,那么就要增大其训练比重,因此这个值就会比较大。
- 当otherwise时,$(1-Y_{xyc})^\beta$和$(\hat{Y}_{xyc})^\alpha$协同进行矫正。
- 当$\hat{Y}_{xyc}$越接近1时,说明样本越容易被误检,需要增加对其的惩罚,通过$(\hat{Y}_{xyc})^\alpha$来实现。
- 由于正负样本的数量很不平衡,我们需要抑制负样本的训练比重。由于检测到的负样本在正样本即中心点周围的可能性比较高,所以它们的$(1-Y_{xyc})$接近于1。因此可以通过$(1-Y_{xyc})^\beta$来实现。
Objects as Points
用$(x_{1}^{(k)},y_{1}^{(k)},x_{2}^{(k)},y_{2}^{(k)})$来表示类别为$c_{k}$的object$k$的边界框。那么它的中心点即为$(\frac{x_{1}^{(k)}+x_{2}^{(k)}}{2},\frac{y_{1}^{(k)}+y_{2}^{(k)}}{2})$。我们用关键点估计$\hat{Y}$来得到所有的中心点。另外,我们为每个目标 k 回归出目标的尺寸$s_{k}=(x_{2}^{(k)}-x_{1}^{(k)},y_{2}^{(k)}-y_{1}^{(k)})$。为了减少计算负担,我们为每个目标种类使用单一的尺寸预测$\hat{S}\in R^{\frac{W}{R}×\frac{H}{R}×2}$,我们在中心点位置添加了 L1 loss:
我们不将scale进行归一化,直接使用原始像素坐标。为了调节该loss的影响,将其乘了个系数,整个训练的目标loss函数为:
整个网络预测会在每个位置输出 C+4个值(即关键点类别C, 偏移量的x,y,尺寸的w,h),所有输出共享一个全卷积的backbone。
From points to bounding boxes
在推理的时候,我们分别提取热力图上每个类别的峰值点。如何得到这些峰值点呢?做法是将热力图上的所有响应点与其连接的8个临近点进行比较,如果该点响应值大于或等于其八个临近点值则保留,最后我们保留所有满足之前要求的前100个峰值点。
- 关键点检测结果 $\hat{P}=\lbrace(\hat{x}_{i},\hat{y}_{i})\rbrace_{i=1}^{n}$
- 偏移检测结果 $\hat{O}_{\hat{x}_{i},\hat{y}_{i}}=(\delta\hat{x}_{i},\delta\hat{y}_{i})$
- 尺度检测结果 $\hat{S}_{\hat{x}_{i},\hat{y}_{i}}=(\hat{w}_{i},\hat{h}_{i})$
根据以上结果得到在$(\hat{x}_{i},\hat{y}_{i})$的边界框:
所有的输出都直接从关键点估计得到,无需基于IOU的NMS或者其他后处理。