目标检测中基于角点检测:CornerNet Detecting Objects as Paired Keypoints

CornerNet是一种新的目标检测方法,通过检测边界框的角点来消除对anchor boxes的依赖。它使用单个卷积神经网络预测一对关键点(左上角和右下角),并通过角点的嵌入进行分组。CornerNet在MS COCO数据集上实现了42.1%的AP,优于所有one stage检测器,且引入的corner pooling层有助于提高角点定位的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原始内容来源于:https://blog.youkuaiyun.com/weixin_40414267/article/details/82379793
参考文献:https://arxiv.org/abs/1808.01244
pytorch代码实现:https://github.com/umich-vl/CornerNet
包括理解!

CornerNet: Detecting Objects as Paired Keypoints

摘要

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

1 引言

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

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

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

在本文中,我们介绍了CornerNet,这是一种新的one stage目标检测方法,可以消除anchor boxes。 我们将一个目标物体检测为一对关键点——边界框的左上角和右下角。 我们使用单个卷积网络来预测同一物体类别的所有实例的左上角的热图,所有右下角的热图,以及每个检测到的角点的嵌入向量。 嵌入用于对属于同一目标的一对角点进行分组——训练网络以预测它们的类似嵌入。 我们的方法极大地简化了网络的输出,并且无需设计anchor boxes。我们的方法受到Newell等人在多人姿态估计上下文中关联嵌入的启发[27]。 图1说明了我们方法的整体流程。
在这里插入图片描述
图1.我们将一个目标检测为一对组合在一起的边界框角点卷积网络输出一个左上角热图和一个右下角热图,并输出每个检测到的角点的嵌入矢量
在这里插入图片描述
图2.通常没有局部证据来确定边界框角的位置,我们通过提出一种新类型的池化层来解决这个问题。

CornerNet的另一个新颖组件是corner pooling,这是一种新型的池化层,可帮助卷积网络更好地定位边界框的角点。 边界框的一角通常在目标之外,参考圆形的情况以及图2中的例子。在这种情况下,角点不能根据当前的信息进行定位。相反,为了确定像素位置是否有左上角,我们需要水平地向右看目标的最上面边界,垂直地向底部看物体的最左边边界。 这激发了我们的corner pooling layer:它包含两个特征图; 在每个像素位置,它最大池化从第一个特征映射到右侧的所有特征向量,最大池化从第二个特征映射下面的所有特征向量,然后将两个池化结果一起添加,如图3展示了左上角,右下角类似。
在这里插入图片描述
图3.Corner pooling 对于每个通道,我们采用两个方向(红线)的最大值(红点),每个方向都来自一个单独的特征图,并将两个最大值加在一起(蓝点)。

我们假设了两个原因,为什么检测角点会比检测边界框中心或proposals更好首先,盒子的中心可能更难以定位,因为它取决于目标的所有4个边,而定位角取决于2边,因此更容易,甚至更多的corner pooling,它编码一些明确的关于角点定义的先验信息。 其次,角点提供了一种更有效的方式来密集地离散边界框的空间,我们只需要用 O ( w h ) O(wh) O(wh)角点来表示 O ( w 2 h 2 ) O(w^2h^2) O(w2h2)可能的anchor boxes(理解:两个角点一一配对,总复杂度为 O ( w h ) O(wh) O(wh),两个角点互相配对,总复杂度为 O ( w 2 h 2 ) O(w^2h^2) O(w2h2))。

我们证明了CornerNet对MS COCO数据集的有效性。CornerNet实现了42.1%的AP,优于所有现有的one-stage检测器。此外,通过ablation studies(即模型简化测试,去掉该结构的网络与加上该结构的网络所得到的结果进行对比),我们发现Corner pooling对于CornerNet的卓越性能起到至关重要的作用。

2 相关工作

Two-stage目标检测器

Two-stage目标检测由R-CNN首次引入并推广[12]。Two-stage检测器生成一组稀疏的感兴趣区域(RoIs),并通过网络对每个区域进行分类。R-CNN使用低层次视觉算法生成(RoIs)[41,47]。然后从图像中提取每个区域,由ConvNet独立处理,这将导致大量计算冗余。后来,SPP-Net[14]和Fast R-CNN[11]改进了R-CNN,设计了一个特殊的池化层(金字塔池化),将每个区域从feature map中池化。然而,两者仍然依赖于单独的proposals算法,不能进行端到端训练。Faster-RCNN[32]通过引入区域生成网络(RPN)来去除低层次的proposals算法,RPN从一组预先确定的候选框(通常称为anchor boxes)中生成proposals。这不仅使检测器更加高效,通过RPN与检测网络的联合训练,可实现端到端训练。R-FCN[6]将全连接子检测网络替换为完全卷积子检测网络,进一步提高了Faster R-CNN的检测效率。其他的工作主要集中在结合子类别信息[42],用更多的上下文信息在多个尺度上生成目标的proposals[1,3,35,22],选择更好的特征[44],提高速度[21],并行处理和更好的训练过程[37]。

One-stage目标检测器

另一方面,YOLO[30]和SSD[25]推广了one-stage方法,该方法消除了RoI池化步骤,并在单个网络中检测目标。One-stage检测器通常比two-stage检测器计算效率更高,同时在不同的具有挑战性的基准上保持着具有竞争性的性能。

SSD算法将anchor boxes密集地放置在多个尺度的feature maps之上,直接对每个anchor boxes进行分类和细化。YOLO直接从图像中预测边界框坐标,后来在YOLO9000[31]中,通过使用anchor boxes进行了改进。DSSD[10]和RON[19]采用了类似沙漏的网络[28],使它们能够通过跳跃连接将低级和高级特性结合起来,从而更准确地预测边界框。然而,在RetinaNet[23]出现之前,这些one-stage检测器的检测精度仍然落后于two-stage检测器。在RetinaNet[23]中,作者认为密集的anchor boxes在训练中造成了正样本和负样本之间的巨大不平衡。这种不平衡导致训练效率低下,从而导致结果不佳。他们提出了一种新的loss,Focal Loss,来动态调整每个anchor boxes的权重,并说明了他们的one-stage检测器检测性能优于two-stage检测器。RefineDet[45]建议对anchor boxes进行过滤,以减少负样本的数量,并对anchor boxes进行粗略的调整。

DeNet[39]是一种two-stage检测器,不使用anchor boxes就能生成RoIs。它首先确定每个位置属于边界框的左上角、右上角、左下角或右下角的可能性。然后,它通过列举所有可能的角点组合来生成RoI,并遵循标准的two-stage方法对每个RoI进行分类。本文提出的方法和DeNet很不一样。首先,DeNet不识别两个角是否来自同一目标,并依赖子检测网络来拒绝糟糕的RoI。相比之下,我们的方法是一种one-stage方法,使用单个卷积网络来检测和分组角点。其次,DeNet在人工确定的位置上的区域提取特征进行分类,而我们的方法不需要任何特征选择步骤。第三,引入corner pooling,一种新型的用于增强角点检测的layer。

我们的方法受到Newell等人在多人姿态估计上下文中关联嵌入的启发[27]。Newell等人提出了一种在单个网络中检测和分组人类关节的方法。在他们的方法中,每个检测到的人类关节都有一个嵌入向量。这些关节是根据它们嵌入的距离来分组的。本文是第一个将目标检测任务定义为同时检测和分组角点的任务。我们的另一个新颖之处在于corner pooling layer,它有助于更好定位角点。我们还对沙漏结构进行了显著地修改,并添加了新的focal loss[23]的变体,以帮助更好地训练网络。

3 CornerNet

3.1 概述

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

网络结构:图4提供了CornerNet的概述。 我们使用沙漏网络[28]作为CornerNet的骨干网络。 沙漏网络之后是两个预测模块,一个模块用于左上角,而另一个模块用于右下角。 每个模块都有自己的corner pooling模块,在预测热图、嵌入和偏移之前,池化来自沙漏网络的特征。 与许多其他物体探测器不同,我们不使用不同尺度的特征来检测不同大小的物体。 我们只将两个模块应用于沙漏网络的输出。
在这里插入图片描述
图4. CornerNet概述。 骨干网络之后是两个预测模块,一个用于左上角,另一个用于右下角。 使用两个模块的预测,我们定位并分组边界框的角。

3.2 检测角点

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

对于每个角点,有一个ground-truth正位置,其他所有的位置都是负值。 在训练期间,我们没有同等地惩罚负位置,而是减少对正位置半径内的负位置给予的惩罚。 这是因为如果一对假角点检测器靠近它们各自的ground-truth位置,它仍然可以产生一个与ground-truth充分重叠的边界框(图5)。我们通过确保半径内的一对点生成的边界框与ground-truth的IoU ≥ t(我们在所有实验中将t设置为0.7)来确定物体的大小,从而确定半径。 给定半径,惩罚的减少量由非标准化的2D高斯 e − x 2 + y 2 2 σ 2 e^{-\frac{x^2+y^2}{2σ^2}} e2σ2x2+y2给出,其中心位于正位置,其 σ σ σ是半径的1/3。
在这里插入图片描述
图5.用于训练的“Ground-truth”热图。在正位置半径范围内(橙色圆圈)的方框(绿色虚线矩形)仍然与地ground-truth(红色实心矩形)有很大的重叠。

分类损失 p c i j p_{cij} pcij为预测热图中位置 ( i , j ) (i,j)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值