[ICCV 2019] CenterNet: Object Detection with Keypoint Triplets论文笔记
1. Introduction
目前主流的物体检测模型都会引入锚框,这些方法通常会存在以下问题:(1)算法通常需要大量的锚框,这样才能确保GT与某些锚框之间有较大的IoU;(2)锚框的尺寸和宽长比通常需要手动设定;(3)锚框和GT之间没有对齐,对于候选框分类的帮助不大。
为了解决上述问题,学术界提出了一些基于关键点的物体检测算法,如CornerNet等。CornerNet的优势是一种不依赖于锚框的一阶算法,可以达到SOTA,该算法对于边界比较敏感,但是对于物体的全局信息表现较弱。这样会造成产生很多不正确的框(可以参见CornerNet的算法,CornerNet是通过网络学习左上和右下的热度图和embedding,然后找出top-k的corner点,组合 pairs corners,当一个pair的embedding距离小于某个阈值,则认为它们足够接近,可以构成一个bbox,这样的约束相对较弱)。本篇论文就是基于CornerNet的改进版本,叫做CenterNet。
CenterNet又引入了一个关键点(Center Point),通过三个关键点可以兼顾bbox边缘和内部信息,同时减小特征级别的干扰,提升算法的鲁棒性。这样做的出发点是当一个预测框与GT的IoU较大时,作者认为中心区域的中心关键点也有较大的概率与GT属于同一类别。CenterNet的网络结构如下图所示,具体来说,文章的主要工作可以分成三个部分:
(1)中心区域的生成:根据预测框左上和右下的坐标值,每个框按照下述公式可以生成中心区域的坐标。根据预测框的面积,式中的n取值为3或5,这样可以达到根据不同物体大小产生自适应中心区域的目的。自适应中心区域可以提升模型对于不同尺寸物体的识别率,因为较小的物体中心区域如果较小,漏检率(1-recall)就会比较大;而较大的物体中心区域还较大的话,误检率(1-precision)也会较大。中心区域的示意图如下图所示。
(2)Center Pooling: 几何学上的中心不一定是真正语义上的中心点,Center Pooling累加水平方向和垂直方向的最大值,让中心关键点信息更加丰富。
(3)Cascade Corner Pooling: CornerNet中提出的Corner Pooling只池化了边界的两个方向,没有考虑图像内部信息,而Cascade Corner Pooling先考虑边界的两个方向,然后从最大值方向往图像内部去找最大值,最后累加这两个最大值。
Center Pooling和Cascade Corner Pooling的实现方式如下图所示(个人觉得原文中图4比图5更好理解):
Loss函数如下所示:
Loss形式实际上就是把Metric Learning引入了进来,类比ReID的Loss函数,前两项就是ID Loss,第3和4项就是Metric Learning Loss,最后两项是对于Offsets的L1 Loss。
CenterNet可以得到47.0% AP指标,接近二阶算法PANet。推理速度为340 ms/image,推理速度还可以,但是跟YoloV4比起来还差了挺多的(实测V4真的快)。与目前几个主流算法的对比如下:
MS-COCO(test-dev) | ||||
---|---|---|---|---|
Model | Backbone | AP | AP_50 | AP_75 |
YOLOv4(416) | CSPDarknet-53 | 41.2% | 62.8% | 44.3% |
YOLOv4(512) | CSPDarknet-53 | 43.0% | 64.9% | 46.5% |
YOLOv4(608) | CSPDarknet-53 | 43.5% | 65.7% | 47.3% |
EfficientDet-D0(512) | EfficientNet-B0 | 33.8% | 52.2% | 35.8% |
EfficientDet-D1(640) | EfficientNet-B1 | 39.6% | 58.6% | 42.3% |
EfficientDet-D2(768) | EfficientNet-B2 | 43.0% | 62.3% | 46.2% |
EfficientDet-D3(896) | EfficientNet-B3 | 45.8% | 65.0% | 49.3% |
EfficientDet-D4(1024) | EfficientNet-B4 | 49.4% | 69.0% | 53.4% |
EfficientDet-D5(1280) | EfficientNet-B5 | 50.7% | 70.2% | 54.7% |
EfficientDet-D6(1280) | EfficientNet-B6 | 51.7% | 71.2% | 56.0% |
EfficientDet-D7(1536) | EfficientNet-B7 | 52.6% | 71.6% | 56.9% |
CenterNet511 (single-scale) | Hourglass-52 | 41.6% | 59.4% | 44.2% |
CenterNet511 (single-scale) | Hourglass-104 | 44.9% | 62.4% | 48.1% |
CenterNet511 (multi-scale) | Hourglass-52 | 43.5% | 61.3% | 46.7% |
CenterNet511 (single-scale) | Hourglass-104 | 47.0% | 64.5% | 50.7% |
2. 与CornerNet的对比
(1) CornerNet
CornerNet生成两个热度图(左上corner的热度图和右下corner的热度图),图中每个像素表示不同类别的corner关键点位置,并为每个关键点分配一个信任评分。此外,每个corner还预测了embedding和offset。embedding用于衡量两个焦点是否来自同一对象,即度量学习领域,offset则是学习corner点重新映射到原图上的偏差。为了生成目标的bbox,根据置信度评分选取top-k的左上角和右下角的corner,用embedding的距离来确定corner之间是否可以构成一个bbox,产生的置信分是corner置信分的平均值。
CornerNet的具体可以参考CornerNet。
(2) CenterNet和CornerNet的关系
CenterNet比CornerNet多了一个分支去预测中心点,某种极端情况下,可以理解成Center Keypoint分支不会太多改变CornerNet产生的原始Bbox的数目(实际上Loss为两个分支的联合Loss,也会影响CornerNet的分支),该分支只是用来筛选CornerNet产生的bbox,而筛选的方式就是选取top-k个中心关键点,看某个中心关键点是否落在bbox产生的中心区域内,如果落在中心区域,并且分类类别与两个corner点一致,则保留该bbox。