相关链接
论文地址:https://arxiv.org/abs/1904.08189
代码链接:https://github.com/Duankaiwen/CenterNet
概述
CenterNet由中科院、牛津大学和华为诺亚方舟实验室联合提出,发展了以CornerNet为代表的基于关键点的目标检测方法。其主要思想在于,利用关键点的三元组(中心点、左上角点和右下角点)来确定一个目标,有效利用了目标内部信息。为了更好地提取中心点和角点特征,作者提出了center pooling和cascade corner pooling。CenterNet在MS COCO数据集上的AP高达47%,大幅领先于其他SOTA算法。
介绍
CornerNet利用一对角点(左上角和右下角)来确定目标,算法对目标的边缘信息很敏感,同时不知道哪组角点构成目标,所以经常产生一些错误的bbox,很多错误可以通过简单的补充信息过滤掉(比如宽高比)。考虑到如果bbox与gt有很高的IoU,那么中心区域的关键点的类别与之类别相同的概率会很大,反之亦然。在推理过程中,在将候选区生成为一对角关键点之后,通过检查同一类的中心关键点是否位于其中心区域来确定是否为目标。
为了提取中心关键点和角点的特征,作者提出了center pooling和cascade corner pooling。测试时间:Hourglass-52为270ms per image,Hourglass-104为340ms per image。
CenterNet
CenterNet使用CornerNet作为baseline。
CornerNet生成两个热图:左上角的热图和右下角的热图。热图表示不同类别的关键点的位置,并为每个关键点分配一个信任评分。此外,它还预测每个角点的embedding和offsets。embedding用于识别两个角点是否来自同一个对象。offsets学习将角点从heatmap重新映射到输入图像。为了生成目标的bbox,根据置信得分选取top-k的左上角点和右下角点,利用它们的embedding向量的距离来确定角点对是否来自同一目标(如果距离小于阈值则生成bbox),产生的bbox的置信分是角点对的平均分。
对CornerNet的分析:
FD(false discovery)的定义—— FD=1-AP
解决方案:引入center information。
CenterNet的网络结构:
产生top-k的bbox方式与CornerNet相同。过滤错误bbox的步骤:(1)根据置信分选取top-k的中心关键点(2)使用对应的offsets将中心关键点重新映射到输入图像(3)定义中心区域判断中心关键点是否落在该区域内。bbox的置信分取三点的平均值。
显然,中心区域的大小对检测结果影响很大。文中提出了一种scale-aware中心区域,倾向于小的bbox产生相对较大的中心区域,而大的bbox产生相对较小的中心区域。假设bbox的左上角点坐标为(tlx,tly),右下角点坐标为(brx,bry),中心区域的定义为:
其中n为奇数(文中n的设置:bbox的尺度小于150时,n取3;否则取5)。
Center pooling:累加水平方向和垂直方向的最大值
Corner pooling:累加边缘的最大值
Cascade pooling:累加边缘方向和内部方向的最大值
corner pooling使得角点对边缘信息很敏感,所以作者提出了cascade corner pooling:首先沿边缘方向找到边缘最大值,然后沿边缘最大值的方向寻找内部最大值,最后累加最大值。
训练和测试:
Pytorch
输入图像大小:511*511
heatmap大小:128*128
优化:Adam
损失函数:
其中,pcij是类别c在位置(i, j)的score,ycij是非标准化高斯增强的ground-truth,N是图像中目标数,α和β是超参数(实验中α设为2,β 设为4)。
Offsets则是位置偏移。下采样的使用使得输出尺寸小于原始图像尺寸,假设下采样因子为n,则图像中(x, y)映射到Heatmaps的([x/n], [y/n])。取整计算会导致精度丢失,使用offsets来更准确地进行Heatmaps到输入图像的映射。
Embedding用于确定左上角和右下角的一对角点是否来自同一个目标边界框。Embedding产生每个角点的embedding vector,如果左上角和右下角的一对角点属于同一个目标,那么它们embedding vector之间的距离应该很小。该部分的训练通过如下两个损失函数实现,其中(4)用于缩小属于同一目标的两个角点的embedding向量的距离,(5)用来放大不属于同一目标的两个角点的embedding向量的距离:
整体损失函数:
GPU:8个Tesla V100
batch size:48
迭代:0-450k(lr=2.5e-4),450k-480k(lr=2.5e-5)
测试:单尺度测试输入原始图像和水平翻转的图像;多尺度测试时输入原始图像和水平翻转的图像(分辨率0.6,1,1.2,1.5,1.8)。选取top 70的关键点。采用Soft-NMS。选择top-100 bbox作为最终检测结果。
实验
在COCO上的检测结果:
误检率对比:
推理速度:
同样使用NVIDIA Tesla P100 GPU,CornerNet511-104为300ms/img,而CenterNet511-104是340ms/img。CenterNet511-52为270ms/img。
Ablation study:
中心区域、center pooling和cascade corner pooling
中心关键点有多重要?作者把预测的中心关键点替换为gt的中心,AP明显提升:
记得ExtremeNet也利用了中心关键点的信息,为什么效果没这篇的好?(可能是没有加入类别信息?)