CornerNet论文阅读整理

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

原文链接:https://arxiv.org/abs/1808.01244

代码链接: https://github.com/princeton-vl/CornerNet

摘要

    我们提出了CornerNet,这是一种新的目标检测方法,我们使用一个卷积神经网络将一个目标边界框检测视为一对关键点左上角和右下角。通过将目标检测看作成对的关键点,我们消除了设计一组Anchor boxes的需要,该Anchor boxes通常用于以前的单阶段检测器。除了我们的新方案之外,我们还引入了corner pooling,这是一种新型的池化层,可以帮助网络更好地定位Corners。实验表明,CornerNet在MS COCO数据集上获得了42.2%的AP,超过了所有现有的单阶段检测器。

引言

    基于卷积神经网络的目标检测器(ConvNets)已经在各种具有挑战性的基准上取得了最先进的结果。现有技术方法的一个共同组成部分是anchor boxes,它们是各种尺寸和纵横比的boxes,用作检测候选目标。 Anchor boxes广泛用于单阶段探测器,它们可以获得与两阶段探测器极具竞争力的结果,同时效率更高。 单阶段探测器将Anchor boxers密集地放置在图像上,通过对anchor boxes进行评分和回归来改进其坐标来生成最终的boxes预测。
    但anchor boxes的使用有两个缺点首先,我们通常需要一组非常大anchor boxes,例如: DSSD超过4万,RetinaNet超过10万。 这是因为探测器被训练以分类每个anchor box是否与ground truth框充分重叠,并且需要大量acnhor boxes以确保与大多数ground truth框充分重叠。 结果,只有一小部分anchor boxes与ground thrth重叠; 这在正负anchor boxes之间造成了巨大的不平衡,并减缓了训练速度。
    其次,anchor boxes的使用引入了许多超参数和设计选择。这些包括boxes的数量,尺寸,和长宽比。这样的选择很大程度上是通过自组织启发法做出的,当与多尺度体系结构相结合时,情况会变得更加复杂。在多尺度体系结构中,单个网络对多个分辨率特征图做出单独的预测,每个尺度使用不同的特征和自己的一组anchor boxes。
    在本文中,我们介绍了CornerNet,这是一种新的单阶段目标检测方法,可以消除anchor boxes。 我们将一个目标检测视为一对关键点即边界框的左上角和右下角。 我们使用单个卷积网络来预测同一目标类别的所有实例的所有左上角的热力图右下角的热图以及每个检测到的Corner的嵌入向量。 embedings用于对属于同一目标的一对corners进行分组|训练网络以预测它们的相似embedings。 我们的方法极大地简化了网络的输出,并且无需设计anchor box。 我们的方法受到Newell等人提出的关联嵌入方法的启发,在多人人体姿势估计的背景下检测和分组关键点。 图1说明了我们方法的整体流程。

图一 我们将检测目标作为一对组合在一起的box Corner。卷积网络输出所有左上角的热图,所有右下角的热图,以及每个检测到的Corner的嵌入向量。该网络被训练以预测属于同一目标Corner的相似嵌入。


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

 图二 通常没有本地证据来确定边界框corner的位置。 我们通过提出一种新的池化层来解决这个问题。

图三 corner pooling: 对于每个channel,我们取两个方向(红线)的最大值(红点),两个值分别来自两个特征图,然后把两个最大值相加(蓝点)。
    我们假设检测Corner比边界框中心或proposal更好地工作的两个原因。 首先,box的中心可能更难以定位,因为它取决于目标的所有4个边,而定位角取决于2边,因此更容易,甚至利用Corner pooling定位更多的Corners,它定义编码一些明确的关于corner的先验知识。 其次,corner提供了一种更有效的方式来密集离散boxe的空间:我们只需要O(wh)个Corner来代表O(w^2*h^2)个可能的anchor boxers。
    我们证明了CornerNet对MS COCO数据集的有效性(Lin et al., 2014)。CornerNet达到了42.2%的AP,超过了所有现有的单阶段检测器。此外,通过消融研究,我们表明Corner pooling对CornerNet的优越性能至关重要。代码可以在https://github.com/princeton -vl/CornerNet上找到。

相关工作

2.1 两阶段目标检测器 

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

 

2.2 单阶段目标检测器

    另一方面,YOLO 和SSD推广了单阶段算法,即去除RoI池化步骤,在单个网络中检测目标。单阶段检测器通常比两阶段检测器计算效率更高,同时在不同的具有挑战性的基准上保持竞争性能。
    SSD将anchor boxes密集地放置在多个尺度的特征图上,直接对每个anchor boxes进行分类和细化。YOLO直接从图像中预测边界框坐标,后来在YOLO9000 中通过交换anchor boxes进行了改进。DSSD 和RON 采用了类似于沙漏网络的网络结构,通过跳跃连接将低层和高层特征结合起来,从而更准确地预测边界框。然而,直到RetinaNet的引入,这些单阶段检测器的性能仍然优于两阶段检测器。In (Lin et al., 2017)中,作者认为密集的anchor boxes在训练过程中造成正负anchor boxes的巨大不平衡。这种不平衡导致训练效率低下,从而导致表现不佳。他们提出了一种新的损失,focal loss,动态调整每个anchot boxes的权重,并表明他们的单阶段探测器可以超过两阶段探测器的性能。RefineDet提出对anchor box进行过滤,减少负boxes的数量,并对anchot boxes进行粗调。
    DeNet是一种两阶段探测器,无需使用anchor boxes即可生成roi。它首先确定每个位置属于边框左上角、右上角、左下角或右下角的可能性。然后,它通过列举所有可能的corners组合生成RoIs,并遵循标准的两阶段方法对每个RoI进行分类。我们的方法与DeNet非常不同。首先,DeNet不确定两个corners是否来自同一个目标,而是依赖子检测网络来拒绝较差的rois。相比之下,我们的方法是单阶段的方法,检测和分组corners使用一个卷积网络。其次,DeNet在相对于一个区域的手工确定的位置上选择特征进行分类,而我们的方法不需要任何特征选择步骤。第三,引入corner pooling,一种新型的增强corner检测的层。

    点连接网络(PLN)是一种没有anchor box的单阶段检测器。它首先预测一个边界框的四个角和中心的位置。然后,在每个corner的位置,它预测图像中的每个像素位置是中心的可能性。同样,在中心位置,它预测每个像素位置属于左上角、右上角、左下角或右下角的可能性。它将来自每个corner和中心对的预测组合在一起,生成一个边界框。最后,它将四个bounding boxes合并为一个bounding box。CornerNet与PLN有很大的不同。首先,CornerNet通过预测嵌入向量对corners进行分组,而PLN通过预测像素位置对corner和中心进行分组。其次,CornerNet使用corner pooling来更好地定位corners。

    我们的方法受到Newell等人的启发,他们研究多人姿势估计的背景下的关联嵌入。Newell等人提出了一种在单个网络中检测和分组人类关节的方法。在他们的方法中,每个被检测到的人体关节都有一个嵌入向量。节点是根据它们之间的嵌入距离分组的。据我们所知,我们是第一个将目标检测任务表述为利用embedings来检测和分组corners的任务。我们的另一个新奇之处是corner pooling 层,它可以帮助更好地定位corners。我们还对沙漏结构进行了重大修改,并增加了focal loss的新变种(Lin et al., 2017),以帮助更好地训练网络。

3 CornerNet 

3.1  综述

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

图四  CornerNet的概述。Backbone后面有两个预测模块,一个用于左上角,另一个用于右下角。使用模块的预测结果,我们定位和分组corners。

    图4提供了CornerNet的概述。我们使用沙漏网络作为CornerNet的backbone网络。沙漏网络之后是两个预测模块。一个模块用于左上角,另一个模块用于右下角。在预测热图、embeding和offsets之前,每个模块都有自己的corner pooling模块来从特征图中进行pooling操作。与许多其他目标检测器不同,我们不使用来自不同尺度的特征来检测不同大小的目标(即没有采用FPN)。我们只将这两个模块应用于沙漏网络的输出。

3.2 检测corners

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

    对于每个corner,有一个ground truth正位置,所有其他位置都为负。 在训练期间,我们减少对正位置半径内的负位置给予的惩罚,而不是同等地惩罚负位置(即对负位置的惩罚较小)。 这是因为如果一对false corners探测器靠近它们各自的ground truth位置,它仍然可以产生一个与groudn truth boxes充分重叠的boxes(图5)。 我们通过确保半径内的一对点将生成一个具有最少ground truth标注的IoU的边界框(我们在所有实验中将t设置为0.3)来确定半径与目标的大小。 给定半径,通过一个非标准化的2D高斯函数:来减少惩罚量,其中心位于正位置,σ是半径的1/3。

图五 用于训练的“ground truth”. 盒子(绿色点矩形)的corners在正位置的半径内(橙色圆圈)仍然与groundtruth标注(红色实心矩形)有很大的重叠。

    设为位置(i,j)处的预测热图中类别为c的得分,为用未归一化高斯增广的“groundtruth”热图。我们设计了一种focal loss的变种:

    其中N是图像中目标的数量,α和β是控制每个点贡献的超参数(在所有实验中我们将α设置为2,β设置为4)。 利用中编码的高斯凸起,项减少了ground truth位置周围的惩罚。

    许多网络涉及到下采样层来收集全局信息并减少内存使用。当它们应用于全卷积的图像时,输出的特征图大小通常小于图像。因此,将图像中的位置(x, y)映射到heatmap中的位置([x/n],[y/n]),其中n为下采样因子。当我们将热图中的位置重新映射到输入图像时,可能会丢失一些精度,这将极大地影响带有ground truth的小边界框的IoU。为了解决这个问题,我们预测位置偏移来稍微调整corner位置,然后再将它们重新映射到输入分辨率。

    其中Ok为偏移量,xk和yk为corner k的x和y坐标,我们特别预测了所有类别的左上角共享一组偏移量,右下角共享另一组偏移量。对于训练,我们在ground-truth corner处使用smooth L1 Loss (Girshick, 2015): 

3.3 分组corners

    图像中可能出现多个目标,因此可以检测到多个左上角和右下角。我们需要确定一对左上角和右下角是否来自同一个边框。我们的方法受到Newell等人(2017)提出的用于多姿态估计任务的联想嵌入方法的启发。Newell等人检测所有的人类关节,并为每个检测到的关节生成一个嵌入。他们根据embedings之间的距离对关节进行分组。
    关联嵌入的思想也适用于我们的任务。 网络预测每个检测到的corner的嵌入向量,使得如果左上角和右下角属于同一个边界框,则它们的embedings之间的距离应该很小。 然后,我们可以根据左上角和右下角embedings之间的距离对corners进行分组。 embedings的实际值并不重要。 仅使用embedings之间的距离来对corners进行分组。

    我们遵循Newell等人的方法,使用一维embeding。设为目标 k 的左上角的embeding,为目标 k 的右下角的embeding。就像Newell和Deng(2017)一样,我们使用“pull” loss来训练网络对各个corners的分组,使用“push” loss来分离各个corner:


    其中的平均值,我们在所有实验中将Δ设置为1。 与offset loss类似,我们仅在ground truth位置应用损失。

 

3.4 corner pooling

    如图2所示,通常没有局部的视觉证据表明corners的存在。要确定一个像素是否为左上角,我们需要水平地向右查看目标的顶部边界,垂直地向下查看左侧边界。因此,我们建议通过编码显式先验知识来更好地对corners进行定位。

    假设我们想确定位置(i, j)处的像素是否为左上角。设为左上角corner pooling输入的feature map,分别为中位置(i, j)处的向量。在H×W 的feature map中,corner pooling首先将中最大池化(i, j)和(i, H)之间的所有特征向量得到一个特征向量, 然后在中,最大池化从(i, j)到(W, j)之间的所有特征向量,得到一个特征向量。最后,将相加。计算公式如下:

这里我们采用元素最大化操作。 都可以通过动态规划有效地计算,如图8所示。

图八  左上角corner pooling层可以非常有效地实现。我们从右到左进行最大池化水平扫描,从下到上进行最大池化垂直扫描。然后把两个最大池化特征图相加。

    我们以类似的方式定义右下角池化层。 在池化结果相加之前,它最大池化(0,j)和(i, j)之间的所有特征向量,(i,0)和(i, j)之间的所有特征向量。 corner pooling层用于预测模块中以预测heatmaps,embdfings和offsets。

图七  预测模块从一个修改后的残差块开始,其中我们用corner pooling模块替换第一个卷积模块。修改后的残差块后面是卷积模块。我们有多个分支来预测热图、嵌入和偏移量。

    预测模块的结构如图7所示。模块的第一部分是残差块的修改版本。在这个修改后的残差块中,我们将前一个3×3卷积模块替换为一个corner  pooling模块,该corner pooling模块首先用两个128 channels 的3×3卷积模块处理来自主干网的特征,然后应用corner pooling层。跟随残差模块的设计,我们将合并后的特征输入到一个3×3的Conv-BN层,该层有256个通道,并向后加上映射shotcut。修改后的残差块后面是一个具有256通道的3×3卷积模块和3个Conv- ReLU - Conv层来生成heatmaps、embedings和offsets。

3.5 漏斗网络

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

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

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

4 实验

4.1 训练细节

  我们用PyTorch中实现了CornerNet。网络是在PyTorch的默认设置下随机初始化的,没有额外的数据集进行预训练。当我们应用focal loss时,我们遵循(Lin et al., 2017)设置预测heatmaps卷积层中的偏差。在训练中,我们将网络的输入分辨率设置为511×511,输出分辨率为128×128。为了减少过拟合,我们采用标准的数据增强技术,包括随机水平翻转随机缩放随机裁剪随机颜色抖动,包括调整图像的亮度饱和度对比度。最后,我们对输入图像应用PCA (Krizhevsky et al., 2012)。
我们使用Adam(Kingma和Ba,2014)进行优化全部训练损失:

    其中α,β和γ分别是pull,push和offset损失的权重。 我们将α和β都设置为0.1,将γ设置为1。我们发现1和更大的α和β值会导致性能不佳。 我们batch size为49并在10个Titan X(PASCAL)GPU上训练网络(主GPU上的4个图像,其余GPU的每个GPU 5个图像)。 为了节省GPU资源,在我们的消融实验中,我们训练网络进行250k次迭代,学习率为2.5×10-4。 当我们将结果与其他探测器进行比较时,我们会对网络进行额外的250k迭代训练,并在最近的50k迭代中将学习速率降低到2.5×10-5。

4.2 测试细节

    在测试过程中,我们使用一个简单的后处理算法从heatmaps、embedings和offset生成边界框。我们首先在corner heatmaps上用一个3*3的最大池化进行非最大抑制(NMS)。然后我们从热图中选择前100个左上角和前100个右下角。corners的位置由相应的偏移量来调整。我们计算了左上角和右下角embedings点之间的L1距离。距离大于0.5或包含来自不同类别的cornets对将被拒绝。使用左上角和右下角的平均分数作为检测分数。
    我们不是将图像大小调整为固定大小,而是保持图像的原始分辨率,并在将其提供给CornerNet之前用0填充它。 原始图像和翻转图像都用于测试。 我们结合原始图像和翻转图像的检测结果,并应用soft-nm来抑制冗余检测。 仅报告前100个检测项。 Titan X(PASCAL)GPU上每张图像的平均推断时间为244毫秒。

实验结果

表1 MS COCO验证集的corner pooling消融

表2 减少对正位置附近的负位置的惩罚有助于显著提高网络的性能

 表3 corner pooling在检测不同图像象限的corners时,能不断提高网络性能,表明corner pooling在小区域和大区域都是有效和稳定的。

 

表4  漏斗网络对CornerNet的性能很重要

表5  与其它最好的检测器相比,CornerNet在高IoU情况下表现更好

表6  误差分析。我们用ground truth值替换预测的热图和偏移量。仅使用ground truth热图就可以将AP从38.4%提高到73.1%,这表明CornerNet的主要瓶颈是检测corners。

  • 16
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值