ExtremeNet论文笔记

论文:Bottom-up Object Detection by Grouping Extreme and Center Points
论文链接:https://arxiv.org/abs/1901.08043
代码链接:https://github.com/xingyizhou/ExtremeNet.

Preface

本篇文章与上一篇文章Objects as points是同一个第一作者,查阅了下作者的主页Xingyi Zhou主页,发现作者主要是做关键点检测,正巧将其使用在目标检测上。本篇文章被CVPR 2019收录了,同样是Anchor free系列中的文章,也同样是关键点检测转到目标检测当中!

#Introduction
文章作者提到自上而下的检测器—基于Anchor based的检测器存在以下问题:

  • 矩形框不是自然对象的表示,大多数的物体不是轴对齐的框
  • 基于Anchor based的检测器需要枚举大量的矩形框,而这些候选框并不是真正理解了物体本身构成的视觉语法

本文还与CornerNet做了比较,主要有两点不同:

  • 角点,往往在物体的外面,没有明显的外观特点。而极点,则位于物体上,有一致的局部外观特征。
  • CornerNet是基于几何重组,即通过计算角点的嵌入向量的距离,来判断两个角点是否属于同一个矩形框,而ExtremeNet则是通过四个极点+一个中心点来构建矩形框的,四个极点和中心点都包含外观特征。

Method


上图是ExtremeNet的整体框架图,可以看到输入一张图像后,通过沙漏网络最后会得到4个C x H x W的Heatmap(极上点,极左点,极下点,极右点),以及1个C x h x w的Heatmap(中心点),还有4个极点的偏移值(2 x H x W)。如何通过4个极点确定一个候选框呢?作者借鉴了Extreme clicking for efficient object annotation,即若4个极点的坐标为(x(t), y(t)), (x(l), y(l)), (x(b), y(b)), (x(r), y(r)),则中心点的坐标为(x(l)+x(r)/2,y(t)+y(b)/2),如何通过Heatmap确定极点的呢?作者通过一个3 x 3的滑动窗口,找到一个Peak,它的值比相邻的关键点都大,并且比设定的阈值也更大。因此确定了极点。4个极点的分类损失和偏移值的使用均和CornerNet相一致,中心点的Heatmap目的则是为了减少误检,用于四个极点固定好后,可以计算得到候选框的中心点坐标(下采样后的),如果计算得到的中心点在中心点的Heatmap的值大于设定的阈值,则保留该候选框。下图则展示了其具体的流程~

作者针对一些特殊情况,做了一些改进,如当三个objects并排的时候,可能会出现最左边的极点和最右边的极点与最上、最下的极点同样构成一个候选框,也就是如下图的情况。

蓝色代表真实目标,红色虚线代表被误检的框。如果出现这种情况,即一个框内所有框的置信度分数之和超过该框的3倍,则将该框的置信度除以2

由于极点的定义不是固定的,如果目标物边界边缘构成极点,则该边的任意一个点都可以看作是极点。因此,本文对目标物的对齐边界产生一个较弱的相应,而不是强峰值响应。但这种弱相应存在两个问题:第一:较弱的相应其值可能会低于峰值阈值,因此该极点可能会被忽略。第二:即使检测到了一个极点,其分数仍可能会比具有强响应的旋转对象的分数低。本文采用edge aggregation解决上述问题。

对于提取出局部最大点的极点,将其水平方向及垂直方向极点的分数进行聚合。将所有分数单调递减的极点进行聚合。当在聚合方向达到局部最小值的时候停止聚合。

Experiment


并未给出速度上的实验,不过从实验效果看,可以看到Center heatmap和group确实可以在CornerNet上得到提升。