文章目录
简介
本文是发表在ICCV2019上的一篇基于Anchor-Free的目标检测论文。CenterNet——顾名思义,本文检测流程是先得到目标的中心点,再由中心点得到边界框,进而完成目标检测过程。
论文原文 源码
0. Abstact
本文提出一种基于关键点的目标检测算法——CenterNet,将检测边界框转化为检测一个关键点,即目标的中心点。同CornerNet一样,这避免了一系列Anchors的操作。实验结果为该方法在MS COCO数据集上的AP为47.0%,一阶段算法上表现SOTA。
本文贡献:(一)提出一种新的Anchor-Free目标检测方法(主要是对CornerNet的改进);(二)提出两种新的池化方法用于改善关键点的生成。
1. Introduction
当前基于Anchor的目标检测算法在图像上生成大量Anchors,然后通过标注信息回归Anchors以定位目标的最终位置。这种方法通常需要大量Anchors以确保与标注框有足够大的IoU,而且Anchors的大小尺寸需要人为设定。
CornerNet是一种基于Anchor-Free的方法,它有效避免了上述问题且在一阶段算法上达到了SOTA。然而,CornerNet的性能仍受到其不能有效获取全局信息的限制。CornerNet中每个目标边界框由一对角点构建,它不能有效地判断哪一对角点属于目标,从而对边界框的生成非常敏感。图1中展示了CornerNet的一些错误检测结果,大多数检测结果都能够通过如宽高比等信息过滤掉。
为了处理这个问题,我们对CornerNet进行改进,使其能够自行识别边界框的正确性。本文提出的CenterNet用于探讨建议框的中心区域。我们认为如果预测的边界框同标注框有很大的IoU值,那么关键点在边界框的中心区域被预测为同一类别的概率也很高(以图2说明),反之亦然。即相比于CornerNet,CenterNet一共预测三个关键点:两个角点和一个中心关键点。
如图2中的第二行所示。每个边界框中心的淡红色区域为边界框的中心区域,三个框的预测结果均为“马”。现在预测“马”这个类别的中心关键点,结果显示中心点只位于一个框的中心区域。则最终只保留该中心区域所在的边界框,舍弃其他预测结果。
同时,为了改善中心点和角点的检测,相应地提出了两种策略:Center Pooling将有助于中心关键点获取目标的更多信息、感知边界框的中心区域。本文通过获取特征图的中心关键点在水平方向和垂直方向的最大和响应来预测中心关键点;Cascade Corner Pooling使Corner池化具有感知内部信息的能力。本文通过获取特征图的目标在边界和内部的最大和响应来预测角点。(两种池化方式的细节参考第3部分)
实验在MS COCO数据集上的AP为47.0%,达到了SOTA。使用52层的Gourglass作为基础网络,推断时间为270ms;使用104层的Gourglass作为基础网络,推断时间为340ms。
2. Related Works
两阶段目标检测算法将目标检测分为两个阶段:提取RoIs和分类、回归RoIs,包括R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、R-FCN、Cascade R-CNN等;一阶段目标检测算法去掉提取RoIs的过程而直接分类和回归建议框,包括YOLO、SSD、RON、RefineDet、CornerNet等。
3. Our Approach
3.1 Baseline and Motivation
本文是基于对CornerNet的改进(CornerNet的阅读见这里)。图3列出了CornerNet在MS COCO数据集上实验结果。
表中FD表示False Discovery,FD=1 - AP。其中、、中的数字表示设置的IoU阈值(0.05、0.25、0.5);、、中的S、M、L表示目标的尺寸(Small、Medium、Large)。
由的数值可知,CornerNet对小目标的检测结果较差。文中指出这可能是因为CornerNet不能评估边界框内部的区域(由于CornerNet只是通过角点生成边界框而没有作进一步处理)。本文提出的一种可能改进方法是将CornerNet设计成为两阶段算法,但是考虑到这会加大计算量,文中并没有采用。
本文提出了CenterNet用于探索边界框内部的信息。相比于CornerNet,CenterNet一共检测三个关键点。此外,本文还进一步使用Center Pooling和Cascade Pooling将边界框内部的信息引入到关键点的检测过程中。
3.2 Object Detection as Keypoint Triplets
网络结构如图4所示,输入经过BackBone后通过池化得到两个结果分别产生角点和中心关键点,用一个关键点和一对角点表示一个目标。确切地说,在CornerNet的基础上嵌入一个热图用于检测中心关键点及其偏移。然后产生top-个边界框(保留分数最高的个边界框,CenterNet中分数的计算方法为取两个角点分数的平均值,CenterNet中分数的计算方法为取三个关键点分数的平均值)。为了有效过滤掉不正确的边界框,作如下处理:(1)根据分数得到top-个中心关键点;(2)利用偏移信息将中心关键点映射回原图;(3)为每个边界框定义一个中心区域,然后检查中心关键点是否位于中心区域;(4)如果中心关键点位于中心区域,则保留该边界框,否则丢弃该边界框。
中心区域的尺寸对检测结果影响很大。文中举例如较小的中心区域对于小的边界框有很低的召回率,较大的中心区域对大的边界框有很低的精度。因此本文提出了一种自适应中心区域的方法用以适应边界框的大小。该方法致力于对小的边界框生成较大的中心区域,对大的边界框生成较小的中心区域。边界框用表示。和表示的左上角角点的坐标,和表示的右下角角点的坐标。中心区域用表示。和表示的左上角角点的坐标,和表示的右下角角点的坐标。上面各变量满足如下关系:
其中是一个奇数用于表示中心区域的大小。本文中和分别对应于边界框的大小小于和大于150个情况。
图中分别列举了和生成中心区域的情况,外面的实线框表示边界框,中间的灰色区域表示通过公式(3.1)生成的中心区域。
3.3 Enriching Center and Corner Information Center Pooling
Center Pooling:本文提出了Center池化用于找到物体的几何中心。如图6中的(a),中心池化的详细过程如下:Backbone输出一个特征图,为了确定特征图上的像素点是否是中心关键点,我们需要找到水平方向和垂直方向的最大值,然后将这些值相加。这样,中心池化有助于中心关键点的检测。
Cascade Corner Pooling:边界框的角点通常位于物体的外部,CornerNet使用Corner池化利用沿边界方向的最大值来确定角点。但是,这会使得角点对边界产生很大的依赖性。本文提出级联角点池化使得角点能够从目标的中心区域提取信息。如图6中的(c),级联角点池化的详细过程如下:首先沿着边界框分别找到边界上的最大值(上、下、左、右四个边界),然后在最大值的位置处在边界框的内部找到最大值;最后,将这两个最大值相加。这样,级联角点池化得到的角点同时具有边界信息和内部信息。
Center Pooling和Cascade Corner Pooling可由不同方向上的Center Pooling实现。如图7所示,如(a)中所示,中心池化可由向左、向右、向上和向下的池化共同作用得到;如图(b)中所示,上级联角点池化可先由一个水平向左的池化和向上的池化共同作用得到。
3.4 Training and Inference
损失函数定义为
和为Focal Loss,分别用于检测角点和中心关键点;为"pull"损失,用于最小化相同目标间嵌入向量的距离;为"push"损失,用于最大化不同目标间嵌入向量的距离;和为损失,用于预测角点和中心关键点的偏移;、、为超参数。损失函数的具体说明可见CornerNet中损失函数的定义。
4. Experiments
原文还对中心区域选取、中心池化、级联角点池化等做了消融实验。
5. Conclusions
本文提出了对CornerNet的改进——CenterNet,检测一对角点和一个中心关键点。主要解决了一阶段目标检测算法的一类问题:没有考虑边界框的内部信息。
本文指出:本文贡献之一是使一阶段算法具备两阶段算法的能力——额外添加一个判别器。作者认为本文思路同样可以应用于其他一阶段算法。
参考
- Law H, Deng J. Cornernet: Detecting objects as paired keypoints[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 734-750.
- Duan K, Bai S, Xie L, et al. Centernet: Keypoint triplets for object detection[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 6569-6578.
来源:CSDN
作者:Skies_
链接:https://blog.csdn.net/Skies_/article/details/104321152