参考文献:https://arxiv.org/abs/1904.08189
代码实现:https://github.com/Duankaiwen/CenterNet
截至目前2019.04.19,CenterNet应该是one-stage目标检测方法中性能(精度)最好的方法!
在目标检测中,基于关键点的方法经常会遇到大量不正确的边界框,主要是由于缺少对裁剪区域的额外监督造成的。本文提出了一种有效的解决方案,以最小的成本探索每个裁剪区域内的视觉模式。本文提出的CenterNet是一个单阶段的关键点检测模型,将每个目标物看作是一个三个关键点,而不是一对关键点,从而提高了精确度和召回率。相应地,我们设计了两个模块cascade corner pooling和center pooling,分别起到丰富左上角、右下角收集的信息和在中心区域提供更多可识别信息的作用。在MS-COCO数据集上,CenterNet实现了47%的AP,其性能优于现有的单阶段检测器至少4.9%。同时,CenterNet具有更快的推理速度,其性能与排名第一的两阶段检测器相当。
基于锚框的目标检测算法缺点: 借助于深度学习中的卷积神经网络(CNNs),目标检测得到了显著的改进和提高[11]。目前最流行的是基于锚框的目标检测算法[10,12,27,31,33],它设置了一组具有预定义大小的矩形,并借助ground-truth修正位置。此方法通常需要大量的锚框来确保与ground-truth的IoU足够高(导致了正负样本不均衡),并且每个锚框的大小和长宽比需要手动设计。另外,锚点通常不与ground-truth框对齐,这不利于边界框的分类任务。
基于角点的CornerNet的局限性: 为了克服锚框的缺点,提出了一种基于关键点的目标检测算法CornerNet[20]。它通过一对角点来表示每一个目标,进而移除了锚框,达到了单阶段目标检测的最新精度。然而,CornerNet缺乏对目标全局信息的参考,仍然具有局限性:每个目标由一组关键点组成,算法对边界框比较敏感;无法确定哪组关键点属于同一个目标物。因此,如图1所示,经常产生一些不正确的边界框,其中大多数边界框可以很容易地用补充信息(例如长宽比)过滤掉。
提出CenterNet:为了解决这个问题,我们在CornerNet上增加了一个观察每个区域的视觉模式的功能,进而判断每个边界框的正确性。在本文中,CenterNet通过增加一个关键点来探索proposal中间区域(近似几何中心)的信息,我们的直觉是,如果一个预测的边界框与ground truth框有很高的IoU,那么中心关键点被预测为同一类的概率就很高,反之亦然。因此,在推理过程中,当通过一组关键点产生了一个边界框,我们继续观察是否具有同类别的一个关键点落入区域的中心,即使用三个点表示目标。如图1所示,其思想是使用3个(而不是一对)关键点来表示每个边界框。
提出center pooling和cascade corner pooling: 为了更好地检测中心关键点和角点,我们分别提出了两种丰富中心和角点信息的方法。(1)center pooling:用于预测中心关键点,有利于获得更多目标物的中心区域,进而更易感知proposal的中心区域。通过取中心位置横向与纵向响应值的和的最大值实现此方法。(2)cascade corner pooling:增加原始corner pooling[20]感知内部信息的能力,结合了feature map中目标物内部及边界方向的响应值和的最大值来预测角点。实验证明,这种双向混合方法更稳定,对特征级噪声更具鲁棒性,有助于提高查准率和查全率。
性能评估: 我们在MS-COCO数据集[25]上评估了CenterNet,获得了47%的AP,大幅度超过了所有已知的单阶段检测方法。使用52层沙漏骨干网络[29]的平均推断时间为270ms,使用104层沙漏骨干网[29]的平均推断时间为340ms。CenterNet相比于两阶段检测器高效,相比于单阶段检测器时间略慢,与其他两阶段检测器的最新性能非常接近。
目标检测包括目标的定位和分类。在深度学习时代,以深度卷积神经网络为基础的目标检测方法大致可以分为两种,即两阶段方法和一阶段方法。
两阶段方法将目标检测任务分为两个阶段:提取ROIs,然后对ROIs进行分类和回归。
R-CNN[11]使用选择性搜索方法[42]在输入图像中定位ROIs,并使用基于DCN的区域分类器对ROIs进行独立分类。SPPNet[13]和Fast-RCNN[10]通过从特征映射中提取ROIs来改进R-CNN。Faster-RCNN[33]通过引入RPN(区域建议网络)进行端到端的训练。RPN可以通过回归锚框来生成ROIs,后来,锚框被广泛应用于目标检测任务中。Mask RCNN[12]在Faster-RCNN上添加了一个Mask预测分支,它可以同时检测对象和预测它们的Mask。R-FCN[6]用位置敏感的得分图代替完全连接的层,以更好地检测对象。Cascade R-CNN[4]通过训练一系列具有递增IoU阈值的检测器来解决训练时的过度拟合和推断时的质量不匹配问题。[40,28]提出了基于关键点的目标检测方法,避免了锚框和包围盒回归的缺点。针对目标检测中的不同问题,提出了其他有意义的工作,如[47,21]关注体系结构设计,[1,9,36,44]关注上下文关系,[22,3]关注多尺度统一。
单阶段方法移除了RoI提取过程,直接对候选锚框进行分类和回归。
YOLO[31]使用较少的锚框(将输入图像分成S×S网格)进行回归和分类。YOLOv2[32]通过使用更多的锚框和新的边界框回归方法改进了性能。SSD[27]将锚框密集地放置在输入图像上,并使用来自不同卷积层的特征对锚框进行回归和分类。DSSD[8]在SSD中引入了一个反褶积模块,将低层和高层特征结合起来。而R-SSD[17]在不同的特征层中使用池和反褶积操作来组合低层和高层特征。RON[19]在有效提取多尺度特征之前,提出了反向连接和目标性。RefineDet[45]对锚框的位置和大小进行了两次优化,继承了单阶段和两阶段方法的优点。CornerNet[20]是另一种基于关键点的方法,它使用一对角点直接检测对象,CornerNet虽然取得了很高的性能,但仍有较大的改进空间。
CornerNet基线的基本思想: 本文以CornerNet[20]为基线。为了检测角点,CornerNet生成左上角、右下角热图,热图表示不同类别的关键点的位置,并为每个关键点指定一个置信分数。此外,它还预测每个角点的嵌入和一组偏移,嵌入用于标识两个角是否来自同一对象,偏移将学习如何将角从热图重新映射到输入图像。为了生成目标边界框,首先从热图中根据得分分别选择左上角和右下角,然后计算角点对嵌入向量的距离,确定角点对是否属于同一对象,如果距离小于阈值,则生成对象边界框。
CornerNet的缺点: 在表1中,我们对CornerNet进行了更深入的分析。我们计算了MS-COCO验证数据集上CornerNet的FD(错误发现)率,定义为不正确边界框的比例。结果表明,即使在IoU阈值较低的情况下,错误的边界框仍占很大比例,例如CornerNet在IoU=0.05时获得32.7%的FD率。这意味着,平均每100个目标边界框中有32.7个目标与ground-truth的IoU低于0.05。小目标的错误边界框更多,达到60.3%的FD率,其中一个可能的原因是CornerNet无法查看边界框内的区域。为了使CornerNet[20]感知边界框中的视觉模式,一个潜在的解决方案是将CornerNet调整为两阶段检测器,该检测器使用RoI池[10]来观察边界框中的视觉模式。然而,众所周知,这样的范例在计算上是昂贵的。
提出CenterNet的基本思想: 在本文中,我们提出CenterNet来探索每个边界框内的视觉模式。为了检测目标,我们使用三个关键点,而不是一对关键点。我们的方法仍然是一个单阶段检测器,但部分继承了RoI池的功能,只关注中心信息使得成本最小。同时,利用center pooling and cascade corner pooling,进一步将对象内部的视觉模式引入到关键点检测过程中。
CenterNet的整体网络结构如图2所示,用一个中心关键点和一对角点来表示每个对象,在CornerNet的基础上增加了中心关键点的热图,并预测了中心关键点的偏移量,然后使用CornerNet[20]中提出的方法选择前K个边界框。为了剔除不正确的边界框,利用检测到的中心关键点位置并对其按如下过程进行排序操作:(1)根据得分选择top-k中心关键点;(2)使用相应的偏移量将这些中心关键点重新映射到输入图像;(3) 为每个边界框定义一个中心区域,并检查中心区域是否存在中心关键点,同时选中的中心关键点的类标签应与边界框的类标签相同;(4)如果在中心区域中检测到中心关键点,我们将保留边界框,用三个点的平均分数,即左上角、右下角和中心关键点更新边界框的分数。如果在中心区域中未检测到中心关键点,则删除边界框。
定义尺度感知的中心区域: 边界框中中心区域的大小会影响检测结果,例如小中心区域导致小边界框的召回率较低,而大中心区域导致大边界框的精度较低。因此,我们提出了尺度感知的中心区域用于适应不同尺寸大小的目标,尺度感知中心区域倾向于为小边界框生成相对较大的中心区域,而为大边界框生成相对较小的中心区域。假设我们判断一个边界框 i i i是否保留, t l x tl_x tlx和 t l y tl_y tly表示 i i i的左上角坐标, b r x br_x brx和 b r y br_y bry表示 i i i的右下角坐标,定义一个中心区域 j j j,让 c t l x ctl_x ctlx和 c t l y ctl_y ctly表示 j j j的左上角坐标, c b r x cbr_x cbrx和 c b r y cbr_y cbry表示 j j j的右下角坐标。然后 t l x tl_x tlx, t l y tl_y tly, b r x br_x brx, b r y br_y bry, c t l x ctl_x ctlx, c t l y ctl_y ctly, c b r x cbr_x cbrx和 c b r y cbr_y cbry应满足以下关系:
其中, n n n为奇数代表中心区域 j j j的大小,在本文中小于和大于150的边界框, n n n分别被设置为3和5,图3分别显示了n=3和n=5时的两个中心区域。根据公式(1),我们可以确定一个尺度感知的中心区域,然后检查中心区域是否包含中心关键点。
Center pooling: 物体的几何中心对传递可识别的视觉模式的贡献较少(例如,人的头部包含很强的视觉模式,但中心关键点往往在人体中间)。为了解决这个问题,提出center pooling来捕获更丰富、更容易识别的视觉模式。图4(a)显示了center pooling的操作:首先由骨干网络得到一个特征图,同时判断该特征图中是否存在一个中心点,然后需要找到该点水平方向及垂直方向上的最大值,并将其进行相加。通过这样做,center pooling有助于更好地检测中心关键点。
Cascade corner pooling:角点通常位于目标外部,缺少局部视觉外观特征。CornerNet[20]使用corner pooling来解决这个问题,如图4(b)所示。Corner pooling主要是寻找边界上的最大值进而确定角点,但这样存在一个问题就是使角点对边界框很敏感,为了让角点能获得目标物的视觉模式,本文做了改进如下图4(c)所示。首先沿边界寻找边界上的最大值,然后沿着边界最大值的位置向里看,以找到内部的最大值,最后将两个最大值相加。通过这样做,角点可以获得目标的边界信息和视觉模式。
center pooling及cascade corner pooling可以通过在不同方向上corner pooling的组合实现。
图5(a)显示了center pooling模块的结构,一个水平方向上的取最大值操作可由 left pooling 和 right pooling通过串联实现,同理,一个垂直方向上的取最大值操作可由 top pooling 和 bottom pooling通过串联实现,特征图两个分支分别经过一个3×3Conv-BN-ReLU做水平方向和垂直方向的corner pooling,最后再相加。
图5(b)显示了cascade top corner pooling模块的结构,Cascade corner pooling只是为了通过内部信息丰富角点特征,也就是级联不同方向的corner pooling达到内部信息的叠加,最终目的还是要预测角点,所以左上角点通过cascade top corner pooling+cascade left corner pooling实现,右下角点通过cascade right corner pooling+cascade bottom corner pooling实现,figure5(b)只是画出了其中一个module,其他3个module类似,也就是用cascade corner pooling module代替原CornerNet中的Corner Pooling
训练: 我们的方法在Pytorch[30]中实现,网络是从头开始训练的。输入图像的分辨率为511×511,产生128×128的热图。我们使用文献[20]中提出的数据增强策略来训练一个鲁棒模型。Adam[18]用于优化训练损失:
推理: 像[20]一样,对于单尺度测试,我们将原始图像和具有原始分辨率的水平翻转图像输入到网络中,对于多尺度测试,我们输入分辨率分别为0.6、1、1.2、1.5和1.8的原始和水平翻转图像。我们从热图中选择前70个中心关键点、前70个左上角和前70个右下角来检测边界框,翻转水平翻转图像中检测到的边界框,并将它们混合到原始边界框中,最后用Soft nms[2]删除多余的边界框,根据得分选出前100个边界框作为最终检测结果。
我们在MS-COCO数据集上评估了我们的方法[25],它包含80个类别和150多万个目标,大量的小目标使它成为一个极具挑战性的数据集。我们使用“trainval35k”集[15]进行训练,并在test-dev集上测试结果,使用 validation集中的另外5K张图像进行消融研究和可视化实验。
MS-COCO数据集[25]使用AP和AR来衡量检测器的性能。AP表示在10个不同的IoU阈值(即0.5:0.05:0.95)和所有类别上计算的平均准确率,它被认为是MSCOCO数据集上唯一最重要的度量(注:这里的计算是简单P求平均,非mAP的计算)。AR代表最大召回率,其计算在每个图像固定数量的检测(即1, 10和100)上,并且在所有类别和10个不同的IOU阈值上进行平均。此外,AP和AR可以用来评估不同尺度下的性能,包括小目标(面积< 3 2 2 32^2 322)、中目标( 3 2 2 32^2 322<面积< 9 6 2 96^2 962)和大目标(面积> 9 6 2 96^2 962)。
我们的直接基线是CornerNet[20]。接下来,我们使用52层和104层的叠加沙漏网络[29]作为主干,后者有两个沙漏模块,前者只有一个。保留了[20]对沙漏结构的所有修改。
表2显示了与MS-COCO test-dev集上最先进检测器的比较。
与基线CornerNet[20]相比,本文提出的CenterNet有了显著的改进。例如,CenterNet 511-52(表示输入图像的分辨率为511×511,主干网络为沙漏-52)时单尺度测试AP为41.6%,比37.8%提高3.8%,多尺度测试AP为43.5%,比39.4%提高4.1%。当使用较深的主干网络(沙漏-104)时,在单尺度和多尺度测试下,CornerNet的AP改善率分别为4.4%(从40.5%到44.9%)和4.9%(从42.1%到47.0%)。这些结果有力地证明了CenterNet的有效性。
同时,也可以看出,小物体的的性能提升最大。例如,CenterNet511-52将小目标的AP提高了5.5%(单尺度)和6.4%(多尺度),对于主干沙漏-104,改进率分别为6.2%(单尺度)和8.1%(多尺度)。其优点来自于由中心关键点建模的中心信息:错误边界框的尺度越小,在其中心区域检测到中心关键点的概率就越低。图6(a)和图6(b)显示了一些定性比较,这些比较证明了CenterNet在减少小的不正确边界框方面的有效性。
CenterNet还为减少中型和大型不正确的边界框带来了很大的改进。如表2所示,CenterNet511-104将单尺度测试AP分别提高了4.7%(从42.7%提高到47.4%)和3.5%(从53.9%提高到57.4%)。图6(c)和图6(d)显示了一些用于减少中型和大型不正确边界框的定性比较。值得注意的是,AR也得到了显著的改进,通过多尺度测试获得了最佳性能。这是因为我们的方法去除了很多不正确的边界框,这相当于提高了那些位置准确但分数较低的边界框的可信度。
在比较其他单阶段方法时,CenterNet511-52有41.6%的单尺度测试AP,比使用更深层模型(如RetinaNet800[24]和RefineDet[45])要好。CenterNet的最佳性能是AP 47.0%,大大超过了所有已发布的获取最佳知识的单阶段方法。
最后,我们可以观察到,CenterNet的性能也与两阶段方法具有竞争力,例如CenterNet511-52的单尺度测试AP与两阶段方法Fitness RCNN[41]相当(41.6%对41.8%),CenterNet511-104的性能与D-RFCN+SNIP[38]相当(44.9%对45.7%)。然而,需要指出的是,两阶段方法通常使用更大分辨率的输入图像(例如,1000×600),这显著提高了检测精度,特别是对于小目标。CenterNet511-104实现的多尺度测试AP为47.0%,与两阶段检测器PANet实现的最新AP 47.4%非常接近[26]。我们在图7中给出了一些定性检测结果。
AP[25]反映了一个网络可以预测多少高质量的对象边界框(通常IoU>0.5),但不能直接反映一个网络生成多少不正确的对象边界框(通常IoU<0.5),FD率是一个合适的度量,它反映了不正确边界框的比例。表3显示了CornerNet和CenterNet的FD速率,CornerNet即使在IoU=0.05阈值下也会产生许多不正确的边界框,即CornerNet511-52和CornerNet511-104分别获得35.2%和32.7%的FD率。另一方面,CornerNet生成的小不正确边界框比中、大不正确边界框要多,CornerNet511-52的62.5%和CornerNet511-104的60.3%。我们的CenterNet通过探索中心区域降低所有标准的FD率。例如,CenterNet511-52和CenterNet511-104将FD5都减少了4.5%。此外,小边界框的FD率下降幅度最大,分别为CenterNet511-52的9.5%和CenterNet511-104的9.6%,这也是小目标AP改进更加突出的原因。
CenterNet以最小的成本探索每个建议区域内的视觉模式。为了确保公平比较,我们在NVIDIA Tesla P100 GPU上测试CornerNet[20]和CenterNet的推理速度,实验结果表明,CornerNet511-104的平均推理时间为每幅图像300毫秒,CenterNet511-104的平均推理时间为340毫秒。同时使用沙漏-52主干网络可以加快推理速度,我们的CenterNet511-52平均每幅图像需要270ms的处理时间,这比CornerNet511-104更快更准确。
我们的工作贡献了三个组成部分,包括中心区域研究、center pooling 和 cascade corner pooling,为了分析各部分的贡献,本文进行了消融实验。基线是CornerNet511-52[20],我们将这三个组件逐个添加到基线中,并遵循第4.1节中详细说明的默认参数设置,结果见表4。
中心区域研究 :为了理解中心区域的重要性(见表中的CRE),我们在基线上添加了一个中心关键点热图分支,并使用三个关键点来检测边界框。对于中心关键点的检测,我们只使用传统的卷积。如表4第3行所示,我们将AP提高了2.3%(从37.6%提高到39.9%)。然而,我们发现对于小物体(即4.6%)的改善比其他物体尺度的改善更为显著,对于大型物体的改善几乎可以忽略不计(从52.2%到52.3%)。这并不奇怪,因为从概率的角度来看,小物体的中心点比大物体的中心点更容易定位。
Center pooling: 为了证明所提出的center pooling的有效性,我们将center pooling模块添加到网络中(见表中的CTP)。表4的第4行显示,center pooling将AP提高了0.9%(从39.9%提高到40.8%)。值得注意的是,在center pooling的帮助下,我们将大目标的AP提高了1.4%(从52.2%提高到53.6%),这比使用常规卷积(即1.4%比0.1%)的改进要高得多。实验结果表明,center pooling能够有效地检测出目标的中心关键点,特别是对于大型目标,我们的解释是,center pooling可以提取更丰富的内部视觉模式,而较大的对象包含更易访问的内部视觉模式。图6(e)显示了在没有/有中心池的情况下检测中心关键点的结果。我们可以看到,传统的卷积算法无法为定位中心关键点,但通过center pooling,它成功地定位了中心关键点。
Cascade corner pooling: 我们将CornerNet[20]替换为cascade corner pooling来检测角点(见表中的CCP)。表4的第2行显示了我们基于CornerNet511-52测试的结果,我们发现cascade corner pooling可以使AP提高0.7%(从37.6%提高到38.3%)。最后一行显示了我们在CenterNet511-52的基础上进行测试的结果,这将AP提高了0.5%(从40.8%提高到41.3%)。第2行的结果显示,对于大目标,AP几乎没有变化(52.2%对52.2%),但是AR提高了1.8%(从74.0%提高到75.8%)。这表明cascade corner pooling可以“看到”更多的对象,因为在大目标内部丰富的视觉模式,但过于丰富的视觉模式可能会干扰其对边界信息的感知,导致许多不准确的边界框。安装center pooling后,有效地抑制了边界框的不精确性,使大目标的AP提高了2.2%(从53.6%提高到55.8%)。图6(f)显示了使用corner pooling或cascade corner pooling检测角点的结果。我们可以看到cascade corner pooling可以成功地为左边的猫定位一对角,而corner pooling则不能。
在每个边界框中探索视觉模式取决于中心关键点。换句话说,一旦中心关键点丢失,建议的CenterNet将丢失边界框中的视觉模式。为了了解中心关键点的重要性,我们将预测的中心关键点替换为基本真实值,并在MS-COCO验证数据集上评估性能。表5显示,使用ground-truth中心关键点,CenterNet511-52的AP从41.3%提高到56.5%,CenterNet511-104的AP从44.8%提高到58.1%。CenterNet511-52和CenterNet511-104对小、中、大目标的APs分别提高了15.5%、16.5%和14.5%和14.5%、14.1%和13.3%。这说明中心关键点的检测离瓶颈还很远。
在本文中,我们提出了CenterNet,它使用一个三元组来检测物体,包括一个中心关键点和两个角点。我们的方法解决了CornerNet缺乏对裁剪区域的额外观察的问题,通过在每个提议的区域内以最小的成本探索视觉模式。事实上,这是所有单阶段方法的一个常见缺陷。由于单阶段方法去除了RoI提取过程,因此无法关注裁剪区域内的内部信息。
对我们贡献的一个直观解释是,我们配备了一个具有两阶段方法能力的单阶段检测器,并添加了一个有效的检测器。我们相信,我们为中心关键点添加额外分支的想法可以潜在地推广到其他现有的单阶段方法(例如SSD[27])。同时,一些高级的训练策略[46]也可以用于更好的表现。