目标检测基于中心点:CenterNet Keypoint Triplets for Object Detectiontection

血红的双手。 提交于 2020-01-18 00:15:26

参考文献:https://arxiv.org/abs/1904.08189
代码实现:https://github.com/Duankaiwen/CenterNet

截至目前2019.04.19,CenterNet应该是one-stage目标检测方法中性能(精度)最好的方法!

CenterNet: Keypoint Triplets for Object Detectiontection

摘要

在目标检测中,基于关键点的方法经常会遇到大量不正确的边界框,主要是由于缺少对裁剪区域的额外监督造成的。本文提出了一种有效的解决方案,以最小的成本探索每个裁剪区域内的视觉模式。本文提出的CenterNet是一个单阶段的关键点检测模型,将每个目标物看作是一个三个关键点,而不是一对关键点,从而提高了精确度和召回率。相应地,我们设计了两个模块cascade corner pooling和center pooling,分别起到丰富左上角、右下角收集的信息和在中心区域提供更多可识别信息的作用。在MS-COCO数据集上,CenterNet实现了47%的AP,其性能优于现有的单阶段检测器至少4.9%。同时,CenterNet具有更快的推理速度,其性能与排名第一的两阶段检测器相当。

1 引言

基于锚框的目标检测算法缺点: 借助于深度学习中的卷积神经网络(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相比于两阶段检测器高效,相比于单阶段检测器时间略慢,与其他两阶段检测器的最新性能非常接近。

2 相关工作

目标检测包括目标的定位和分类。在深度学习时代,以深度卷积神经网络为基础的目标检测方法大致可以分为两种,即两阶段方法和一阶段方法。

两阶段方法将目标检测任务分为两个阶段:提取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虽然取得了很高的性能,但仍有较大的改进空间。

3 我们的方法

3.1 基线和动机

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,进一步将对象内部的视觉模式引入到关键点检测过程中。

3.2 三个关键点的目标检测

在这里插入图片描述
CenterNet的整体网络结构如图2所示,用一个中心关键点和一对角点来表示每个对象,在CornerNet的基础上增加了中心关键点的热图,并预测了中心关键点的偏移量,然后使用CornerNet[20]中提出的方法选择前K个边界框。为了剔除不正确的边界框,利用检测到的中心关键点位置并对其按如下过程进行排序操作:(1)根据得分选择top-k中心关键点;(2)使用相应的偏移量将这些中心关键点重新映射到输入图像;(3) 为每个边界框定义一个中心区域,并检查中心区域是否存在中心关键点,同时选中的中心关键点的类标签应与边界框的类标签相同;(4)如果在中心区域中检测到中心关键点,我们将保留边界框,用三个点的平均分数,即左上角、右下角和中心关键点更新边界框的分数。如果在中心区域中未检测到中心关键点,则删除边界框。

定义尺度感知的中心区域: 边界框中中心区域的大小会影响检测结果,例如小中心区域导致小边界框的召回率较低,而大中心区域导致大边界框的精度较低。因此,我们提出了尺度感知的中心区域用于适应不同尺寸大小的目标,尺度感知中心区域倾向于为小边界框生成相对较大的中心区域,而为大边界框生成相对较小的中心区域。假设我们判断一个边界框ii是否保留,tlxtl_xtlytl_y表示ii的左上角坐标,brxbr_xbrybr_y表示ii的右下角坐标,定义一个中心区域jj,让ctlxctl_xctlyctl_y表示jj的左上角坐标,cbrxcbr_xcbrycbr_y表示jj的右下角坐标。然后tlxtl_xtlytl_ybrxbr_xbrybr_yctlxctl_xctlyctl_ycbrxcbr_xcbrycbr_y应满足以下关系:
在这里插入图片描述
其中,nn为奇数代表中心区域jj的大小,在本文中小于和大于150的边界框,nn分别被设置为3和5,图3分别显示了n=3和n=5时的两个中心区域。根据公式(1),我们可以确定一个尺度感知的中心区域,然后检查中心区域是否包含中心关键点。
在这里插入图片描述

3.3 丰富角点及中心点信息

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
在这里插入图片描述

3.4 训练和推理

训练: 我们的方法在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个边界框作为最终检测结果。

4 实验

4.1 数据集、指标和基线

我们在MS-COCO数据集上评估了我们的方法[25],它包含80个类别和150多万个目标,大量的小目标使它成为一个极具挑战性的数据集。我们使用“trainval35k”集[15]进行训练,并在test-dev集上测试结果,使用 validation集中的另外5K张图像进行消融研究和可视化实验。

未完待续……

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!