《Objects as Points》
代码:https://github.com/xingyizhou/CenterNet

摘要

大多数优秀的对象检测器列举一个几乎详尽的潜在目标位置列表,并对每个位置进行分类。但是作者认为现有的主流检测框架都是浪费的,不够高效的。所以作者提出了一个新的方法来解决检测任务:把每个目标当做一个单一的点来建模(这个点就是检测框的中心)。这里作者应用了关键点估计的方法来寻找中心点,并同时回归其他目标的属性,例如大小,3D 坐标,方位,甚至关键点的坐标。那就是CenterNet。
综合速度和准确度,该方法在COCO数据集上,其检测的效果: 28.1% AP at 142 FPS, 37.4% AP at 52 FPS, and 45.1% AP with multi-scale testing at 1.4 FPS。

引言

当前目标检测器通过一个轴向对齐的包围框来表示每个目标,该包围框紧紧地包围了对象。然后,他们将目标检测简化为大量潜在目标边界框的图像分类。对于每一个包围框,分类器判断图片内容是否是特定目标或者是背景。然后分为两个流派:

  • 一阶段检测器,在图像上滑动可能的边界框(称为锚)的复杂排列,并直接对它们进行分类,而不指定框的内容
  • 二阶段检查器,重新计算每个潜在框的图像特征,然后对这些特征进行分类

不管是一阶段还是二阶段的检测器都是需要后处理的,非极大值抑制(NMS),根据计算包围框的IOU来去除掉同一目标重复的检测结果。但是这个后处理存在着不足:不能是可微分的并且很难训练。所以现在大多数的检测器都不是可以端对端训练的。
图片说明
如上图所示,作者把所有的目标表示为一个单一的点(这个点表示他包围框的中心)。该目标的其他属性包括目标大小,维度,3D信息,方位,姿态都是继续中心和图像特征直接进行回归得到。
所以,目标检测就变为了一个标准的关键点估计问题。可以简单的应用一个全卷积网络来产生关键点的热力图。热力图的极大值就作为目标的中心。极大值的图像特征预测目标的包围框的宽度和高度。所以这个模型的训练采用标准的监督学习方式,预测的时候仅仅是一个单一的网络前传过程,是不需要后处理NMS的。
这个方法也是非常灵活的,除了目标检测任务中回归包围框的宽和高,在3D目标检测任务中,可以回归目标的绝对深度、3D包围框的大小、以及目标的方位。在人体关键点检测任务中,可以把2D的关节点坐标当作一个偏移,这个偏移是基于目标的中心,所以可以直接回归这个偏移值

相关工作

基于区域分类的目标检测

RCNN:从大量区域候选中枚举对象位置,裁剪它们,并使用深度网络对每个对象进行分类。
Fast-RCNN:裁剪的图像特征,从而减少计算量

基于隐性锚框的目标检测

Faster RCNN:在检测网络中加入能够生成区域候选框的RPN
图片说明

基于关键点检测的目标检测

CornerNet:回归包围框的左上角和右下角
ExtremeNet:回归包围框的四个所有坐标,和中心

3D目标检测

Deep3Dbox
3D RCNN

准备工作

定义:
输入图片:
目标关键点热力图: R表示输出的步长,,是关键点类型个数,表示目标检测类别。
假设一个预测结果对应于检测到的关键点,是背景。
作者一共用了三个编码解码的网络来预测热力图:hourglass、ResNet、DLA。
训练标签热图的产生
首先根据R计算得到关键点坐标对应网络输出热力图大小的坐标值,其实就是一个缩放的过程:。然后根据这个坐标产生最终的目标热力图,采用高斯核:
图片说明
如果两个目标的热图重叠,那么就采用element-wise maximum的方式,就是选两个热图的最大值。
训练目标函数 penalty-reduced pixel-wise logistic regression with focal loss:
图片说明
这里,是focal loss的两个高参,N是图片I的关键点个数。
根据N来归一化这个损失函数的目标是归一化所有正的focal loss 实例为1。
为了解决由缩放步长带来的误差,作者额外回归了一个偏移值,所有的类别都共享这个偏移值。训练这个偏移值采用的是L1 loss:
图片说明

把目标当作点

这里就是说明如何回归目标的包围框。
目标k的包围框为:
它的中心为:
我们要回归的目标是:
为了减少计算量,对于所有目标类别都使用一个单独大小的预测结果:
然后采用L1 loss进行监督训练:
图片说明
这里作者并没有归一化尺度的大小,直接采用像素尺度。而是采用一个常量来约束这个损失的影响程度。
所以整个训练目标函数如下:
图片说明
这里
图片说明
上面这张图说明了作者方法在不同任务中的输出结果:

  • top:目标检测,人的中心热力图,热力图中心偏移值,目标大小
  • middle:3D检测,3D大小,深度,方向
  • bottom:关键点检测,所有关节点坐标位置对中心的偏移值,关节点的热力图,关节点的偏移值

每一个任务的实现都是根据一个的输出得到。
如何根据点获得包围框?
测试的时候,首先根据每个类别的热力图求得极大值点,选取的方式也很简单,就是那些某一个点大于自己周围八个点值的点就认为是极大值点。根据极值点的值,截取前100个。这个极值点的值也作为检测包围框的置信度,获得检测框的坐标方式为:
图片说明
这里图片说明 表示中心偏移值,图片说明 是预测目标的大小。

人体关键点检测

回归的目标前面有提到过,总的来说,把每个关节点的回归当作回归这个人的关节点到人中心的偏移量,这个偏移量从我的理解来讲可以说是一种约束,即是在回归坐标位置,又是在进行对关节进行划分,为了能够准确的回归,还是需要单独的对每一个关节点的热图进行回归。
图片说明 就是直接回归的关节点偏移量。同时通过一个mask将不可见的关节点的loss忽略掉。

果然结果也是如此,图片说明是我们通过基于中心偏移学到的关节坐标值,图片说明 是通过热图回归并选择大于0.1的关节坐标值,我们选择每个目标的关节坐标值也就是根据图片说明 得到的。

实现细节

  • train on an input resolution of 512 × 512
  • This yields an output resolution of 128×128 for all the models
  • We use random flip, random scaling (between 0.6 to 1.3), cropping, and color jittering as data augmentation

总的来说训练时间很长,RCNN的方法大概只需要14个epoch就可以了,但是基于关键点的方法需要训练很多个epoch。
在多尺度测试的时候,同样还是需要NMS去除多余的包围框。

实验结果

目标检测的结果:
图片说明
多尺度测试,🐮啊~
关键点的结果:
图片说明