anchor-free目标检测之centernet

自从anchor-free方法实现目标检测的Cornernet提出后,对其进行改进的方法也出现了许多。centernet是一篇对其进行改进的论文,将原来的二元组角点检测扩展为三元组检测,加入了中心点的检测。

为了克服需要手动设计anchor的超参数的问题,Cornernet提出基于关键点检测的方法。但是,基于关键点的方法经常会产生大量不正确的对象边界框,可以说是由于缺少对裁剪区域的额外观察。

本文在一个名为CornerNet的基于关键点的检测器上构建框架。本文提出一个叫做CenterNet的网络,将每个对象检测为三元组而不是一对关键点,从而提高精度和召回率。我们设计了两个名为cascade corner poolingcenter pooling的模块,它们分别丰富了左上角和右下角收集的信息,并在中心区域提供了更多可识别的信息。

在MS-COCO数据集上,CenterNet实现了47.0%的AP,其性能优于所有现有的one-stage检测方法至少4.9%。同时,具有更快的推理速度,CenterNet表现出与two-stage检测方法相当的性能。

                                   anchor-free目标检测之centernet_第1张图片

如上图所示,第一排中蓝色是ground truth,红色是挑选出的score在top-100的bbox,可以看到很多bbox具有并不合适的宽高比,从视觉上来说,我们可以轻易的排除掉其中的一些;第二排则表明了通过对bbox区域部分的检验,可以更好的调整bbox的位置。


【已有方法存在的问题】:

因为Cornernet是基于左上和右下的一对关键角点来实现检测,也就是说,由于每个对象都是由一对角构成的,因此算法对于检测对象的边界很敏感,同时又不知道应该将哪些关键点对分组到对象中。

同时,角点的预测导致了缺乏对region proposal内部信息的观察和融合。


【提出的解决方案】:

总体来说,在通过corenet中的embedding和heatmap等得出的bbox的基础上,如果bbox和ground truth有很高的iou,那么我们有理由相信Bbox的中心点也会被预测为和bbox一样的类别。

因此,在inference阶段,在已经通过一对角点生成出proposal之后,我们通过检测是否有一个属于相同类别的中心点落在proposal的中心区域中,来决定这个bbox是否应该存在。

为了实现这一想法,本文提出了两个新的模块:

  • cascade Corner pooling
  • center pooling

在feature map的中心关键点的水平和垂直方向取出最大求和响应在实现center pooling。

cascade Corner pooling使原始的Cornernet具有感知内部信息的能力,通过在feature map中对象的边界和内部方向上取出最大求和响应来预测角点。

anchor-free目标检测之centernet_第2张图片

上图是整个centernet的架构。backbone依旧选择了hourglass网络,除了级联的corner pooling,还并联添加了一个center pooling来生成center heatmap,用于调整根据成对角点预测出来的bbox。

  1. 首先跟Cornernet一样,根据生成的左上和右下角点的heatmap、embedding、offsets,生成bbox;
  2. 然后根据新加的center pooling模块得到center keypoints,选top-k个center keypoints映射回input;
  3. 对于每一个bbox,定义一块center region区域,看这个区域是否包含了center keypoint,注意中心点的类别应该与bbox的类别一致;
  4. 如果在中心区域检测到了中心关键点,那么我们保留这个bbox,bbox的得分也相应的替换成一对角点+中心关键点的平均得分,如果不包括,那么这个bbox将被丢弃。

从上述方法来看,center region区域的大小影响了检测结果。如果过小,会导致bbox过低的recall;如果过大,预测出来的bbox会具有较低的准确度。

因此,文中提出了根据bbox的大小自适应调整的center region的大小。对于大的bbox,中心区域要小,反之则需要大一些的center region。

                                               anchor-free目标检测之centernet_第3张图片

文中提出的方法是,给定proposal的左上坐标(tlx,tly)和右下坐标(brx,bry);定义center region是j,给定center region的左上坐标 (ctlx,ctly)和右下坐标(cbrx,cbry),center region的一对角点坐标由以下公式算出:

                                                             anchor-free目标检测之centernet_第4张图片

其中n是奇数,如果bbox大于150,则n=5;小于则n=3。通过以上设计,我们可以得到自适应的center region的size。

                                  anchor-free目标检测之centernet_第5张图片

center pooling:通常来说,目标的几何中心并不一定包含了非常多的视觉信息。比如一个人的头包含了很多视觉信息,但是人的中心点一般都会落在身体上。

如figure 4(a)所示,为了解决这个问题,我们决定通过backbone输出的feature map上的一个像素是否是中心点,我们会将这个像素的水平和垂直方向的像素求和相加,这样就包含了更多的视觉信息。

cascade Corner pooling:角点通常位于物体外部,缺乏Bbox内部的特征。 CornerNet 中使用的cornernet可以解决这个问题,原理如图4(b)所示。 角落池旨在找到边界方向上的最大值,以便确定角落。 但是,它会使角点对边缘敏感。

为了解决这个问题,我们提出cascade corner pooling。原理如图4(c)所示。 它首先沿着边界查找边界最大值,然后沿着边界最大值的位置向内看以找到内部最大值,最后,将两个最大值一起添加。 通过这样做,角落获得边界信息和内部对象的视觉信息。

                                    anchor-free目标检测之centernet_第6张图片

以上两个模块的实现都可以通过级联Cornernet中的Corner pooling实现,图5展示了这两种结构。

损失函数设计如下:

1、2项是focal loss的设计,网络用来检测角点和中心点;第三项是用于最小化属于同一类的embedding vetors;第四项是最大化属于不同类的embedding vectors;5、6项是L1 loss,网络用来预测角点和中心点的offsets。


【效果】:

相比于cornnet,在coco数据集上训练的效果提升了很多,4.9%的AP提升。anchor-free目标检测之centernet_第7张图片

可以看到,通过融合了关键点的信息,错误的bbox减少了很多。


【总结】:

在本文中,我们提出了CenterNet,它使用三元组检测对象,包括一个中心关键点和两个角点。

我们的方法通过以最小的成本探索每个region proposal内的视觉模式来解决CornerNet缺乏对cropped region的额外观察的问题。 事实上,这是所有一阶段方法的常见缺陷。 由于一阶段方法消除了RoI提取过程,他们无法关注裁剪区域内的内部信息。

对我们贡献的直观解释在于,我们为one-stage的检测器配备了two-stage探测器的能力,并增加了一个有效的鉴别器。 我们认为,为中心关键点添加额外分支的想法可能会推广到其他现有的单阶段方法(例如,SSD)。 同时,一些先进的训练技巧可用于提升效果。

你可能感兴趣的:(anchor-free目标检测之centernet)