【目标检测】CornerNet: Detecting Objects as Paired Keypoints

论文:《CornerNet: Detecting Objects as Paired Keypoints》  ECCV2018

论文地址:https://arxiv.org/abs/1808.01244

开源代码https://github.com/umich-vl/CornerNet

                  https://github.com/princeton-vl/CornerNet 

原文链接

https://blog.csdn.net/u014380165/article/details/83032273

https://blog.csdn.net/weixin_40414267/article/details/82379793

摘要

本文提出了一种新的目标检测方法,使用单个卷积神经网络将目标边界框检测为一对关键点(即边界框的左上角和右下角)。通过将目标检测为成对关键点,我们消除了现有的one stage检测器设计中对一组anchors的需要。除了上述新颖的构想,文章还引入了corner pooling,这是一种新型的池化层,可以帮助网络更好地定位边界框的角点。

CornerNet在MS COCO上实现了42.1%的AP,优于所有现有的one stage检测器

1、简介

基于卷积神经网络的对象检测器(ConvNets)已经在各种具有挑战性的基准测试中取得了最新成果。现有技术方法的一个共同组成部分是anchor boxes,它们是包含各种尺寸和宽高比的矩形框,是用作检测的候选框。anchor boxes广泛用于one stage检测器,它可以获得与two stage检测器高度相当的结果,同时效率更高。 one stage检测器将anchor boxes密集地分布在图像上,通过对anchor boxes进行评分,并通过回归来改进其坐标来生成最终的边界框预测。

但anchor boxes的使用有两个缺点

首先,我们通常需要一组非常大的anchor boxes,例如: 在DSSD中超过4万,在RetinaNet中超过10万, 这是因为训练器被训练以分类每个anchor boxes是否与ground truth充分重叠,并且需要大量anchor boxes以确保与大多数ground truth充分重叠。 结果,只有一小部分anchor boxes与ground truth重叠; 这在正负样本之间造成了巨大的不平衡,减慢了训练速度。

其次,anchor boxes的使用引入了许多超参数和设计选择。 这些包括多少个box,大小和宽高比。 这些选择主要是通过ad-hoc启发式方法进行的,并且当与多尺度架构相结合时可能会变得更加复杂,其中单个网络在多个分辨率下进行单独预测,每个尺度使用不同的特征和它自己的一组anchor boxes。

在本文中,我们介绍了CornerNet,这是一种新的one stage目标检测方法,可以消除anchor boxes。 我们将一个目标物体检测为一对关键点——边界框的左上角和右下角。 我们使用单个卷积网络来预测同一物体类别的所有实例的左上角的热图,所有右下角的热图,以及每个检测到的角点的嵌入向量。 嵌入用于对属于同一目标的一对角点进行分组——训练网络以预测它们的类似嵌入。 我们的方法极大地简化了网络的输出,并且无需设计anchor boxes。整个检测网络的训练是从头开始的,并不基于预训练的分类模型,这使得用户能够自由设计特征提取网络,不用受预训练模型的限制。

我们的方法受到Newell等人在多人姿态估计上下文中关联嵌入的启发。

图1说明了我们方法的整体流程。

2、网络结构

2.1 概述

在CornerNet中,我们将物体边界框检测为一对关键点(即边界框的左上角和右下角)。卷积网络通过预测两组热图来表示不同物体类别的角的位置,一组用于左上角,另一组用于右下角。 网络还预测每个检测到的角的嵌入向量,使得来自同一目标的两个角的嵌入之间的距离很小。 为了产生更紧密的边界框,网络还预测偏移以稍微调整角的位置。 通过预测的热图,嵌入和偏移,我们应用一个简单的后处理算法来获得最终的边界框。

图4提供了CornerNet的概述。 首先1个7×7的卷积层将输入图像尺寸缩小为原来的1/4(论文中输入图像大小是511×511,缩小后得到128×128大小的输出),然后经过特征提取网络(backbone network)提取特征。我们使用沙漏网络(hourglass network)作为CornerNet的骨干网络。 该网络通过串联多个hourglass module组成(Figure4中的hourglass network由2个hourglass module组成),每个hourglass module都是先通过一系列的降采样操作缩小输入的大小,然后通过上采样恢复到输入图像大小,因此该部分的输出特征图大小还是128×128,整个hourglass network的深度是104层。

沙漏网络之后是两个预测模块。 一个模块用于左上角,而另一个模块用于右下角。 每个模块都有自己的corner pooling模块,在预测热图、嵌入和偏移之前,池化来自沙漏网络的特征。 与许多其他物体探测器不同,我们不使用不同尺度的特征来检测不同大小的物体。 我们只将两个模块应用于沙漏网络的输出。
 

å¾4

图4. CornerNet概述。骨干网络之后是两个预测模块,一个用于左上角,另一个用于右下角。 使用两个模块的预测,我们定位并分组边界框的角。

2.2、检测角点

我们预测两组热图,一组用于左上角,另一组用于右下角。 每组热图具有C个通道,其中C是分类的数量,并且大小为H×W。 没有背景通道。 每个通道都是一个二进制掩码,用于表示该类的角点位置。

对于每个角点,有一个ground-truth正位置,其他所有的位置都是负值。 在训练期间,我们没有同等地惩罚负位置,而是减少对正位置半径内的负位置给予的惩罚。 这是因为如果一对假角点检测器靠近它们各自的ground-truth位置,它仍然可以产生一个与ground-truth充分重叠的边界框(图5)。我们通过确保半径内的一对点生成的边界框与ground-truth的IoU ≥ t(我们在所有实验中将t设置为0.7)来确定物体的大小,从而确定半径。 给定半径,惩罚的减少量由非标准化的2D高斯给出,其中心位于正位置,其σ σσ是半径的1/3。

å¾5

图5.用于训练的“Ground-truth”热图。在正位置半径范围内(橙色圆圈)的方框(绿色虚线矩形)仍然与地ground-truth(红色实心矩形)有很大的重叠。

CornerNet的第一个输出是headmaps,也就是预测角点的位置。

2.3、分组角点

图像中可能出现多个目标,因此可能检测到多个左上角和右下角。我们需要确定左上角和右下角的一对角点是否来自同一个目标边界框。我们的方法受到Newell等人提出的用于多人姿态估计任务的关联嵌入方法的启发[27]。Newell等人检测所有人类关节,并为每个检测到的关节生成嵌入。他们根据嵌入之间的距离将节点进行分组。

关联嵌入的思想也适用于我们的任务。 网络预测每个检测到的角点的嵌入向量,使得如果左上角和右下角属于同一个边界框,则它们的嵌入之间的距离应该小。 然后,我们可以根据左上角和右下角嵌入之间的距离对角点进行分组。 嵌入的实际值并不重要,仅使用嵌入之间的距离来对角点进行分组。

2.4、Corner Pooling

å¨è¿éæå¥å¾çæè¿°

如图2所示,通常没有局部视觉证据表明存在角点。要确定像素是否为左上角,我们需要水平地向右看目标的最上面边界,垂直地向底部看物体的最左边边界。因此,我们提出corner Pooling通过编码显式先验知识来更好地定位角点。

Figure7是Figure4中预测模块的详细结构,该结构包括corner pooling模块和预测输出模块两部分,corner pooling模块采用了类似residual block的形式,有一个skip connection,虚线框部分执行的就是corner pooling操作。

å¨è¿éæå¥å¾çæè¿°

2.5 沙漏网络

CornerNet使用沙漏网络作为其骨干网络。沙漏网络首次被提到是用于人体姿态估计任务。它是一个完全卷积神经网络,由一个或多个沙漏模块组成。沙漏模块首先通过一系列卷积层和最大池化层对输入特性进行下采样。然后通过一系列的上采样和卷积层将特征上采样回原来的分辨率。由于细节在最大池化层中丢失,因此添加了跳过层用来将细节带回到上采样的特征。沙漏模块在一个统一的结构中捕获全局和局部特征。当多个沙漏模块堆积在网络中时,沙漏模块可以重新处理特征以获取更高级别的信息。这些特性使沙漏网络成为目标检测的理想选择。事实上,许多现有的检测器已经采用了类似沙漏网络的网络。

我们的沙漏网络由两个沙漏组成,我们对沙漏模块的结构做了一些修改。我们不使用最大池,而是使用步长2来降低特征分辨率。我们减少了5倍的特征分辨率,并增加了特征通道的数量(256,384,384,384,512)。当我们对特征进行上采样时,我们应用了两个残差模块,然后是一个最近的相邻上采样。每个跳跃连接还包含两个残差模块。沙漏模块中间有4个512通道的残差模块。在沙漏模块之前,我们使用128个通道7×7的卷积模块,步长为2,4倍减少的图像分辨率,后跟一个256个通道,步长为2的残差块。

在沙漏网络基础上,我们还在训练时增加了中间监督。但是,我们没有向网络中添加反向中间预测,因为我们发现这会损害网络的性能。我们在第一个沙漏模块的输入和输出,应用了一个3×3的Conv-BN模块。然后,我们通过元素级的加法合并它们,后跟一个ReLU和一个具有256个通道的残差块,然后将其用作第二个沙漏模块的输入。沙漏网络的深度为104。与许多其他最先进的检测器不同,我们只使用整个网络最后一层的特征来进行预测。
 

3、实验

3.1、训练细节

网络是在默认的PyTorch设置下随机初始化的,没有在任何外部数据集上进行预训练。当我们应用focal loss时,我们遵循[23]来设置卷积层中的偏差来预测角点热图。在训练期间,我们设置了网络的输入分辨率511×511,导致输出分辨率为128×128。为了减少过拟合,我们采用了标准的数据增强技术,包括随机水平翻转、随机缩放、随机裁剪和随机色彩抖动,其中包括调整图像的亮度,饱和度和对比度。 最后,我们将PCA[20]应用于输入图像。

我们使用Adam[18]来优化完整的训练损失:


3.2、测试细节

在测试期间,我们使用简单的后处理算法从热图,嵌入和偏移生成边界框。 我们首先通过在角点热图上使用3×3最大池化层来应用非极大值抑制(NMS)。然后我们从热图中选择前100个左上角和前100个右下角。 角点位置由相应的偏移调整。 我们计算左上角和右下角嵌入之间的L1距离。距离大于0.5或包含不同类别的角点对将被剔除。 左上角和右下角的平均得分用作检测分数。

我们不是将图像大小调整为固定大小,而是保持图像的原始分辨率,并在将其输入给CornerNet之前用0填充。 原始图像和翻转图像都用于测试。 我们将原始图像和翻转图像的检测结合起来,并应用soft-max[2]来抑制冗余检测。 仅记录前100个检测项。 Titan X(PASCAL)GPU上的每个图像的平均检测时间为244ms。

3.3、测试结果

Table1是关于conner pooling的对比实验,可以看出添加conner pooling(第二行)对效果的提升比较明显,这种提升尤其在目标尺度比较大的数据中表现明显。

å¨è¿éæå¥å¾çæè¿°

Table2是关于对不同位置负样本采取不同权重的损失函数的效果。第一行是不采用这种策略的效果;第二行是采用固定半径值的效果,可以看出提升比较明显;第三行是采用基于目标计算得到的半径值的效果(这篇文章所采用的),效果得到进一步提升。

å¨è¿éæå¥å¾çæè¿°

Table3是关于这篇文章的几个创新点效果。第一行是这篇文章的算法结果;第二行是将角点预测结果用ground truth代替,可以看到提升非常大;第三行是进一步将偏置用ground truth代替,相比之下提升会小很多。这说明目前该算法的瓶颈主要在于角点预测。

å¨è¿éæå¥å¾çæè¿°

Table4是connerNet和其他目标检测算法的效果对比,可以看出模型效果还是很不错的。

å¨è¿éæå¥å¾çæè¿°

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值