开源MatrixNets:用于对象检测的新的比例和长宽比感知体系
今天我们介绍MatrixNets(xNets),这是一种用于对象检测的新的深层体系结构。xNets将具有相似大小和高宽比的对象映射到许多专门的层中,从而使xNets可以提供可感知比例和高宽比的体系结构。作者利用xNets来增强单阶段对象检测框架。
首先,将xNets应用于基于锚的对象检测,为此可以预测对象中心并回归左上角和右下角。
其次,我们通过预测左上角和右下角,将MatrixNets用于基于角的对象检测。每个角预测对象的中心位置。
作者还通过将嵌入层替换为中心回归来增强基于角点的检测,最终架构在MS COCO上实现了47.8的mAP,比其CornerNet同类产品高+5。6 mAP,同时也缩小了单级和两级检测器之间的距离。
图1:(a)显示了FPN架构,其中在每个比例尺上分配了不同的输出层。请注意,为简单起见,我们没有显示跳过连接。(b)显示了MatrixNet架构,其中5个FPN层被视为矩阵中的对角层。我们通过对这些层进行下采样来填充矩阵的其余部分
介绍
对象检测是计算机视觉中研究最广泛的任务之一,在对象跟踪,实例分割和图像字幕等任务中有许多应用。对象检测架构可以分为两类:两级检测器和单级检测器。
两级检测器利用区域提议网络来查找固定数量的对象候选对象。然后,使用第二个网络预测每个候选人的得分并完善其边界框。
此外,一阶段检测器也可以被分成两类:基于锚的检测器和拐角(或关键点)基于检测器。基于锚的检测器包含许多锚框,它们预测每个锚的偏移量和类别。
另一方面,基于拐角的检测器预测左上角和右下角的热图,并使用特征嵌入将它们匹配在一起。
在不同尺度上检测物体是物体检测的主要挑战。规模感知架构的最大进步之一是功能金字塔网络FPN。通过使多层具有不同接收场的FPN设计为尺寸不变的,以便将对象映射到具有相关接收场的层。小对象映射到金字塔的较早层,而较大对象映射到较后的层。由于对象的大小相对于该层的下采样在金字塔层之间几乎保持一致,因此可以在所有层之间共享单个输出子网。尽管FPN提供了一种优雅的方式来处理不同大小的对象,但它们并没有为不同长宽比的对象提供任何解决方案。高塔,长颈鹿或小刀之类的物体会给FPN带来设计上的困难:有没有人根据它们的宽度或高度将这些对象映射到图层?根据其较大的尺寸将对象分配给图层会导致由于主动下采样而导致沿较小的尺寸丢失信息,反之亦然。
图2:盒子数量的直方图与对象的最大尺寸与最小尺寸之比。
这些问题在MS-COCO等数据集中非常普遍。图2示出了对象数量与对象的最大边的值除以最小边的直方图。我们发现50%的对象的最大/最小值大于1.75,而14%的最大/最小值大于3。因此,有效地对这些矩形对象建模对于良好的检测性能至关重要。在这项工作中,我们介绍了MatrixNets(x Nets),这是一种新的比例和长宽比感知的CNN架构。如图1所示,x Nets 具有多个矩阵层,每个层处理特定大小和长宽比的对象。X网络将不同大小和长宽比的对象分配给各层,以使它们分配的层内的对象大小接近统一。通过这种分配,平方输出卷积核可以平等地收集有关所有纵横比和比例的对象的信息。x Nets可以应用于任何骨干网,类似于FPN。我们通过在主干上附加一个“ -X”来表示这一点,即ResNet50-X [ 7 ]。作为x Nets 的应用程序,我们首先将x Nets用于基于锚的一级对象检测。我们决定不考虑每个要素图只有一个方框的情况,而不是每个要素图使用多个锚定框,从而使其类似于免锚架构。在第二个应用程序中,我们使用x Net用于基于角点的对象检测。我们展示了如何利用 x Net来改进CornerNet架构。在MS-COCO上,我们为人工设计的单级检测器设定了新的最先进性能(47.8 mAP)。
相关工作
两级探测器
两阶段检测器通过首先提取RoI,然后在第二阶段对每个RoI 进行分类和回归来生成最终检测结果。R-CNN首次引入了两阶段目标检测范例
。R-CNN使用选择性搜索方法提出RoI,然后使用CNN网络对RoI进行评分和优化。Fast-RCNN和SPP通过从特征图而非输入图像中提取RoI来改进R-CNN。Faster-RCNN 引入了区域提议网络(RPN),它是一种可训练的CNN,可生成RoI,从而可以对两级检测器进行端到端训练。
单阶段检测器
基于锚的检测是单级对象检测器最常见的框架。基于锚的检测器通过直接分类和回归预定义锚来生成检测。一个所述第一单级检测器,YOLO,仍然被广泛使用,因为它能够实时运行。与两级检测器相比,一级检测器的速度往往更高,但性能却落后。
这是缩小两个范式之间差距的首次尝试。RetinaNet提出了焦点损失,以帮助纠正正负锚框的类不平衡。RetinaNet使用手工制作的启发式算法,通过“交叉点联合”(IOU)将锚分配给地面真实对象。最近,已经发现,改进对地面真相对象分配的锚点会对性能产生重大影响。
此外,无特征选择锚点(FSAF)将基于锚的输出与无锚输出头集成在一起,以提高性能。AnchorFree通过将问题公式化为最大似然估计(MLE),改进了地真匹配过程的锚点。
用于单阶段检测的另一个框架是基于角点(或基于关键点)的检测器,它是由CornerNet首次引入的。CornerNet会预测左上角和右下角的热图,并使用特征嵌入将它们匹配在一起。CenterNet通过预测对象中心以及拐角,大大改善了CornerNet架构。
MATRIXNETS
如图1所示,MatrixNets(xNets)使用图层矩阵对不同大小和纵横比的对象进行建模,其中矩阵中的每个条目i,j代表图层li,j。每个层li,j的宽度向下采样为2i-1,高度向下采样为2j-1。矩阵的左上层(基础层)为l1,1。对角线层是不同大小的正方形层,相当于FPN,而对角线层是xNets独有的矩形层。l1,1层是最大的层,向右的每一步将其宽度减小一半,而每减小一层,其高度将减小一半。例如,Width(l3,4)= 0.5Width(l3,3)。对角层模拟具有正方形长宽比的对象,而非对角层模拟具有更极端长宽比的对象。矩阵模型对象的右上角或左下角附近的图层,其纵横比非常高或非常低。这样的对象是稀缺的,因此可以为提高效率而修剪这些层。
图层生成
生成矩阵层是至关重要的一步,因为它会影响模型参数的数量。参数越多,模型的表达性就越高,但是优化问题就越困难。在我们的方法中,我们选择引入尽可能少的新参数。可以从主干的不同阶段或使用特征金字塔主干[11]获得对角线层。
通过在对角线层上应用一系列步幅为1x2的共享3x3卷积来获得较高的三角形层。类似地,使用步幅为2x1的共享3x3卷积获得左底层。这种共享有助于减少矩阵层引入的其他参数的数量。
图层范围
我们定义分配给矩阵中每一层的对象的宽度和高度范围,以使每一层都可以专门化。该范围需要反映矩阵层的特征向量的接受场。矩阵中向右的每一步都有效地使水平方向的接收场加倍,而向下的每一步均使垂直方向的接收场加倍。因此,当我们在矩阵中向右或向下移动时,宽度或高度的范围需要加倍。一旦范围为第一层定义了l1,1后,我们可以使用上述规则为其余矩阵层生成范围。例如,如果第l1,1层(基础层)的范围是H∈[24px,48px],W∈[24px,48px],则第l1,2层的范围将是H∈[24,48],W ∈[48,96]。我们在消融研究中显示了多层范围。
在这些范围的边界上的对象可能会破坏训练的稳定性,因为如果对象大小略有变化,则图层分配将会更改。为避免此问题,我们通过在两个方向上扩展它们来放松层边界。这种放松是通过将范围的下限乘以小于1的数字,以及将上限乘以大于1的数字来实现的。在所有实验中,我们分别使用0.8和1.3。
矩阵网络的优势
MatrixNets的主要优势在于,它们允许平方卷积核准确地收集有关不同纵横比的信息。在传统的对象检测模型(例如RetinaNet)中,需要平方卷积核来输出不同纵横比和比例的盒子。使用正方形卷积核是违反直觉的,因为不同纵横比和比例的盒子需要不同的上下文。在MatrixNets中,由于上下文在每个矩阵层中都发生变化,因此相同的平方卷积核可用于检测不同比例和纵横比的框。由于对象大小在它们分配的层中几乎是均匀的,因此宽度和高度的动态范围比其他架构(例如FPN)要小。因此,回归对象的高度和宽度成为一个更容易的优化问题。最后,MatrixNets可以用作任何对象检测体系结构的主干,无论是基于锚点还是基于关键点的一级或二级检测器。
MATRIXNETS应用
在本节中,我们展示了MatrixNets可以用作两个单发对象检测框架的骨干。基于中心和基于角点的对象检测。在基于中心的对象检测中,我们在回归左上角和右下角的同时预测对象的中心。在基于拐角的对象检测中,我们预测对象的拐角并回归对象的中心。预测同一中心的角将匹配在一起以形成检测。
图3:Centers-xNet架构。
基于中心的对象检测
基于锚的对象检测是用于单阶段对象检测的通用框架。使用MatrixNet作为骨干自然可以处理不同比例和长宽比的对象。尽管使用多个不同比例的锚可能会改善性能,但我们决定通过在每个位置使用一个锚来简化其架构,以简化其架构。因此,可以在训练过程中将地面真实对象分配到最近的中心位置。
使用MatrixNets的基于中心的对象检测
如图3所示,我们的Centers-xNet架构包括四个阶段。
(ab)我们使用第3节中定义的xNet主干。
(c)使用共享的输出子网,对于每个矩阵层,我们预测对象的中心热图,左上角回归和右下角回归在他们的层次。
(d)我们将所有层的输出与非最大软抑制[1]结合起来,以获得最终输出。
中心热图训练期间,首先将地面真值对象根据其宽度和高度分配给矩阵中的各层。在图层内,对象被分配到最近的中心位置。为了处理不平衡的类,我们使用焦点损失。角点回归对象大小受矩阵图层限制,这使得对对象左上角和右下角进行回归变得可行。如图3所示,对于每个中心,Centers-xNet会预测相应的左上角和右下角。在训练期间,我们使用平滑的L1损失进行参数优化。
训练我们将23个批次的批次用于所有实验。在训练期间,我们使用640x640大小的作物,并且使用0.6-1.5的标准比例抖动。为了进行优化,我们使用Adam优化器并将初始学习率设置为5e-5,并在进行250k次迭代后将其降低1/10,总共训练了350k次。对于矩阵层范围,我们将l1,1设置为[24px-48px] x [24px-48px],然后按第3节所述缩放其余部分。
推理对于单比例推理,我们将图像的最大宽度调整为900px。我们使用原始图像和水平翻转的图像作为网络的输入。对于网络中的每个层,我们选择前100个中心检测。使用左上角和右下角的回归输出来计算角。原始图像的边界框和翻转的边界框混合在一起。Soft-NMS层用于减少冗余检测。最后,我们根据其得分选择前100个检测作为检测器的最终输出。
图4:Corners-xNet架构。
基于角点的对象检测
CornerNet被提出作为基于锚的检测器的替代方案,CornerNet将边界框预测为一对角:左上角和右下角。对于每个角,CornerNet都会预测热图,偏移量和嵌入。从热图中提取左上角和右下角候选。嵌入用于对属于同一对象的左上角和右下角进行分组。最后,使用偏移量优化边界框,从而生成更紧密的边界框。
这种方法有三个主要局限性。
CornerNet使用单个输出层处理大小和纵横比不同的对象。结果,预测大物体的拐角带来了挑战,因为关于拐角位置处的物体的可用信息并不总是通过常规卷积获得。为了解决这一挑战,CornerNet引入了拐角池化层,该层在水平和垂直维度上使用max操作。左上角池化层将扫描整个右下图像,以检测是否存在角。尽管从实验上可以看出,转角池可以稳定模型,但我们知道最大操作会丢失信息。例如,如果两个对象在顶部边缘共享相同的位置,则只有具有最大特征的对象才有助于渐变。因此,由于角落池层,我们可以预期会看到误报。
通过功能嵌入来匹配左上角和右下角。在此设置中使用嵌入会引起两个问题。首先,在训练过程中需要优化成对距离,因此,随着图像中对象数量的增加,成对数量呈二次方增加,这在处理密集对象检测时会影响训练的可伸缩性。第二个问题是学习嵌入本身。CornerNet尝试学习以对象另一角的外观为条件的每个对象角的嵌入。现在,如果对象太大,由于两个角之间的距离,两个角的外观可能会非常不同。结果,每个角的嵌入也可以不同。同样,如果图像中有多个外观相似的对象,则它们角落的嵌入可能会相似。这就是为什么我们看到CornerNet合并人员或交通信号灯的示例。
由于前两个问题,CornerNet被迫使用Hourglass-104主干来实现最新性能。Hourglass-104的参数超过200M,训练非常缓慢且不稳定,需要10个具有12GB内存的GPU,以确保足够大的批处理量以实现稳定的收敛。
使用MatrixNets的基于角点的对象检测
图4显示了我们提出的用于基于角点的对象检测的架构Corners-xNet。Corners-xNet包含4个阶段。
(ab)我们使用第2节中定义的xNet主干。
(c)使用共享的输出子网,对于每个矩阵层,我们预测左上角和右下角的热图,角偏移和中心预测图层中的对象。
(d)我们使用中心预测来匹配同一层内的角,然后将所有层的输出与软非最大抑制相结合以实现最终输出。
使用xNets的角部热图可确保层内对象所需的上下文受该层中单个要素图的接受域的限制。结果,不再需要转角池。常规的卷积层可用于预测左上角和右下角的热图。类似于CornerNet,我们使用焦点损失来处理不平衡的类。
角点回归由于图像向下采样,精炼角点对于拥有更紧密的边界框很重要。将角按比例缩小到图层中的x,y位置时,我们会预测偏移量,以便可以将角按比例缩放到原始图像大小而不会损失精度。我们将失调值保持在-0.5至0.5之间,并使用平滑L1损耗来优化参数。
表1:Centers-xNet和Corners-xNet之间的性能比较。
图5:当使用resnet152-X作为骨干网时,基于中心的对象检测器(顶部)和基于角点的对象检测器(底部)的样本检测结果。删除任何概率小于0.4的检测。
中心回归由于匹配是在每个矩阵层内完成的,因此可以确保对象的宽度和高度在一定范围内。因为中心的范围很小,所以对象的中心可以轻松回归。在CornerNet中,中心的动态范围很大,尝试在单个输出层中回归中心可能会失败。一旦获得了中心,就可以通过将回归中心与两个角之间的实际中心进行比较来将角匹配在一起。在训练期间,与学习嵌入的情况下的二次增长相比,中心回归与图像中对象的数量成线性比例。为了优化参数,我们使用平滑的L1损耗。
角匹配对于任何一对角,正确的中心是它们的x和y位置的平均值。如果两个角属于同一对象,则正确的中心与每个角之间的相对距离是两个角的中心回归的正确值。因此,如果两个角都以30%或更低的错误率预测中心,则可以将这些角匹配在一起。
训练我们将23个批次的批次用于所有实验。在训练期间,我们使用尺寸为512x512的农作物,并使用0.6-1.5的标准比例抖动。为了进行优化,我们使用Adam优化器并将初始学习率设置为5e-5,并在进行250k次迭代后将其降低1/10,总共训练了350k次。对于矩阵层范围,我们将l1,1设置为[24px-48px] x [24px-48px],然后按第3节所述缩放其余部分。
推理对于单比例推理,我们将图像的最大宽度调整为900px。我们使用原始图像和水平翻转的图像作为网络的输入。对于网络中的每一层,我们选择左上角和右下角的前50个角。使用拐角回归输出精炼拐角位置。然后,如上所述,每对角点都匹配在一起。原始图像的边界框和翻转的边界框混合在一起。Soft-nms [1]层用于减少冗余检测。最后,我们根据其得分选择前100个检测作为检测器的最终输出。
Corners-xNet解决了CornerNets的问题(1),因为所有矩阵层都表示不同的比例和宽高比,而不是将它们全部都放在单个层中。这也使我们摆脱了角落合并操作。(2)得到解决,因为我们不再预测嵌入。相反,我们直接回归中心。通过解决CornerNets的前两个问题,我们将在实验中表明,我们可以获得比CornerNet高得多的结果。
实验
我们在配备8个Titan XP GPU的服务器上训练所有网络。我们的实现是在PyTorch中完成的。为了进行评估,我们使用了MS COCO检测数据集。我们使用MS COCO的“ train-2017”集训练了模型,并在“ val-2017”上进行了验证,并在“ test-dev2017”集上进行了测试。为了比较我们的模型和消融研究,我们报告了“ val-2017”数据集上的数字。为了与其他检测器进行比较,我们在“ test-dev2017”上报告了这些数字。
我们将对Centers-xNet和Corners-xNet检测器的性能进行比较。然后,我们将检测器与其他检测器进行比较。最后,我们通过一组用于评估模型不同部分的实验来进行消融研究。
CENTERS-XNET VS CORNERS-XNET
在此实验中,我们想比较Centers-xNet和Corners-xNet的性能。据我们所知,这是两个框架之间的首次公平比较,因为它们都共享相同的主干(Resnet-152-X),训练和推理设置。
表1显示了两种架构在不同测试图像大小下的性能。mAP编号在MS COCO的“ val-2017”集中报告。Centers-xNet在1000px的测试图像尺寸上表现最佳,而Corners-xNet在900px的测试图像尺寸上表现最佳。
总体而言,就mAP数量而言,Corners-xNet的性能优于Centers-xNet。Corners-xNet似乎对于更改图像大小更为健壮,并且在将测试图像大小更改为±100px时,mAP会降低<0.2 mAP。另一方面,Centers-xNet对测试图像大小非常敏感,并且将测试图像大小改变±100px时,性能下降<1.3 mAP。在Centers-xNet情况下性能下降的原因是,如果同一对象的两个中心在同一位置碰撞,则可能会完全丢失该对象。由于Centers-xNet等效于每个位置使用一个锚点,因此随着测试图像尺寸的减小,发生碰撞的可能性也会增加。因此,随着我们减小测试图像尺寸,我们可以看到性能下降。对于Corners-xNet,如果两个拐角处都发生碰撞,则可能会丢失对象,与Centers-xNet案例相比,这种可能性要低得多。
根据推断时间,在所有测试图像尺寸下,Centers-xNet架构比Corners-xNet快100毫秒。Corners-xNet比Centers-xNet使用更多的预测输出。同样,角点匹配使用GPU和CPU时间。因此,使用Corners-xNet会产生100毫秒的开销。
表1的另一项观察结果表明,测试图像的大小直接影响小,中,大物体的AP。此观察结果可用于调整我们主要感兴趣的一组对象上的mAP。为了保持一致性,从现在起到本文结束,我们将测试图像的大小固定为900px。
表2:在COCO test-dev2017集上的最新比较。空白表示无法获得结果的方法
除了mAP数量和推断时间,我们还研究了基于视觉检查的基于中心和基于角点的对象检测在性能上的差异。如图5所示,通过检查两个检测器的检测结果,我们发现了三个主要差异。首先,基于角点的检测器通常会产生更好的检测,而基于中心点的检测器有时会丢失图像内的可见对象。图5a展示了证明这种差异的一些示例。其次,如图5b所示,基于角的检测器与基于中心的检测器相比,具有围绕对象的更紧密边界框的精确检测。最后,基于中心的检测器在检测被遮挡的对象时性能更好,而基于角的检测器则倾向于将检测结果分成较小的边界框。例如,在图5c的第一个图像中,总线被树木遮挡,但基于中心的检测器仍能够正确检测到总线。另一方面,基于拐角的检测器将检测结果分成两个较小的边界框。
与其他探测器的比较
我们将Centers-xNet和Corners-xNet的最佳检测器与其他单级检测器进行了比较。我们在MS COCO的“ test-dev2017”集中报告了mAP编号。表2展示了在将单比例和多比例输入图像用于其余的一级检测器时,我们最出色的人为架构的全面比较。Corners-xNet在单比例和多比例输入图像上都居于首位。它还缩小了单级和两级检测器之间的距离。Centers-xNet与其他基于锚的体系结构具有同等性能,而每个锚仅使用单个比例,并且不使用任何对象到锚的分配优化。这些结果证明了使用MatrixNet作为对象检测架构的骨干的有效性。
MatrixNet设计
5层MatrixNet等效于FPN,因此我们将其用作评估向主干添加更多矩阵层的基准。表3a列出了矩阵层编号的不同选择的mAP编号。与FPN(5层MatrixNet)相比,使用19层MatrixNet可将性能提高5.1点。19层MatrixNet中的额外层比FPN层小得多,因为矩阵中向右或向下的每一步都会将宽度或高度减少一半。结果,19层MatrixNet中的锚点总数是FPN的2.5倍。
表3:MS-COCO验证集上的设计选择消减。
图6:使用FPN(a)和19层MatrixNet(b)作为主干时,基于中心的对象检测框架的示例检测结果。MatrixNet产生更紧密的边界框,特别是对于矩形对象。
我们还对两个检测器的检测结果进行了目视检查。图6显示了使用FPN(5层MatrixNet)与使用19层MatrixNet作为主干相比,基于中心的检测器的定性示例。通常,我们观察到使用MatrixNet可以更好地处理矩形对象。
图层范围
在此实验中,我们要研究基础层(l1,1)范围选择对检测器性能的影响。我们使用Centers-xNet架构来评估此超参数的效果。表。图3b显示使用24px-48px的范围更有效。选择此范围的目标是为所有矩阵层分配平衡的对象。选择比24px-48px(例如32px-64px)更大的范围将需要使用更大的训练图像裁剪,以具有足够的示例来训练矩阵的右下层。这将需要更多的GPU和更长的培训时间。我们还发现,对于Corners-xNet架构,层范围的选择与Centers-xNet一样重要。
训练图像裁剪尺寸
在训练过程中,我们使用缩放抖动来随机缩放图像,然后使用固定大小的作物来训练模型。作物大小的选择主要影响MatrixNet右下角的层。较小的农作物大小将阻止这些图层具有足够覆盖整个范围的对象。对于Centers-xNet,训练作物的尺寸会影响角点回归输出的性能,从而影响检测器的整体性能。表3c显示了作物大小对Centers-xNet体系结构总体性能的影响。对于Corners-xNet,训练作物的大小将影响中心回归输出的性能。由于中心回归输出仅影响角点匹配,并且由于我们允许30%的误差,因此我们发现选择图像裁剪对Corners-xNet的性能影响很小。
Backbones
Backbones充当特征提取器。因此,更好,更大的主干通常会导致体系结构更好的整体性能。表3d显示了使用Resnet50,Resnet101和Resnet152对Centers-xNet和Corners-xNet体系结构的整体性能的影响。
结论
作者介绍了MatrixNet,这是一种用于对象检测的比例和长宽比感知体系结构。 作者使用MatrixNets解决了基于角点的对象检测的基本限制。我们还使用MatrixNet作为基于锚的对象检测的主干。在这两种应用中,均显示出mAP较基线有显着改善。
作者将MatrixNet视为对FPN的改进的骨干。我们展示了使用MatrixNet进行一阶段对象检测的影响,该对象将来可以扩展到两阶段对象检测。MatrixNets还可以在其他计算机视觉任务(例如实例分割,关键点检测和全景分割任务)中替代FPN。
论文地址源码下载地址:关注“图像算法”微信公众号 回复“MatrixNet”