论文地址:https://arxiv.org/abs/1808.01244v1

论文代码:https://github.com/umich-vl/CornerNet

概述

CornerNet是一篇发表在ECCV 2018的目标检测论文。有别于主流目标检测算法基于anchor box的思想,CornerNet将关键点检测用于目标检测,通过检测目标区域的左上角和右下角这两个关键点来获取预测框。CornerNet创新性强,而且检测效果很好,在MS COCO数据集上的AP达到42.1%。

CornerNet介绍

Anchor box的使用使得单阶段算法具有与两阶段算法相当的检测效果,但是anchor box(1)数目巨大,而且容易造成正负样本不平衡,训练速度慢(2)引入了许多超参数设置和结构设计。受Newell等人在多人姿态估计上下文关联embedding的启发,作者提出了CornerNet,将一个目标检测为一个关键点对(边界框的左上角和右下角),使用单个卷积神经网络来预测heatmap(左上角、右下角),以及每个角点的embedding vector,该向量用于组合同一目标的角点对。CornerNet的大体流程如下图所示:

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

如图2所示,不同目标的角点没有相似特征。那么,怎样确定边界框的角点呢?

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

文中提出了一种新的池化层来解决这个问题。注意到目标的左上角的角点向右可以得到目标的顶部特征信息,向下可以得到目标的左侧特征信息,右下角的角点类似。作者提出Corner pooling的池化方式来获得这些信息。以左上角的角点为例,Corner pooling的示意图如下:

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

具体计算示例如图6所示,简单来讲,左上角的Corner pooling就是自右向左扫描的水平max-pooling、自底向上扫描的垂直max-pooling,将两个结果做元素和。右下角的池化类似。

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

网络结构

CornerNet的网络结构如下:

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

CornerNet使用Hourglass网络作为backbone提取特征,之后的两个预测模块分别用于预测左上角和右下角的角点,每个预测模块首先是一个Corner pooling层,其后有三个分支:heatmaps、embeddings和offsets。

Heatmaps就是角点位置的预测,一共两组分别表示左上角和右下角,每组有C个通道(C为类别数目,不含背景类),大小为H*W,每个通道都是二进制mask用于表示该类的角点的位置。注意到对于每个角点,只有ground-truth处是正,其余所有位置都是负的。但是实际上如果一对false角点距离ground-truth很近,那么它仍然可以生成与ground-truth重叠程度很大的框,如图5所示。所以用同样的权值惩罚负位置是不合理的。

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

因此,文中提出了focal loss的变体来处理heatmap损失:

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

其中,pcij是类别c在位置(i, j)的score,ycij是非标准化高斯增强的ground-truth,N是图像中目标数,α和β是超参数(实验中α设为2,β 设为4)。

Offsets则是位置偏移。下采样的使用使得输出尺寸小于原始图像尺寸,假设下采样因子为n,则图像中(x, y)映射到Heatmaps的([x/n], [y/n])。取整计算会导致精度丢失,使用offsets来更准确地进行Heatmaps到输入图像的映射。

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

训练过程中使用smooth L1损失,即:

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

Embedding用于确定左上角和右下角的一对角点是否来自同一个目标边界框。Embedding产生每个角点的embedding vector,如果左上角和右下角的一对角点属于同一个目标,那么它们embedding vector之间的距离应该很小。该部分的训练通过如下两个损失函数实现,其中(4)用于缩小属于同一目标的两个角点的embedding向量的距离,(5)用来放大不属于同一目标的两个角点的embedding向量的距离:

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

预测模块的详细结构如下图所示:

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

第一部分采用residual block结构,首先使用两个128通道的3*3卷积模块处理特征,然后使用corner pooling层。将池化特征输入256通道的3*3的conv-BN层,加上shortcut,然后通过卷积模块和conv-ReLU-conv层产生输出结果。

实验

网络随机初始化,没有在任何数据集上进行预训练。训练过程中,输入图像尺度为511*511,输出为128*128,。采用随机水平翻转、随机缩放、随机裁剪、随机色彩抖动等数据扩增技术。

Full loss如下:

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

其中,α和β都设为0.1,γ设为1。

测试细节:在角点Heatmaps上使用3*3 max-pooling,使用NMS后处理产生100个左上和100个右下角点。去掉Embedding vector的距离大于0.5或者包含不同类别的角点对。检测分数为左上角和右下角的平均得分。不对图像resize,使用0填充的方式产生指定大小的图像作为输入。同时应用原始图像和翻转图像进行测试,并结合二者的检测结果,使用softmax抑制冗余,仅保留前100个预测框。

实验结果

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

可见,使用corner pooling使得AP提升了两个点。

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

采用基于目标的半径衰减损失效果明显优于固定半径和不使用衰减惩罚损失的方法。

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

Heatmaps和offsets的引入大大提升了AP值。

论文阅读 | CornerNet:Detecting Objects as Paired Keypoints-LMLPHP

CornerNet511的多尺度模型在COCO数据集上的AP达到42.1。

05-11 13:09