CenterNet: Keypoint Triplets for Object Detection
CenterNet是在CornerNet的基础上改进。先回归一下CornerNet的主要思想:在检测角点部分,CornerNet产生两个热点图,分别对应左上角和右下角。热点图可以表示不同类别的角点在图中的位置并且对每个角点附上一个置信度分数,此外还产生一个嵌入向量和偏移量,嵌入向量用来确认左上角和右下角的两个点是否属于同一个物体,偏移量对角点的位置进行微调。在生成目标候选框阶段,排名top-k的左上角和右下角角点被从heatmaps中选择出来,然后,计算一对角点间的嵌入向量的距离,如果距离小于预设的阈值,就认为这两个点属于同一个物体,就会根据这两个角点生成一个bounding box,同时,根据两个角点的得分计算一个平均分数作为该bounding box的得分。

以上是CornerNet的核心思想,其在COCO数据集上AP也有42.1%,应该说是一个有效的创新,但是,本文进行了一个实验来计算CornerNet在COCO数据集上的FD rate,可以理解为错检率,如下表所示,错检率是比较高的,而且对于小物体的错检率甚至达到了60.3%

造成这个结果的原因,是因为CornerNet不能“窥探”bounding box内部的信息。在本篇论文中,提出了CenterNet这个高效网络来替代CornerNet,在进行目标检测时,CenterNet用三个关键点进行bounding box的确定,这种方法仍然属于one-stage范畴,但是部分继承了ROI Pooling的功能,CenterNet只关注中心信息,因此计算量较小,通过center pooling和级联的Corner pooling,进一步将对象内部的视觉模式引入到基于关键点的目标检测中去。

下图是CenterNet整体网络结构,用一个中心点和一对角点来表示一个对象,此外,在CornerNet的基础上,在中心点同样加上heatmap,同样预测一个偏移量offset。然后,提取出top-k个bounding box,前面我们提到过,在此过程中,会产生很多错误的候选框,为了有效的晒掉这些,本文针对中心点又做了以下几点操作:

根据得分选择关于中心点的top-k
根据得到的offset偏移量微调中心点的位置
对每一个bounding box定义一个中心区域,检查中心点是否落在中心区域。被检测的中心点的类标签应该和bounding box的类标签一致
如果一个中心点落在预定义的中心区域,那么这个bounding box将会被保留,同时bounding box的分数会被修改成三个点得分的平均;反之,如果中心点没有落在预定义的区域,该bounding box将会被过滤掉

通过上面的四点我们可以看出,中心区域的大小设置至关重要。举例来说,对小的bounding box来说,中心区域越小,召回率(recall)会越低,因为有很多正例会被判为负例;对大的bounding box来说,中心区域越大,查准率(precision)会越低,因为很多负例会被判为正例;因此本文提出了尺度感知的中心区域来自适应bounding box的大小,在大的bounding box中生成相对较小的中心区域,这样可以有效地提高查准率(precision);同样的,在小的bounding box中生成相对较大的中心区域,可以有效提高召回率(recall)