CornerNet: Detecting Objects as Paired Keypoints论文理解

别等时光非礼了梦想. 提交于 2020-02-05 03:05:44

在本文中,我们介绍了CornerNet,这是一种新的one stage目标检测方法,可以消除anchor boxes。 我们将一个目标物体检测为一对关键点——边界框的左上角和右下角。 我们使用单个卷积网络来预测同一物体类别的所有实例的左上角的热图,所有右下角的热图,以及每个检测到的角点的嵌入向量。 嵌入用于对属于同一目标的一对角点进行分组——训练网络以预测它们的类似嵌入。 我们的方法极大地简化了网络的输出,并且无需设计anchor boxes。所以文章提出的网络通过预测框的左上角点,右下角点和角点的嵌入向量(embedding vector)来得到最终的检测框

网络结构

在CornerNet中,我们将物体边界框检测为一对关键点(即边界框的左上角和右下角)。卷积网络通过预测两组热图来表示不同物体类别的角的位置,一组用于左上角,另一组用于右下角。 网络还预测每个检测到的角的嵌入向量[27],使得来自同一目标的两个角的嵌入之间的距离很小。 为了产生更紧密的边界框,网络还预测偏移以微调整角的位置。 通过预测的热图,嵌入和偏移,我们应用一个简单的后处理算法来获得最终的边界框。

图4提供了CornerNet的概述。 我们使用沙漏网络作为CornerNet的骨干网络。 沙漏网络之后是两个预测模块。 一个模块用于左上角,而另一个模块用于右下角。 每个模块都有自己的corner pooling模块,在预测热图、嵌入和偏移之前,池化来自沙漏网络的特征。 与许多其他物体探测器不同,我们不使用不同尺度的特征来检测不同大小的物体。 我们只将两个模块应用于沙漏网络的输出

1.1 hourglass网络

该网络是全卷积网络,由一个或者多个hourglass模块组成。一个hourglass模块先用一系列的卷积和maxpooling层对输入进行特征提取,同时提取出的特征会有下采样的效果,然后通过一系列的上采样和卷积操作使得特征图又慢慢变大。通过这些操作hourglass模块能将图片的局部信息和全局信息提取出来。通过多个hourglass的堆叠,网络可以更好的获取到一些高维信息,使得网络很适合用于物体检测的任务。因为特征图的先小后大,很像沙漏,网络因此而得名。

文章用了两个hourglass模块堆叠而成,且相对于原始的hourglass模块,文章做了一些小的修改。首先,文章用stride为2的卷积代替maxpooling操作。对输入的分辨率下采样5次,每次输出的特征通道数为(256,384,384,384,512)。在上采样的过程中应用了最近邻上采样接2个残差模块的方式,(简单的上采样,然后和之前的卷积结果相加)。在与上采样相加之前的卷积结果会经过两个残差模块。在hourglass模块的中间,也就是512通道处有4个残差模块。输入hourglass之前,图片会进过一个7×7stride为2的卷积和一个stride为2的残差模块。
同《Stacked hourglass networks for human pose estimation》类似,在两个hourglass模块的连接处,使用了内部监督(intermediate supervision),即将第一个模块的输入经过1×1 Conv-BN和第一个模块的输出也经过1×1 Conv-BN的结果相加后送给ReLU,得到的结果在经过一个残差模块送入第二个hourglass模块。这里大致的结构如下图所示
å¨è¿éæå¥å¾çæè¿°

角点检测

我们预测两组热图,一组用于左上角,另一组用于右下角。 每组热图具有C个通道,其中C是分类的数量,并且大小为H×W。 没有背景通道。 每个通道都是一个二进制掩码,用于表示该类的角点位置。

对于每个角点,有一个ground-truth正位置,其他所有的位置都是负值。 在训练期间,我们没有同等地惩罚负位置,而是减少对正位置半径内的负位置给予的惩罚。这是因为如果一对假角点检测器靠近它们各自的ground-truth位置,它仍然可以产生一个与ground-truth充分重叠的边界框(图5)。我们通过确保半径内的一对点生成的边界框与ground-truth的IoU ≥ t(我们在所有实验中将t设置为0.7)来确定物体的大小,从而确定半径。惩罚权重是通过未归一化2D高斯分布给出,其中心位于正位置,其σ 是半径的1/3。

在全卷积的网络中,往往会有卷积的featuremap的大小比原图小的情况,因此对于原图中坐标为(x,y)的点,对应到featuremap中的坐标为,其中n为下采样的因子。当我们将特征图上的点还原到原图时会导致精度的损失。为了解决这个问题网络还会预测还原至原图需要的偏移量。偏移量的计算如下所示

其中ok 是偏移量,xk 和yk 是角点k的x 和y 坐标。

grouping corners

用来进行角点配对的embedding指的是网络输出的featuremap,这个featuremap大小与预测角点的featuremap大小一样。在对应角点的位置处的feature就认为是这个角点的embedding,文章用的embedding是1维的,也就是说一个角点对应一个预测值,当预测的左上角点和右下角点的embedding值很小时,认为这两个预测点是属于同一个框。

Corner Pooling

这个是文章为了更好的预测角点位置提出的一个新的pooling方法。拿左上角点来说,为了更好的判断featuremap中的某一点是左上角点,我们从右到左扫描水平最大池化,从下到上扫描垂直最大池化(可以认为是左上角点的响应值)。对于一张大小为H×W的特征图,对于特征图上的点(i,j),corner pooling的计算方式为

右下角点同理,提取到的两个方向的最大值后相加就是pooling的最终结果。这种pooling方法能够采用动态规划的方式高效的计算,如下图所示

pooling的最终结果会参与到角点的位置估计、角点的偏移量估计、角点的embedding计算中去,如下图所示

Loss的计算

本文有三种loss,一个是角点估计的loss,一个是角点偏移位置估计的loss,一个是角点分组估计的loss。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!