基于关键点的目标检测方法,如:CornerNet,常常出现很多边界框不正确,原因在于缺少对裁剪框中内容做进一步校验。本文找到一种基于最小代价情况下探究各个裁剪框内视觉模式的方法。基于此前one-stage的CornerNet做的改进(baseline:CornerNet),我们方法叫做CenterNet,将每个检测目标看做是三点(triplet),而不是仅有一对关键点构成,此举改善了精度和召回率。
相应地,本文还设计了两个自定义模块,分别叫做cascade corner pooling(级联角点池化) 和 center pooling(中心点池化),各自的作用是丰富了利用左上和右下角收集的信息,提供更多中心区域的识别信息;
在MS-COCO数据集上,本方法获得AP 47.0%,比现有one-stage方法高4.9%至少,且速度更快,此外与two-stage方法性能也有可比性。
抑制CornerNet目标检测方法中,检测目标出现的误检问题。
解决了CornerNet缺乏对区域的额外关注的问题,即通过在每个建议区域内以最小的成本探索视觉模式
目前的检测算法主要思路还是设置大量Anchor+分配正负样本+训练的一个思路,Anchor的本质是目标的候选框,因为目标的形状和位置的多种可能性,Anchor的数量往往非常庞大,否则会出现遗漏的情况,这种情况对于one-stage的检测算法更加突出。因此会带来两个问题:
为了克服如上问题,提出了基于关键点的目标检测方法——CornerNet;
CornerNet 优点:以一对角点方式构建目标,绕过锚点问题,实现one-srage目标检测最好的精度度;
CornerNet 缺点:由于目标的全局信息获取能力较弱,使得其性能受限,也就是说,每个目标由一对角点来表述,导致算法对目标框比较敏感,同时不知道哪些关键点该组成一对来构建成目标。 结果如下图所示,常常产生错误的边界框,如果有补充信息(如宽比例大小)则能简单滤除此类错误。
本文改进了CornerNet,增加了一个观察每个候选区域的视觉模式的功能,进而可以判断每个边界框的正确性。
CenterNet通过增加一个关键点来探索proposal中间区域(近似几何中心)的信息,创新点在于,如果预测的边界框与ground truth有较高的IoU,则中心关键点预测出相同类别的概率要高,反之亦然。因此,在进行inference时,当通过一组关键点产生了一个边界框,我们继续观察是否具有同类别的一个关键点落入区域的中心,即使用三个点表示目标。
为了更好的检测中心的关键点即角点,提出了两个方法来丰富中心点及角点的信息。
baseline:CornerNet。
为了检测角点,CornerNet会产生两个热力图:一个是top-left corner热力图,一个bottom-right corner热力图。热力图表示不同类别关键点的位置且为每个关键点赋予了置信度值。
此外,它还预测了一个嵌入信息Embeddings,为每个角点提供一组偏移值offsets。
这个嵌入信息用于识别两个角点是否来自同个目标。这个偏移值用于将角点从热力图重新映射回输入图像上。根据得分值大小,从热力图上分别获得左上角点和右下角点的前top-k个来生成目标框。计算一对角点的向量距离来确定这对角点是否来自同个目标。
当一对角点的距离小于一个特定阈值,即生成一个目标框,目标框的置信度是这对角点热力值的平均值。
CornerNet在MS-COCO验证集上的FD(false discovery) rate如表1所示。IOU为0.05时,FD=32.7%,即每100个检测目标框中有32.7个框与GT的IOU小于0.05.
造成这种情况的可能原因是CornerNet无法获取bbox内的信息。
我们提出的CenterNet,在检测目标时,我们使用三个关键点而不是一对关键点。我们的方法仍属于one-stage的检测器。且部分继承了RoI Pooling功能。我们的方法只关注中心信息,造成的附加代价较小。
图2:CenterNet的体系结构。卷积骨干网应用cascade corner pooling和center pooling分别输出两个角热图和一个中心关键点热图。与CornerNet类似,使用一对检测到的角和similar embeddings来检测可能的边界框。然后使用检测到的中心关键点来确定最终的边界框。
通过三个点(一个中心关键点和一对角点)来描述每个目标。利用检测到的中心关键点来重新排列前k个bbox,从而滤除不正确的bbox,流程如下:
注:可以看到图2中将Bbox分为3x3的网格,中心网格位置就是一个中心区域,用于搜索中心关键点的。
Bbox中心区域的大小会影响检测结果,如小的中心区域导致小的bbox的低recall,对大的bbox取大的中心区域会导致低precision。文章提出scale-aware(尺寸可调)中心区域 来自适应各种尺寸的bbox. 即对于小的bbox框用相对较大的中心区域,对于大的bbox框用相对较小的中心区域。所用公式如下,参考图3,涉及预测框左上角点,右下角点。中心区域左上角点和右下角点 的坐标:
其中n为奇数; 作者论文中对于bbox小于150时取n=3,当bbox大于150时取n=5;根据公式1计算中心区域,用于检测是否包含中心关键点。
物体的几何中心可能不会传达可识别性较强的模式(如人的头可识别性较强,却不是人体中心)。本文提出用center pooling来获取更丰富更具识别性的视觉模式。图4 为center pooling的原理。
详细过程如下:首先backbone会输出一个特征图,为了确定特征图上的某个像素是否为中心关键点,需要在水平和垂直方向寻找最大值,并且将最大值相加。 center pooling有利于更好检测中心关键点。
corners通常在物体之外,缺乏局部外观特性。CornerNet用corner Pooling来解决此问题,通过沿边界方向找到最大值从而确定角点(见图4(b)),但其确实点角点对边界特别敏感(因为是针对边界的特征信息做的池化操作,受边界信息变化影响较大)。为此,本文作者提出让角点可看到更多的目标视觉模式信息(即获取物体内部的信息,而非单单边界的),见图4(c),原理是沿边界寻找最大值,根据边界沿物体内部方向寻找最大值,将两个最大值相加。该方法获取的角点带有边界信息以及物体内部的数据模式信息。
以上两个池化操作的模块见图5;
输入图像尺寸:511x511; 经过backbone的热力图尺寸:128x128.
作者还用到数据增强。训练loss函数定义如下,采用了Adam优化器:
其中各个loss的含义具体可参考cornerNet的论文,其有详细介绍。
对于单尺度测试,将原始图和水平翻转图像以原始分辨率送入网络。对于多尺度测试,将原始图和水平翻转图以0.6,1,1.2,1.5,1.8的尺寸倍数送入网络。从热力图中选择top70个中心关键点和top70个左上角点和70个右下角点来检测bbox,将水平翻转图上检测到的bbox水平翻转回来与原始未翻转的bbox混合,用soft-nms来移除冗余的bbox。根据得分情况,最后选择top-100个bbox用于检测。
在本文中,提出了CenterNet,它使用一个包含一个中心关键点和两个角的三元组来检测对象。我们的方法解决了CornerNet缺乏对区域的额外关注的问题,即通过在每个建议区域内以最小的成本探索视觉模式。事实上,这是所有单阶段方法的一个常见缺陷。由于单阶段方法去掉了RoI的提取过程,无法关注裁剪区域内的内部信息。
对于本文的贡献:设置了一个具有两阶段检测方法能力的单级探测器,并添加了一个有效的鉴别器。我们相信,为中心关键点添加额外分支的想法可以推广到其他现有的单阶段方法(例如,SSD)。同时,一些先进的训练策略,可以用于更好的表现
深度学习方法的目标检测主要可分为两类:two-stage 和 one-stage