0%

ExtremeNet(Bottom-up Object Detection by Grouping Extreme and Center Points)

本篇论文是CVPR2019的一篇anchor free的目标检测论文,借鉴了CornerNet的思想,又对其进行了进一步的改进,取得了还不错的效果,不同于CornerNet,本文提出网络ExtremeNet,不再检测目标的左上角点与右下角点,而是检测目标的4个极值点(即最上点,最下点,最左点,最右点),框出目标,极值点示例如下图所示,方法比较新颖,同时也取得了比较不错的效果,在COCO测试集上,取得了43.7%的精度,速度其实没有特别大的优势,大约300ms处理一张图像,下面我们详细介绍一下本篇论文。


重点链接

论文名称:Bottom-up Object Detection by Grouping Extreme and Center Points

作者:Xingyi Zhou&Jiacheng Zhuo等

论文链接:https://arxiv.org/pdf/1901.08043.pdf

代码链接:https://github.com/xingyizhou/ExtremeNet


在这里插入图片描述

详细介绍

随着2015年faster R-CNN网络提出anchor,anchor可以说是目标检测网络的灵魂,同时anchor方法也带领着目标检测领域走向了辉煌,在VOC数据集上的识别精度,从最开始的只有不到50%,到现如今的超过80%,但是传统的方法同样具有一些问题,如下:

  • 一个规律的矩形框并不能代表一个物体。
  • 很多的物体并不是与坐标轴平行的,强行使用矩形框包围,会产生很多干扰的背景信息,同时破坏了物体本身的信息,比如形状,姿态等。

基于这些不足,本文提出了基于extreme point的anchor free检测算法,想法也非常简单,通过检测目标的4个极值点(分别对应上下左右,4个方向),来确定目标的位置以及类别,如上图所示,这样就有效的避免了上面提到了强行使用矩形框包围物体带来的问题。该方法思想借鉴于人体关键点估计。

那么该方法是怎么做的呢?下图给出了总体的检测流程图。网络首先分别通过上下左右4个heatmap来分别检测上下左右4个极值点,如下图中第一行所示,以及通过Center heatmap来检测中心极值点,如下图左下角所示,当检测到所有的极值点之后,利用匹配算法,将所有极值点进行组合,下图中给出了两个可能的组合示例(中间行,右边图),在得到所有的组合示例之后,通过验证组合中是否存在中心极值点,来对所有的组合示例进行筛选,如果存在中心极值点,则得到了一个目标,如果不存在中心极值点,则该目标框为错误框。

在这里插入图片描述
说到这里,我们便不得不提一下anchor free领域的重量级网络CornerNet,其实该方法跟CornerNet的思想是很像的,只是采用了不同的方法,CornerNet中是通过检测目标的左上角点以及右下角点来判断目标的,其实也是一种检测目标框的方法,并且由于其左上角以及右下角点并没有在目标上,并没有带有很强的特征,也会带来一定的影响。本文方法就不一样了,检测的极值点肯定是在目标上,极值点的检测也会更简单更准确。

另外,CornerNet是通过Embeding来进行匹配的,即单独训练了一个匹配层,根据坐标点的在该层上的距离来判断左上角点与右下角点是不是属于同一个框,而本文通过center point来进行检测,即通过检测候选框中是否含有center point来进行判断,换言之,本文方法实际上利用了物体的特征信息,而CornerNet实际上没有用到。

细节介绍

下图所示为本文的网络结构,backbone使用的是hourglass104网络,后面接的分别是5个4xCxHxW的heatmap以及4个对应的offsets,C代表类别,这里网络通过不同channel的heatmap预测不同的类别极值点。在预测的时候,网络分别预测了上下左右+中心,5个heatmap,并且对,上下左右的关键点同时预测了offset,因为在backbone网络下采样的过程中,会存在取整时候的精度损失,这里需要学回来,Center heatmap没有预测关键点,主要原因是center point只是用来校验使用,不需要特别高的准确性。

上下左右以及中心关键点在训练的时候采用的是focal loss,并且同样在gt周围设置了高斯的loss减少策略(这里借鉴于CornerNet,主要原因在于关键点存在一点的偏差实际上没有特别大的影响,所以gt附近的loss适当的减小一点。)
在这里插入图片描述
求完了极值点,如何进行极值点的组合呢?下面给出了算法

首先对所有检测到的极值点(利用Tp阈值过滤得到的)进行组合,然后求组合的中心位置,然后在对应的center heatmap上面验证对应的得分,如果得分大于Tc,则找到,box的得分用着5个点的得分的平均值代替。

在这里插入图片描述

box 鬼影问题

当出现3个连续的目标在一排或者在一列的时候,容易出现鬼影问题,比如,3个一排,如果选择了最左边的最左点,最右边的最右点,这样在判断中心的时候,可能选择了中间目标的中心点,这样这个box也就被保留下来了,出现了误判,怎么解决这个问题呢?作者选择了一种后处理的方法,如果一个大框中,包含了多个目标(大于等于3个)就将该目标的得分除以2,通过这种方法来一定程度的抑制误检的出现。

edge聚类问题

极值点的检测还会出现一个问题,比如汽车,会出现几个顶上好多的极值点,这会导致找不到一个突出的极值点的问题,怎么解决这个问题呢?作者采用了边缘聚类的方法,对水平与竖直方向的极值点,分别向左右两个方向聚类到极小值点,利用这些点的和代替该极值点的分数,这样就使得这种问题的效果好了一下,如下他所示:

在这里插入图片描述

实验效果

整体来看,平均AP达到了43.7%,效果还是不错的。

在这里插入图片描述

总结

本文方法虽然速度不是很快,在实时中无法使用,但是思想还是比较好的,通过极值点来检测目标,感觉相比较与Corner要靠谱一点,希望在这种方法上,看到精度更高速度更快的算法出来吧~

数据标注问题
COCO数据集中并没有极值点的标签,这里作者使用分割的标签来找到极值点,对于边缘平行或者小于3度的边,会存在多个极值点,这里利用中心点来作为极值点。

另外作者在论文中提到,其实关键点的标注成本是更低的,因为标注框的时候,实际上要找到左上角点,可能要多尝试几次,而标注4个极值点相对比较容易,因为都在物体上嘛。