文章目录
摘要
本文:
(1)CornerNet——新的目标检测方法,利用单个卷积神经网络来检测一个以左上角和右下角为一对关键点的目标边界框。通过将目标作为成对的关键点进行检测,消除了以往单阶段检测器通常需要设计一套anchor boxes的需要。
(2)设计corner pooling,一种新型的池化层,帮助网络更好地定位角点。
结果:
实验表明,CornerNet对MS COCO的AP达到42.2%,优于现有的单阶段检测器。
1 引言
目标检测研究现状:
基于卷积神经网络(ConvNets)的目标检测器在各种具有挑战性的基准上取得了最先进的结果。最先进的方法的一个常见组件是锚框(anchor boxes)——用于检测候选区域的不同尺寸和长宽比的框。锚框被广泛应用于单阶段检测器中,可以实现与两阶段检测器相竞争的检测结果,但更高效,单阶段检测器将锚框密集地放置在图像上,通过对锚框评分和通过回归细化锚框坐标来生成最终预测边界框。
锚框(anchor boxes)的缺点:
(1)需要大量锚框:(在DSSD中超过40k,在RetinaNet中超过100k )因为目标检测器被训练分类每个锚框是否与一个GT(真值框)有足够的重叠,因此网络需要大量的先验锚框来确保与大多数GT有足够的重叠,导致只有一小部分锚框会与GT重叠,正锚框和负锚框数量存在巨大不平衡,不经影响检测精度还减慢了训练速度。
(2)锚盒的使用引入许多超参数和设计选择: 包括先验锚框的数量、尺寸和长宽比。这些选择很大程度上是通过特别的启发式方法做出的,当与多尺度体系结构相结合时,可能会变得更复杂,多尺度体系结构中,单个网络在多个分辨率下做单独的预测,每个尺度使用不同的特征和自己的锚框集。
本文:
(1)提出CornerNet,一种新的消除锚框的单阶段目标检测方法。检测每个目标为一对关键点——边界框的左上角点和右下角点;使用单一卷积网络,为同一目标类别的所有实例的左上角预测一个热图、右下角预测一个热图、每个检测到的角点的嵌入向量(作用是将属于同一目标的一对角点分组,训练网络为属于同一目标的两个角点预测相似的嵌入向量);CornerNet简化了网络的输出,消除了设计锚框的需要;(本文方法受到Newell等人提出的关联嵌入方法的启发,该方法在多人体姿态估计的背景下检测和分组关键点)图1CornerNet总体流程。
(2)CornerNet设计corner pooling层: 一种新型池化层,帮助卷积网络更好地定位边界框的角。边界框的角点通常在物体之外(如图2)无法根据局部证据定位角,相反要确定某像素位置是否为边界框左上角,需要水平向右查看目标的最高边界,垂直向下查看目标的最左边界。这激发了本文设计corner pooling层:包含两个特征图 ,在每个像素位置,从第一个特征图所有特征向量max-pool到右边,将第二个特征图的所有特征向量max pool到正下方,然后将两个池化后的结果相加。(如图3)
为什么检测角点会比直接检测边界框中心/提案更好?
(1)边界框的中心更难定位:因为它取决于目标的所有4个边,而定位一个角点仅取决于两个边,因此更容易,对于corner pooling更是如此,它编码关于角点定义的一些明确的先验知识。
(2)角点提供了一种更有效的密集离散框空间的方法:只需要O(wh)角来表示O(w2h2)个可能的锚盒。
结果:
CornerNet在MS COCO上mAP达到42.2%,优于所有现有的单阶段检测器。此外通过消融研究,表明corner pooling是CornerNet优越性能的关键。网络代码:https://github.com/princeton-vl/CornerNet
2 相关工作
2.1 两阶段检测器
(1)R-CNN: 提出并推广两阶段检测算法。两阶段检测器生成感兴趣区域(ROI)的稀疏集合,并通过网络对每个ROI进行分类。R-CNN使用低层次视觉算法生成ROI,然后从图像中提取每个ROI,并由卷积网络独立处理,产生大量冗余计算。
(2)SPP和Fast R-CNN : 改进R-CNN,设计特殊的池化层,将每个ROI从特征图中池化。然而它们仍依赖于单独的提案生成算法,不能进行端到端的训练。
(3)Faster-RCNN: 引入区域提案网络(RPN)取代低级提案算法,从一组预先设定的候选框——锚框产生提案。不仅使检测器更有效率,而且允许对检测器进行端到端训练。
(4)R-FCN: 将全连接的子检测网络替换为全卷积的子检测网络,进一步提高了Faster-RCNN的效率。
(5)其他研究: 关注于合并子类别信息、在多尺度上生成具有更多上下文信息的对象建议、选择更好的特征、提高速度、级联流程和更好的训练流程
2.2 单阶段检测器
单阶段检测器:
YOLO和SSD推广了单阶段方法,该方法去除RoI池化步骤,在单一网络中检测目标。单阶段检测器通常比两阶段检测器的计算效率高,同时在不同的具有挑战性的基准测试中保持有竞争力的表现。
(1)SSD: 在多个尺度的特征图上密集地放置锚框,直接分类和细化每个锚框。
(2)YOLO: 直接从图像预测边框坐标
(3)YOLO9000: 通过利用锚框对YOLO进行了改进。
(4)DSSD 和RON : 采用类似于沙漏网络的网络,使他们能够通过跳过连接结合低级特征和高级特征,更准确地预测边界框。
上述单阶段检测器的性能低于两阶段检测器。
(5)RetinaNet : 作者认为密集的锚框在训练过程中造成了正锚框和负锚框存在严重数量不平衡,导致训练效率低下,因此性能不佳。因此该算法提出了一种新的损失——focal损失,来动态调整每个锚框的权重,使得单阶段检测器能够优于两阶段检测器。
(6)RefineDet: 提出过滤锚框减少负锚框的数量,并对锚框进行粗略调整。
2.3 anchor free的检测器
(1)DeNet: 一种两阶段检测器,无需使用锚框即可产生ROI。首先确定每个位置属于边界框左上角、右上角、左下角或右下角的可能性有多大;然后通过列举所有可能的角组合来生成RoI,并遵循标准的两阶段方法对每个RoI进行分类。
本文方法与DeNet很不同:
①DeNet不识别两个角是否来自同一目标,并依靠子检测网络来拒绝较差的ROI;本文是一个单阶段的方法,使用一个单一的卷积网络检测和分组角。
②DeNet在相对于一个区域的人工确定的位置上选择特征进行分类;本文方法不需要任何特征选择步骤。
③本文引入了corner pooling,一种新的增强角点检测的层。
(2)PLN: 一种没有锚框的单阶段检测器。首先预测四个角的位置和一个边界框的中心;然后在每个角位置,它预测图像中每个像素位置是中心的可能性。在中心位置,它预测图像中每个像素位置属于左上角、右上角、左下角或右下角的可能性,结合来自每个角落和中心对的预测来生成一个边界框;最后合并四个边界框以得到一个边界框。
本文方法与PLN非常不同:
①本文通过预测嵌入向量对角进行分组,PLN通过预测像素位置为角和中心进行分组。
②本文使用corner pooling更好地定位角。
(3)ConerNet本文: 受到Newell 在多人姿态估计背景下的关联嵌入的启发,Newell等人提出一种在单一网络中检测和分组人类关节的方法,每个检测到的人体关节都有一个嵌入向量,根据嵌入向量之间的距离对关节进行分组。本文创新点:
①第一个将目标检测定义为嵌入向量的角点检测和分组;
②另一个新奇之处是corner pooling层,有助于更好地定位角点;
③对沙漏结构进行了显著的修改,添加新型focal损失,以帮助更好地训练网络。
3 CornerNet
3.1 概述
CornerNet中,将一个目标检测为一对关键点——边界框的左上角和右下角。
ConerNet预测输出:
①网络预测两组热图: 来表示不同目标类别的角位置,一组用于左上角,另一组用于右下角。
②网络还预测了每个检测到的角的嵌入向量: 来自同一目标的两个角的嵌入向量之间的距离很小。
③网络还预测偏移量:,以轻微调整角落的位置,产生更紧密的边框。
利用预测的热图、嵌入和偏移量,应用一个简单的后处理算法来获得最终的边界框。
ConerNet网络结构:
图4 提供了ConerNet的概述。CornerNet的骨干网络为沙漏网络;沙漏网络之后是两个预测模块(一个模块用于左上角,另一个模块用于右下角),每个模块都有自己的corner pooling模块,在预测热图、嵌入和偏移量之前,从沙漏网络中池化特性。
与许多其他的目标检测器不同,不使用来自不同尺度的特征来检测不同大小的物体,只将这两个模块应用于沙漏网络的输出。
3.2 检测角点
CornerNet预测两组热图(一组用于左上角,一组用于右下角),每组热图有C个通道(无背景通道),C为类别数,大小为H ×W。每个通道是一个二进制掩码,表示某类的角的位置。
角点损失:
(1)惩罚减少量:对于每个角点,都有一个GT正位置,所有其他位置都是负的。在训练过程中,减少对正位置半径内的负位置的惩罚,而不是同等惩罚所有负位置。因为一对错误的角点如果接近各自GT位置,仍可产生一个与GT充分重叠的边界框(图5)。通过目标的大小来确定半径,方法是确保半径内的一对点能够产生与GT至少有t IoU重叠度的边界框(本文所有实验中设置t 为0.3)。给定半径,惩罚减少量由非标准化二维高斯函数给出,,中心点为正位置,σ为半径的1/3。
(2)角点损失:pcij为预测热图中位置(i, j)处c类别的分数,ycij为加了非归一化高斯的“GT”热图。角点损失为一种focal损失的变体:
其中N为图像中目标的数量,α和β为控制每个点贡献的超参数(在所有实验中α设为2,β设为4)。用高斯编码的ycij,(1−ycij)项减少了GT位置周围的惩罚。
偏移损失:
(1)预测偏移的原因::许多网络使用下采样层,以收集全局信息和减少内存使用,当它们被应用于图像时往往产生比图像小的输出。图像中的一个位置(x, y)在热图中被映射为,n为下采样因子。当把热图的位置重新映射到输入时,可能会丢失一些精度,这将极大地影响GT小边界框的IoU。
(2)预测位置偏移量:将热图位置重新映射到输入分辨率之前,稍微调整角的位置。
其中ok为偏移量,xk和 yk为角k的x坐标和y坐标。特别地,我们预测一个由所有类别的左上角共享的偏移,和另一个由右下角共享的偏移。为了进行训练,将平滑L1损失应用于GT角点位置:
3.3 分组角点
分组角点的原因:
图像中可能出现多个目标,因此可以检测到多个左上角和右下角。需要确定一对左上角和右下角是否来自同一个边界框。
分组角点方法的启发:
本文方法受到Newell等人为多人姿态估计任务提出的关联嵌入方法的启发。Newell等人检测所有的人体关节,并为每个检测到的关节生成一个嵌入,根据嵌件之间的距离对关节进行分组。嵌入的思想也适用于本文任务
角点分组:
(1)原理: 网络预测每个检测到的角的嵌入向量,如果一个左上角和一个右下角属于同一个边界框,那么它们之间的嵌入向量的距离应该是是小的。根据左上角和右下角嵌入的距离对检测到的角进行分组。嵌入的实际值并不重要,仅使用嵌入之间的距离来分组角。
(2)嵌入损失:我们遵循Newell等人使用一维嵌入。设etk为目标k的左上角嵌入,ebk为目标k的右下角嵌入。用“pull”的损失来训练网络来分组角,用“push”的损失来分离角落:
其中ek为etk和 ebk的平均值,在所有实验中设∆为1。类似于偏移损失,只在GT角位置应用损失。
3.4 角点池化
角的存在通常没有局部的视觉证据。要确定一个像素是否为左上角,需要水平向右查看目标的最高边界,垂直向下查看目标的最左边界。因此本文提出Corner Pooling,通过编码明确的先验知识来更好地定位角。
corner pooling层:如图6
(1)左上corner pooling层: 想要确定位置(i, j)上的一个像素是否是左上角。设ft和 fl为左上corner pooling层输入特征图,ftij 和flij 分别为ft和 fl特征图中位置(i, j)的向量。对于H × W的特征图,corner pooling层首先max-pool ft中(i, j)到(i, H)之间的所有特征向量为特征向量tij, max-pool fl中(i, j)到(W, j)之间的所有特征向量为特征向量lij,最后将tij和 lij相加,公式如下:
max为elementwise操作。
(2)右下corner pooling层: 以类似的方式定义右下角的corner pooling层。它将(0,j)到(i, j)之间,以及(i,0)到(i, j)之间的所有特征向量在合并结果之前进行max-pool处理。
corner pooling池层用于预测模块热图、嵌入和偏移量。
预测模块: 架构如图7
第一部分:是残差模块的修改版本,改进后的残差块,用corner pooling模块代替第一个3 × 3卷积,corner pooling模块包含两个128通道的3 × 3卷积用于处理骨干网特征图——》然后应用corner pooling层——》池化后的特征输入到一个有256通道的3×3 conv-BN层,并添加返回投影快捷方式。
第二部分:修改后的残差块后面是一个3×3卷积模块,有256个通道
第三部分:3个con - relu - conv层来产生热图、嵌入和偏移量。
3.5 沙漏网络
沙漏网络:
CornerNet使用沙漏网络(Newell)作为骨干网络。沙漏网络首先用于人体姿态估计任务,是一个全卷积网络,由一个或多个沙漏模块组成。沙漏模块 1)首先通过一系列卷积和最大池化层对输入特征进行下采样;2)然后通过一系列的上采样和卷积层将特征上采样回原始分辨率;3)由于在最大池化层中丢失了细节,所以添加跳跃层将细节带回上采样特性。沙漏模块在一个统一的结构中捕获全局和局部特征。当在网络中堆叠多个沙漏模块时,沙漏模块可以对特征进行再处理,以获取更高层次的信息。这些特性使沙漏网络成为目标检测的理想选择。事实上许多当前的检测器已经采用了类似沙漏网络的网络。
本文沙漏网络:
本文沙漏网络由两个沙漏模块组成,但本文对沙漏模块的架构进行了一些修改。
(1)沙漏模块的修改:
①下采样阶段,不使用max pooling而是使用步长为 2的卷积来降低特征分辨率;将特征分辨率降低5倍,同时增加特征通道的数(256,384,384,384,512);
②上采样阶段,应用两个残差模块,然后是最邻近上采样,每个跳跃连接也由2个残差模块组成。
③沙漏模块的中间有4个带有512个通道的残差模块。
(2)本文沙漏网络:
①在训练中增加了中间监督,但不将中间预测添加到网络中,因为这会损害网络的性能;
②在沙漏模块之前,使用带有步长2和通道数为128的7 × 7卷积模块,然后是步长为2通道数为256的残差模块将图像分辨率降低了4倍。
③第一个沙漏模的输入和输出都应用了一个1 × 1的Conv-BN模块;然后通过逐元素加法将该模块的输入和输出合并,之后是ReLU和具有256个通道的残差块,作为第二个沙漏模块的输入。
沙漏网的深度为104,与许多其他最先进的探测器不同,只使用整个沙漏网络最后一层的特征来进行预测。
4 实验
4.1 训练细节
框架: 在PyTorch中实现CornerNet
实验设置:
(1)网络默认随机初始化,没有对任何外部数据集进行预训练。
(2)应用focal损失时:在卷积层中设置偏差,以预测角热图。
(3)在训练过程中:设置网络输入分辨率为511 × 511,从而得到输出分辨率为128 × 128。
(4)采用了标准的数据增强:减少过拟合,包括随机水平翻转、随机缩放、随机剪切和随机颜色抖动,其中包括调整图像的亮度、饱和度和对比度。
(5)将PCA 应用于输入图像。
(6)使用Adam 来优化完整的训练损失:角点损失、嵌入损失、偏移损失
其中α、β和γ分别为拉、推和偏移损失的权重。α和β设为0.1和γ设为1。α和β的值大于等于1会导致较差的性能。
(7)批量大小为49,并在10个Titan X (PASCAL) GPU上训练网络
(8)为了节省GPU资源,在消融实验中,以2.5 × 10−4的学习率训练网络进行250k的迭代。
(9)结果与其他检测器进行比较时,额外的250k迭代训练网络,并在最后的50k迭代中将学习率降低到2.5 × 10−5。
4.2 测试细节
在测试过程中,使用一个简单的后处理算法从热图、嵌入和偏移量生成边界框。
(1)首先通过在角热图上使用3×3最大池层来应用非最大抑制(NMS);
(2)然后从热图中选择top 100个左上角和top 100个右下角
(3)角位置通过相应的偏移量进行调整;
(4)计算左上角和右下角嵌入之间的L1距离,距离大于0.5或包含来自不同类别的角对被拒绝。
(5)以左上角和右下角的平均得分作为检测得分。
(6)没有将输入图像的大小调整到固定的大小,而是保持图像的原始分辨率,并在将其送入角网之前用0填充。原始图像和翻转图像都用于测试,将原始图像和翻转图像的检测相结合,并应用soft-nms 来抑制冗余检测。
只报告了前100个检测结果。在Titan X (PASCAL) GPU上,每张图像的平均推断时间是244ms。
4.3 MS COCO
在极具挑战性的MS COCO数据集上评估CornerNet。
MS COCO包含80k图像用于训练,40k用于验证,20k用于测试。
训练集:训练集图像和验证集中的35k图像进行训练。
验证集:验证集中剩余的5k图像用于超参数搜索和消融研究。
测试集:所有结果都提交给外部服务器进行评估。
为了提供与其他检测器的公平比较,报告了在测试集上的主要结果。MS COCO使用不同IoUs上的平均精度(APs)和不同目标大小的APs作为主要评估指标。
4.4 消融研究
4.4.1 Corner Pooling
Corner Pooling是CornerNet网的关键组成部分。为了理解它对性能的贡献,训练了另一个使用相同数量的参数没有Corner pooling层的网络。
从表1可以看出:
(1)增加Corner pooling层可以显著改善AP、AP50、AP75。
(2)Corner pooling层对中型和大型目标的检测特别有帮助,AP分别提高了2.4%和3.6%。这是意料之中的,因为大中型目标的最高、最低、最左、最右边界可能离角落更远。图8显示了四个有和没有Corner pooling的例子。
4.4.2 在更大区域Corner Pooling的稳定性
corner pooling池化图像不同象限中的不同大小的区域:例与右下象限相比,左上corner pooling在图像左上角象限的水平和垂直方向池化更大的区域。因此角的位置可能会影响corner pooling的稳定性。
评估本文网络在检测图像的不同象限的左上角和右下角的性能。检测角可以看作是一个二元分类任务,即角的GT位置为正,角半径以外的任何位置为负。在MS COCO验证集中使用所有类别的mAPs来度量性能。
由表3可知:
在没有corner pooling的情况下,左上象限和右下象限的角mAP分别为66.1%和60.8%。corner pooling将mAP分别提高了3.1%(至69.2%)和2.7%(至63.5%)。
类似地,右下corner pooling将左上象限的右下角mAP提高了2.8%(从53.4%提高到56.2%),右下象限提高了2.6%(从65.0%提高到67.6%)。
corner pooling对不同象限的角都有相似的改善,表明corner pooling在小区域和大区域上都是有效和稳定的。
4.4.3 减少对负位置的惩罚
目标大小决定的半径范围内减少对正位置周围负位置的惩罚。为了理解这是如何帮助训练ConerNet,本文训练一个不减少惩罚的网络和另一个固定半径为2.5的网络,将它们与CornerNet在验证集上进行比较。
表2显示:
(1)固定半径::AP比基线提高2.7%,APm提高1.5%,APl提高5.3%
(2)依赖目标大小的半径:进一步提高AP2.8%, APm2.0%, APl5.8%。
(3)除此之外,可以看到惩罚减少对于中型和大型目标的效果尤为明显。
4.4.4 沙漏网络
CornerNet使用沙漏网络(Newell)作为骨干网络。由于沙漏网络在其他先进的检测器中不常见,本文进行了一个实验来研究沙漏网络在CornerNet中的贡献。
(1)训练了一个CornerNet,用FPN取代沙漏网络,只使用FPN的最终输出进行预测;
(2)训练了一种基于锚框的检测器使用沙漏网络作为骨干,每个沙漏模块通过在上采样阶段使用多尺度特征预测多个分辨率下的锚盒,遵循RetinaNet中的锚框设计,并在训练过程中增加了中间监督。
在上述两个实验中,从头开始初始化网络,并遵循与训练COornerNet相同的训练过程
由表4可知:
采用沙漏网络的CornerNet比采用FPN的CornerNet的AP高,采用沙漏网络的锚框型检测器比采用FPN的CornerNet的AP高。由此可见,骨干网的选择很重要,沙漏网络对CornerNet的性能至关重要。
4.4.5 边界框的质量
一个好的检测器应该预测高质量的边界框,以紧密地覆盖目标。为了了解CornerNet预测的边界框的质量,本文评估CornerNet在多个IoU阈值下的性能,并将结果与其他最先进的检测器进行比较,包括RetinaNet、Cascade R-CNN (2017)和IoU- net (2018)。
从表5可知:
在0.9 IoU时,CornerNet获得了比其他检测器更高的AP,比cascade R-CNN + IoU- net高出3.9%,比cascade R-CNN高出7.6%,比retinanet2高出7.3%。表明CornerNet与其它最先进的探测器相比,能够产生更高质量的边界框。
4.4.6 误差分析
CornerNet同时输出热图、偏移量和嵌入,所有这些都会影响检测性能:
(1)如果任何一个角被遗漏,则目标将被遗漏
(2)精确的偏移量需要产生紧凑的边框
(3)不正确的嵌入会导致许多错误的边框。
为了理解每个部分是如何导致最终误差的,用GT替换预测的热图和偏移量,并对验证集的性能进行评估,从而进行误差分析。
从表6可知:
单独使用GT角热图可以使AP从38.4%提高到73.1%。APs、APm和APl分别增加42.3%、40.7%和30.0%。如果用GT来代替预测的偏移量,AP将进一步增加13.0%至86.1%。表明,虽然角的检测和分组都有很大的改进空间,但主要的瓶颈是角的检测。
4.5 与最先进的探测器的比较
在MS COCO test-dev数据集上,将CornerNet与其他最先进的检测器进行比较(表7)。通过多尺度评估,CornerNet的AP达到了42.2%,这是现有单阶段方法中最先进的水平,可以与两阶段方法竞争。
5 结论
本文提出了CornerNet,这是一种新的目标检测方法,它将包围框检测为角对。在coco数据集上进行评估,并展示竞争结果。