CornerNet: Detecting Objects as Paired Keypoints

2022-09-02 11:47:48 浏览数 (1)

摘要

我们提出了一种新的对象检测方法——拐角网络,该方法利用单一的卷积神经网络将对象的左上角和右下角作为一对关键点检测出来。通过检测成对的关键点,我们消除了设计一组锚箱的需要,通常使用单级检测器。除了我们的新公式,我们还引入了角池化,这是一种新的池化层,可以帮助网络更好地定位角。实验表明,在MS COCO上,CornerNet实现了42.2%的AP,优于现有的所有一级检测器。

1、介绍

基于卷积神经网络(ConvNets)的目标检测器已经在各种具有挑战性的基准上取得了最先进的结果。最先进的方法的一个共同组成部分是锚框,它们是作为检测候选的各种尺寸和高宽比的框。锚框广泛应用于一级检测器,可以实现具有高度竞争力的两级检测器,同时更有效率。一阶段检测器将锚框密集地放置在图像上,通过对锚箱打分并通过回归细化它们的坐标来生成最终的锚框预测。

但是使用锚框有两个缺点。首先,我们通常需要一组非常大的锚框,例如超过40k的DSSD和超过100k的RetinaNet。这是因为检测器被训练来区分每个锚框是否与ground truth box有足够的重叠,需要大量的锚框来确保与大多数ground truth box有足够的重叠。因此,只有一小部分锚框会与地面真相重叠;这就造成了正锚框和负锚框之间的巨大失衡,减缓了训练。

其次,锚框的使用引入了许多超参数和设计选择。这包括有多少框,什么尺寸,什么宽高比。这样的选择很大程度上是通过特别启发法做出的,当与多尺度体系结构结合时,可能会变得更加复杂。在多尺度体系结构中,单个网络在多个分辨率下做出单独的预测,每个尺度使用不同的特征和自己的一组锚框。

在本文中,我们介绍了一种新的单阶段目标检测方法,它不需要锚框。我们以一对关键点|(包围框的左上角和右下角)来检测一个目标。我们使用一个单独的卷积网络来预测同一个目标类别的所有实例的左上角的热图,所有右下角的热图,以及每个检测到的角的嵌入向量。该嵌入算法用于对属于同一对象|的一对角进行分组,然后训练网络预测它们相似的嵌入。我们的方法极大地简化了网络的输出,并消除了设计锚盒的需要。我们的方法受到Newell等人(2017)提出的联想嵌入方法的启发,该方法在多人人体姿态估计中检测并分组关键点。图1显示了我们的方法的整体流程。

角落网络的另一个新组件是角落池化,这是一种新型的池化层,可以帮助卷积网络更好地定位边界框的角落。边界框的一个角通常在目标的外面,考虑到一个圆的情况以及图2中的例子。在这种情况下,不能根据局部证据确定角落的位置。相反,为了确定在某个像素位置是否存在左上角,我们需要水平地看向右边的目标的最上方边界,垂直地看向底部的目标的最左侧边界。这推动了我们的角落汇集层:它包含两个特性地图;在每个像素点,它从第一个特征映射的右侧最大汇集所有特征向量,从第二个特征映射的正下方最大汇集所有特征向量,然后将两个汇集的结果相加。示例如图3所示。

我们假设有两个原因可以解释为什么检测角比包围框中心或建议更好。首先,一盒可以更难的中心定位,因为它取决于目标的所有4边,而定位取决于双方的一个角落,因此更容易,和角落池更是如此,编码一些明确的先验知识的定义。第二,角提供了一种更有效的方式来密集离散盒子的空间:我们只需要O(wh)角来表示Oleft(w^{2} h^{2}right) 可能的锚框。我们在MS COCO上演示了街角网的有效性。CornerNet的AP达到42.2%,超过了所有现有的一级检测器。此外,通过消融研究,我们表明角池是至关重要的性能的角网。代码可在https://github.com/princeton-vl/CornerNet获得。

2、相关工作

2.1、两阶段目标检测器

两阶段法首先由R-CNN引入并推广。两级检测器生成感兴趣区域的稀疏集合,并通过网络对每个感兴趣区域进行分类。R-CNN使用低水平视觉算法生成ROI。然后从图像中提取每个区域,并由卷积神经网络独立处理,产生大量的冗余计算。后来,SPP 和Fast RCNN通过设计一个特殊的池化层来改进R-CNN,该层将Feature Maps中的每个区域池化。然而,两者仍然依赖于单独的提议算法,不能进行端到端的训练。Fast RCNN通过引入区域提议网络(RPN)来消除低级提议算法,该网络从一组预先确定的候选框(通常称为锚框)中生成提议。这不仅使探测器更有效,而且允许检测器进行端到端训练。R-FCN通过将全连通的子检测网络替换为全卷积的子检测网络,进一步提高了Faster-RCNN的效率。其他工作集中于合并子类别信息,在多尺度上生成具有更多上下文信息的目标提案,选择更好的特征,提高速度,级联程序和更好的训练程序。

2.2、一阶段目标检测器

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

SSD将锚框密集放置在多个尺度的feature map上,直接对每个锚盒进行分类和细化。YOLO直接从图像中预测包围框坐标,之后在YOLO9000中改进,切换到锚框。DSSD和RON 采用类似于沙漏网络的网络,通过跳跃连接将低级和高级特征结合起来,更准确地预测边界盒。然而,在RetinaNet引入之前,这些单阶段检测器的性能仍优于两阶段检测器。在(Lin et al., 2017)中,作者认为密集的锚箱在训练过程中造成了正锚框和负锚框之间的巨大不平衡。这种不平衡导致训练效率低下,从而导致性能不佳。他们提出了一种新的损失,Focal Loss,动态调整每个锚框的权重,并证明了他们的单阶段检测器优于两阶段检测器。RefineDet 提出过滤锚盒,减少负框的数量,粗略调整锚框。

DeNet是一种两阶段检测器,无需使用锚盒产生ROI。它首先确定每个位置属于边界框的左上角、右上角、左下角或右下角的可能性。然后通过列举所有可能的角点组合来生成RoI,并按照标准的两阶段方法对每个RoI进行分类。我们的方法与DeNet非常不同。首先,DeNet不识别两个角是否来自同一物体,依赖子检测网络来拒绝较差的RoIs。相比之下,我们的方法是一种单阶段的方法,使用单个ConvNet来检测和分组拐角。其次,DeNet选择相对于区域的人工确定位置的特征进行分类,而我们的方法不需要任何特征选择步骤。第三,我们引入角池,一种新的类型的层来增强角检测。

点连接网络(PLN) 是一种没有锚框的一阶段检测器。它首先预测四个角的位置和一个边界框的中心。然后,在每个角落的位置,它预测在图像中的每个像素位置是中心的可能性。类似地,在中心位置,它预测每个像素位置属于左上角、右上角、左下角或右下角的可能性。它结合每个角和中心对的预测生成一个边界框。最后,它将四个边界框合并为一个边界框。街角网与PLN非常不同。首先,角网通过预测嵌入向量对角点进行分组,而PLN通过预测像素位置对角点和中心进行分组。第二,角网使用角池来更好地定位角。

我们的方法受到Newell等于关于多人姿态估计中的联想嵌入的启发。Newell等人提出了一种在单一网络中检测和分组人类关节的方法。在他们的方法中,每个检测到的人体关节都有一个嵌入向量。关节的分组是基于它们的嵌入之间的距离。据我们所知,我们是第一个制定目标检测任务作为一个任务的检测和分组角嵌入。我们的另一个新颖之处是角落池层,这有助于更好地定位角落。我们还对沙漏结构进行了重大修改,并添加了我们的新型焦损失变体,以帮助更好地训练网络。

3、CornerNet

3.1、概览

在CornerNet中,我们以一对关键点(边界框的左上角和右下角)来检测一个目标。一个卷积网络预测两组热图来代表不同目标类别的角落位置,一组是左上角,另一组是右下角。该网络还为每个检测到的角点预测一个嵌入向量,使得两个角点嵌入到同一对象的距离很小。为了产生更紧密的边界盒,该网络还预测偏移量,以轻微调整角落的位置。利用预测的热图、嵌入和偏移量,我们应用一个简单的后处理算法来获得最终的边界框。图4提供了街角网的概览。我们使用沙漏网络作为街角网的骨干网络。沙漏网络之后是两个预测模块。一个模块用于左上角,而另一个用于右下角。每个模块都有自己的角池模块,在预测热图、嵌入和偏移量之前,从沙漏网络中汇集功能。与许多其他物体探测器不同,我们不使用不同尺度的特征来检测不同大小的物体。我们只对沙漏网络的输出应用这两个模块。

3.2、检测 Corner

我们预测了两组热图,一组为左上角,一组为右下角。每组热图有C个通道,其中C为类别数,大小为H × W,没有背景通道。每个通道是一个二进制掩码,指示类的角的位置。对于每个角落,都有一个ground-truth positive location,其他所有的位置都是negative。在训练过程中,我们减少了对正位置半径内的负位置的惩罚,而不是对负位置进行同等惩罚。这是因为一对假角检测,如果它们接近各自的地面真实位置,仍然可以产生足够的框重叠日渐框(图5),我们确定半径大小的一个对象通过确保一对点的半径将生成一个边界框内至少t借据真实的注释(在所有实验我们集合t 0:3)。给定半径,惩罚减少量由一个非规格化的2D高斯给出,e^{-frac{x^{2} y^{2}}{2 sigma^{2}}} ,其中心在正位置,其σ是半径的1/3。

p_{c i j} 为位置(i, j) ,并设y_{c i j} 为未归一化高斯增广的groundtruth”热图。我们设计了一种变型焦损失(Lin et al., 2017):

其中N是图像中目标的数量,α和β是控制每个点贡献的超参数(我们在所有实验中设置α为2,β为4)。使用y_{c i j} 编码的高斯凸点,left(1-y_{c i j}right) 项减少了地面真实位置周围的惩罚。

许多网络(他等人,2016;Newell等人,2016)涉及下采样层来收集全局信息和减少内存使用。当它们应用于完全卷积的图像时,输出的大小通常小于图像的大小。因此,一个位置(x,y) 被映射到热图中的B left(leftlfloorfrac{x}{n}rightrfloor,leftlfloorfrac{y}{n}rightrfloorright) ,其中n为降采样因子。当我们将热图上的位置重新映射到输入图像上时,可能会丢失一些精度,这将极大地影响小边界盒的IoU和它们的ground truth。为了解决这个问题,我们预测位置偏移量,在将它们重新映射到输入分辨率之前稍微调整角落的位置。

boldsymbol{o}_{k}=left(frac{x_{k}}{n}-leftlfloorfrac{x_{k}}{n}rightrfloor, frac{y_{k}}{n}-leftlfloorfrac{y_{k}}{n}rightrfloorright)

其中boldsymbol{O}_{k} 是偏移量,x_{k}y_{k} 是角k的x和y坐标。特别地,我们预测了所有类别的左上角共享的一组偏移量,以及右下角共享的另一组偏移量。对于训练,我们在地面真实角位置应用平滑L1 Loss:

L_{o f f}=frac{1}{N} sum_{k=1}^{N} operatorname{SmoothL1operatorname{Loss}(boldsymbol{o}_{k},hat{boldsymbol{o}}_{k})}

3.3、分组角点

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

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

我们遵循Newell等人(2017)的方法,使用一维嵌入。设e_{t_{k}} 为目标k左上角的嵌入,e_{t_{k}} 为目标k右下角的嵌入。正如Newell和Deng(2017)所述,我们使用“拉”损失来训练网络对角落进行分组,使用“推”损失来分隔角落:

begin{aligned} L_{p u l l} &=frac{1}{N} sum_{k=1}^{N}left[left(e_{t_{k}}-e_{k}right)^{2} left(e_{b_{k}}-e_{k}right)^{2}right] \ L_{p u s h} &=frac{1}{N(N-1)} sum_{k=1}^{N} sum_{j=1 atop j neq k}^{N} max left(0, Delta-left|e_{k}-e_{j}right|right) end{aligned}

式中e_ke_{tk}e_{bk} 的平均值,我们在所有实验中设∆为1。类似于偏移损失,我们只应用在地面真实角位置的损失。

3.4、角点池化

如图2所示,经常没有局部的视觉证据表明角落的存在。为了确定一个像素是否为左上角,我们需要水平地看向右侧的目标的顶部边界,垂直地看向底部的目标的最左侧边界。因此,我们提出了角池,通过编码显式的先验知识来更好地定位角。假设我们想要确定位置(i,j) 是左上角。设f_tf_l 为左上角池化层的输入特征映射,设f_{t_{ij}}f_{l_{ij}} 为分别在f_tf_l 在位置(i,j) 处的向量。对于H × W特征映射,角落池化层首先最大池化(i,j)(i,H) 到一个特征向量t_{ij} ,并在(i,j)(W,j) 到特征向量l_{ij} 。最后,将t_{ij}l_{ij}

加在一起。这种计算可以用以下公式表示:

这里我们应用了一个elementwise Max操作。动态规划可以有效地计算t_{ij}l_{ij} ,如图8所示。

我们以类似的方式定义右下角的池化层。它将(0,j)和(i, j)之间的所有特征向量,以及(i, 0)和(i, j)之间的所有特征向量最大池化,然后再添加池化结果。在预测模块中使用角池层来预测热图、嵌入和偏移量。预测模块结构如图7所示。模块的第一部分是残差块的修正版本(He et al., 2016)。在这个改进的残差块中,我们将前3 × 3卷积模块替换为角池化模块,该模块首先对骨干网络的特征进行两个3 × 3卷积模块1的128通道处理,然后应用角池化层。根据残差块的设计,我们将集合后的特征输入到具有256通道的3×3 convn - bn层,并将投影快捷方式添加回来。修改后的残差块后面是一个3×3卷积模块,具有256个通道和3个Conv-ReLU-Conv层,以产生热图、嵌入和偏移。

3.5、沙漏网络

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

我们的沙漏网络由两个沙漏组成,我们对沙漏模块的架构做了一些修改。我们简单地使用stride 2来降低特征分辨率,而不是使用max pooling。我们将特征分辨率降低了5倍,同时增加了特征通道的数量(256,384,384,384,512)。当我们对特征进行上采样时,我们使用2个残差模块,然后使用最近邻上采样。每个跳跃连接还包括2个剩余模块。在一个沙漏模块中间有4个剩余的512通道模块。在使用沙漏模块之前,我们将图像分辨率降低了4倍,使用7 × 7卷积模块(步幅2和128通道),然后使用步幅2和256通道的残块。

之后(Newell et al., 2016),我们还在训练中增加了中间监督。但是,我们没有将中间预测添加回网络中,因为我们发现这会损害网络的性能。我们对第一个沙漏模的输入和输出都应用一个1 × 1的convn - bn模。然后,我们通过元素加法将它们合并,然后是ReLU和带有256个通道的剩余块,然后将其用作第二个沙漏模块的输入。沙漏网络的深度是104。与许多其他最先进的检测器不同,我们只使用整个网络最后一层的特征来进行预测。

4、实验

4.1、训练细节

我们在PyTorch中实现了CornerNet。网络是在PyTorch的默认设置下随机初始化的,不需要对任何外部数据集进行预训练。当我们应用焦损失时,我们遵循在卷积层中设置预测角落热图的偏差。在训练过程中,我们将网络的输入分辨率设置为511 × 511,输出分辨率为128 × 128。为了减少过拟合,我们采用了标准的数据增强技术,包括随机水平翻转、随机缩放、随机裁剪和随机颜色抖动,其中包括调整图像的亮度、饱和度和对比度。最后,我们将PCA应用于输入图像。我们使用Adam 来优化全部训练损失:

式中,α、β、γ分别为拉力损失、推力损失和偏置损失的权重。我们设α和β为0.1,γ为1。我们发现α和β值大于或等于1会导致性能较差。我们使用49个批量大小,并在10个Titan X (PASCAL) GPU上训练网络(主GPU上有4个图像,其余GPU上有5个图像)。为了节约GPU资源,在我们的消融实验中,我们以2.5 × 10−4的学习速率训练网络,进行250k次迭代。当我们将我们的结果与其他检测器进行比较时,我们训练网络进行额外的250k迭代,并在最后50k迭代中将学习率降低到2.5 × 10−5。

4.2、测试细节

在测试过程中,我们使用一个简单的后处理算法从热图、嵌入和偏移生成边界框。我们首先应用非最大抑制(NMS),在角落热图上使用3×3最大池化层。然后我们从热点图中选择最左上角和最右下角的100个。角点位置由相应的偏移量进行调整。我们计算左上角和右下角的嵌入之间的L1距离。距离大于0.5或包含来自不同类别的角的对将被拒绝。以左上角和右下角的平均得分作为检测得分。我们没有将图像调整为固定大小,而是保持图像的原始分辨率,并在将其输入CornerNet之前用零填充它。原始和翻转的图像都用于测试。我们结合了原始图像和翻转图像的检测,并应用软件网管(Bodla et al., 2017)来抑制冗余检测。只有前100名的检测报告。Titan X (PASCAL) GPU上的每张图像平均推断时间为244ms。

4.3、MSCOCO

我们在非常具有挑战性的MS COCO数据集上评估了街角网(Lin等人,2014)。MS COCO包含80k图像用于训练,40k图像用于验证,20k图像用于测试。训练集中的所有图像和验证集中的35k图像用于训练。验证组剩余5k图像用于超参数搜索和消融研究。测试集上的所有结果都被提交到外部服务器进行评估。为了与其他检测器进行公平的比较,我们报告了测试开发集上的主要结果。MS COCO使用不同iou的平均精度(ap)和不同目标大小的ap作为主要的评估指标。

4.4、消融研究

4.4.1、Corner池化

角池是角网的一个关键组件。为了理解它对性能的贡献,我们用相同数量的参数训练另一个没有角池的网络。表1显示,添加角池带来了显著的改进:AP上2.0%,AP50上2.1%,AP75上2.1%。我们还发现,角池对中型和大型对象特别有帮助,它们的ap分别提高了2.4%和3.6%。这是意料之中的,因为中型和大型对象的最上面、最下面、最左边、最右边的边界可能离角落位置更远。图8显示了四个有角池和没有角池的定性例子。

4.4.2、大区域上Corner池化的稳定性

在图像的不同象限的不同面积的角落池池。例如,与右下象限相比,左上角的池池覆盖了图像左上象限中更大的水平和垂直区域。因此,转角的位置可能会影响转角池的稳定性。我们评估了我们的网络在检测图像的不同象限的左上角和右下角的性能。检测角落可以看作是一个二元分类任务,即一个角落的地面真相位置是正的,任何位置的小半径的角落是负的。我们使用MS COCO验证集上所有类别的map来度量性能。

4.4.3、负位置减少惩罚

我们在由物体大小决定的半径范围内,减少对正位置周围负位置的惩罚(第3.2节)。为了理解这如何帮助训练拐角网,我们训练一个没有惩罚减少的网络和另一个固定半径为2.5的网络。我们将它们与街角网在验证集上进行比较。表2显示,固定半径使AP比基线提高2.7%,APm提高1.5%,APl提高5.3%。物体相关半径进一步提高AP 2.8%, APm 2.0%和APl 5.8%。另外,我们看到减刑尤其有利于大中型目标。

4.4.4、沙漏网络

CornerNet使用沙漏网络作为骨干网络。由于沙漏网络在其他先进的检测器中并不常用,我们做了一个实验来研究在拐角网络中沙漏网络的贡献。我们训练了一个角网,用FPN (w/ ResNet-101) 代替沙漏网络,FPN在最先进的物体检测器中更常用。我们只使用FPN的最终输出进行预测。同时,我们训练了一种以沙漏网络为骨干的基于锚框的检测器。在上采样阶段,每个沙漏模块利用多尺度特征预测多个分辨率下的锚框。我们遵循了RetinaNet中的锚框设计,在训练过程中增加了中间监督。在这两个实验中,我们从零开始初始化网络,并遵循与训练角网相同的训练过程(第4.1节)。从表4中可以看出,采用沙漏网络的CornerNet比采用FPN的CornerNet的AP性能高出8.2%,采用沙漏网络的基于锚盒的检测器的AP性能高出5:5%。结果表明,骨干网络的选择很重要,而沙漏网络对CornerNet的性能至关重要。

从表4中可以看出,采用沙漏网络的CornerNet比采用FPN的CornerNet的AP性能高出8.2%,采用沙漏网络的基于锚框的检测器的AP性能高出5.5%。结果表明,骨干网络的选择很重要,而沙漏网络对CornerNet的性能至关重要。

4.4.5、包围框的质量

一个好的检测器应该预测高质量的包围盒,紧紧覆盖物体。为了理解拐角网预测的包围框的质量,我们评估拐角网在多个IoU阈值下的性能,并将结果与其他先进的检测器进行比较,包括RetinaNet、Cascade R-CNN和拐角网。表5显示,在0.9 IoU时,CornerNet比其他检测器实现了更高的AP,比Cascade R-CNN IoU- net高出3.9%,比Cascade R-CNN高出7.6%,比RetinaNet 2高出7.3%。这表明,与其他先进的检测器相比,街角网能够生成更高质量的边界框。

4.4.6、误差分析

街角网同时输出热图、偏移量和嵌入,所有这些都会影响检测性能。如果任何一个角被遗漏,那么一个对象就会被遗漏;需要精确的偏移量来生成紧密的边界框;不正确的嵌入会导致许多错误的边界框。为了理解每个部分是如何导致最终误差的,我们通过用真实值替换预测的热图和偏移量并评估验证集上的性能来进行误差分析。表6显示,单独使用ground-truth corner heatmaps将AP从38.4%提高到73.1%。ap、APm和APl分别增加42.3%、40.7%和30.0%。如果我们用ground-truth offset替换预测的offset, AP将进一步增加13.0%至86.1%。这说明虽然角点检测和角点分组都有很大的改进空间,但主要的瓶颈是角点检测。图9显示了一些定性的例子,其中角位置或嵌入是不正确的。

4.5、和SOTA比较

我们比较了在MS COCO测试开发上的其他最先进的检测器(表7)。通过多尺度评估,CornerNet实现了42.2%的AP,这是现有的单阶段方法中最先进的,与两阶段方法不相上下。

5、结论

我们提出了一种新的目标检测方法,即检测边界框为对角。我们评估街角网的MS COCO和展示竞争结果。

0 人点赞