ECCV18 Oral | CornerNet目标检测开启预测“边界框”到预测“点对”的新思路
性能超过所有one-stage类型目标检测算法,训练和测试代码均已开源。
本文来自ECCV2018 Oral论文《CornerNet: Detecting Objects as Paired Keypoints》,作者来自美国密歇根大学。
CornerNet,一种新的物体检测方法,本文使用单个卷积神经网络将目标包围框(bounding box)检测转化为一对关键点对(paired keypoints)的检测,这一对关键点对即待检测目标的左上角点(top-left corner)和右下角点(bottom-right corner)。通过将对象检测转化为成对关键点检测,使得不再需要专门设计anchor boxes,而这之前在one-stage类型的检测器中经常要用到。 除了提出新的算法形式外,本文还引入了一种新的池化方法——corner pooling,它可以帮助网络更好地定位corner。 实验表明,CornerNet在MS COCO数据集上达到了42.1% AP,优于所有现有的one-stage类型的检测器。
anchor boxes方法
现有基于卷积神经网络的目标检测器都需要使用anchor boxes,它们是各种大小和长宽比的框,其组成目标包围框的候选集,one-stage 目标检测算法是在图像上放置大量的anchor boxes,然后对每一个anchor box最可能是要检测目标打分,最后通过回归调整坐标。
anchor boxes有两大缺点:
1.通常数量极大,训练时,DSSD算法用了40K个,RetinaNet算法用了100K个,大量的anchor boxes是不与目标区域重合,这造成了极大的正负样本不平衡,也减慢了训练速度。
2.引入了许多超参数和设计选择,包括需要生成多少个box、大小多少、长宽比如何等,再考虑到往往要支持多尺度检测,使得问题更加复杂。
本文给出的解决方案,放弃anchor boxes,直接检测目标的左上角点和右下角点。
CornerNet算法示意图
本文将对象检测看作为一对边界框角点的检测。 卷积网络为所有左上角输出heatmap,为所有右下角输出heatmap,并为每个检测到的角点输出一个嵌入矢量。 属于同一目标的两个角点的嵌入矢量是相似的,通过训练网络判断相似性,找到属于同一目标的两个角点,即检测到了目标。
corner pooling
如上图所示通常目标包围框的左上和右下角点并没有特殊的局部信息可以捕捉,所以本文发明了corner pooling池化方法,可以有效的从目标区域整体捕捉到左上和右下角点的位置信息。
上两图为corner pooling示意图,以top-left corner pooling 举例,对于每一个通道,从一个分离的特征图在水平到最右和垂直到最下两个方向找到最大值,并把这两个值相加,得到corner pooling的输出。
CornerNet网络概览
骨干网使用Hourglass Network,骨干网的后端是两个预测模块,一个用来预测左上角点,一个用来预测右下角点,使用这两个模块的预测结果,将角点成对的分组到不同目标上(分组使用associative embedding方法),即得到了最终的单个或多个目标的检测结果。
实验结果
在MS COCO数据集上进行了实验,CornerNet打败了所有之间的one-stage检测算法,取得了和最好的two-stage检测算法可匹敌的性能。
速度
在Titan X (PASCAL) GPU上检测目标平均推断时间是244ms。
开源代码主页
https://github.com/umich-vl/CornerNet
这篇论文为目标检测开辟了新思路,从检测目标的包围框转到检测目标的一对关键点对,其最大的创新点是corner pooling,idea看起来很简单,但还有很多地方值得探索,期待后续有更加有趣的算法被发明。