YOLOF:丢掉FPN,比YOLOv4更快!

论文地址:You Only Look One-level Feature

目录

0、摘要

1、引言

2、相关工作

3、MiMo Encoder的代价分析

4、方法

4.1、有限的尺度范围

4.2、正anchor的不平衡问题

4.3、YOLOF

5、实验结果

 6、总结


0、摘要

本文回顾了一阶段检测器中的FPN,并指出FPN的成功是由于其分治地解决了目标检测中的优化问题,而不是因为多尺度特征融合。从优化的角度出发,提出了一种FPN的替代方案——只利用一级特征进行检测。基于这种简单有效的解决方案,提出了You Only Look One-level Feature(TOLOF),主要提出了两个关键技术—— Dilated EncoderUniform Matching。在COCO上的大量实验表明所提出方法的有效性:可以达到和使用了FPN的RetinaNet相似的结果,但速度可快了2.5倍;在不使用transformer的前提下,YOLOF以单级特征达到匹配DETR的性能,同时训练epoch少了7倍;设定图像尺寸为608*608,YOLOF可以达到44.3mAP、2080Ti上60fps的成绩,这比YOLOv4快13%。

1、引言

在SOTA的两阶段、一阶段检测器中,特征金字塔是一个重要组件。最流行的特征金字塔是FPN,其有两个优势:(1)多尺度特征融合:将不同分辨率的特征融合,获得更好的特征表示;(2)分而治之:在不同金字塔层级上检测不同尺度的目标。关于FPN的一个普遍认知是其成功依赖于多尺度特征融合,这引出了一系列研究,包括各种复杂的融合方式的设计、基于NAS的算法等。然而,该认知忽视了FPN中的分治思想,这就导致了很少有研究关注FPN两个优点是如何起作用的,这可能会阻碍新进展的出现。

本文研究了FPN中两个优点在一阶段检测器中的影响,使用RetinaNet对多尺度特征融合和分治功能进行了实验研究。具体来说,我们认为FPN是一个多进多出(Multiple-in-Multiple-out,MiMo)的Encoder(检测head),并对比了 Multiple-in-Multiple-out (MiMo)、Single-in-Multiple-out (SiMo)、Multiple-in-Single-out (MiSo)、Single-in-Single-out (SiSo)这几种Encoder,其示意如图1:

一个令人惊讶的结果是,SiMo只有一个输入,并没有进行特征融合,却可以达到和MiMo(也即FPN)相似的结果,其性能的差距不到1mAP。与之相反的是,MiSo和SiSo的性能却掉了超过12个mAP。这种现象表明了两个事实:(1)C5特征包含了足够的用于多尺度目标检测的上下文信息,因此SiMo可以达到与MiMo相似的性能;(2)多尺度特征融合的优势远没有分治的优势那么重要,因此多尺度特征融合可能不是FPN最显著的优势,这也是ExFuse在语义分割中被证实了的。进一步思考,分治涉及到目标检测的优化问题,其将复杂的检测问题按照目标尺度分解为几个子问题,简化了优化过程。

以上分析表明,FPN成功的关键因素是它解决了目标检测优化问题。其中的分治思想非常棒,但是带来了内存负担、降低检测速度,并使得检测器的结构比较复杂,如RetinaNet那样。考虑到C5特征具有足够的检测上下文,我们提出了一种简单的方法来解决优化问题。

提出 You Only Look One-level Feature (YOLOF),只将单一的C5特征(下采样32倍)用于检测。为了弥补SiSo和MiMo之间的性能差距,首先对Encoder进行了合理的设计,来提取不同尺度目标的上下文信息,以弥补没有使用多尺度特征带来的损失;然后,采用了一个统一匹配机制来解决由于单级特征中anchor稀疏所引起的正例不平衡问题。

没有任何花哨的机制,YOLOF就可以达到和带有FPN的RetinaNet类似的性能,而且速度快上2.5倍。以单级特征的方法,YOLOF可以达到与DETR相匹配的性能,但收敛速度快了7倍;在608*608分辨率下,YOLOF可以在2080Ti GPU上达到44.3mAP、60fps,这个速度比YOLOv4快了13%。

总之,本文主要有以下贡献:

  • 揭示了FPN成功的关键在于其分治思想,而不是其多尺度特征融合;
  • 提出YOLOF这个简单有效的无FPN的baseline,并提出了两个关键组件: Dilated Encoder 和Uniform Matching,以此弥补SiSo和MiMo直接的性能差距;
  • 在COCO上通过大量实验证明,每个组件都是非常重要的,且YOLO可以达到与SOTA模型类似的性能,但速度更快。

2、相关工作

多级特征检测器:

利用多个特征进行目标检测是一种传统方法,其经典的例子就是图像金字塔和特征金字塔。基于图像金字塔的DMP,是深度学习时代之前比较主流的方法。而在CNN检测器时代,图像金字塔因其开箱即用的性能使其仍有所应用。但这不是唯一方法,一种更优雅的方法是利用CNN模型本身的阶梯性变化的特征尺度,如SSD利用多尺度特征,在不同级别的特征上执行不同尺度目标的检测。FPN紧随SSD、UNet其后,通过结合浅层和深层的特征构造了一个语义丰富的特征金字塔。后面,FPN就成了现代检测器必不可少的一个组件。在一阶段检测器中,FPN同样有所应用,如RetinaNet、FCOS及其变种,另一种获取特征金字塔的方法是采用多分支和膨胀卷积。与上述方法不同的是,我们的方法是一种单级特征检测器。

单级特征检测器:

早期的RCNN系列、R-FCN等,仅从单级特征中提取ROI,也因此其性能落后于对应的多级特征的改进版本。同样的,早期的YOLO、YOLOv2也是只利用backbone最后一层的feature map,其推理速度很快,但性能就比较落后了。CornerNet、CenterNet只使用单级特征就达到了比较不错的性能,是由于其对特征进行了上采样,使其分辨率恢复到1/4,从而可以检测所有目标。不过这种使用高分辨率进行检测的方式,会带来内存占用高、部署不友好的问题。最近,DETR引入transformer进行目标检测,并表明其仅用C5特征就能达到SOTA的性能,但由于其anchor-free机制以及transformer学习阶段的特殊性,DETR需要长时间的训练才能收敛,这也使其改进变得困难。与这些论文不同的是,本文研究了多级检测的机制,从优化的角度,提出了一个FPN的替代方案。而且,YOLOF的收敛速度更快,性能也很好;因此,YOLOF可以作为快速和准确的简单baseline检测器来用。

3、MiMo Encoder的代价分析

正如第一节所说,FPN的成功归功于其对优化问题的解决方案,但多级特征的方法不可避免地使得检测器变得复杂,并带来了内存负担、降低检测速度。本节对MiMo Encoder进行了一个定量研究。

我们基于RetinaNet(backbone为ResNet50)进行实验设计。首先,对检测pipeline进行了格式化,将其分为三个关键部分:backbone、Encoder、decoder,如图2所示:

在上述的划分下,对检测pipeline中各组件进行FLOPS分析,如图3所示:

从图3可以看出:使用了MiMo的模型,其Encoder、decoder的FLOPS非常大,而使用SiSo的则小了很多,且速度也提升比较多。MiMo速度慢的主要原因是其需要在高分辨率的feature map上检测目标。

本文的目的,就是找到一个结构更简单、准确率更高、速度更快的的解决方案。

4、方法

本文尝试使用SiSo替换MiMo,但直接替换的换会使性能大大降低(如图3所示)。因此,作者仔细分析了SiSO性能低的原因,发现了SiSo中存在两个问题:

  • 与C5特征相匹配的尺度范围有限:这阻碍了不同尺度目标的检测性能;
  • 正anchor的不平衡问题:这是由单级特征中anchors的稀疏性引起的。

因此,本文主要致力于解决这两个问题。

4.1、有限的尺度范围

在目标检测中,识别出不同尺度的目标是一个基本的挑战,其中一个解决方案是利用多级特征。在使用MIMO和SiMo Encoder的检测器中,我们利用不同的感受野(P3-P7)构造了多级特征,并在于感受野相匹配的特征级别上检测对应尺度的目标,其不同之处在于SiMo使用的是单级特征。

对于SiSo Encoder来说,其感受野是一个常量,图4(a)展示了其C5特征感受野只能覆盖一个有限的尺度范围,结果就是对于超出该范围的目标检测性能下降。为了使用SiSo encoder将其他尺度的目标也检测出来,需要找到一个方式来生成一个具有更大尺度范围的特征,以弥补不用多级特征所带来的缺陷。

我们首先通过堆叠标准卷积和空洞卷积来增大C5特征的感受野,尽管使其覆盖的尺度范围增大了一些,但仍然不能覆盖所有尺度的目标,因为在扩大过程中有一个大于1的因子被乘到原始尺度上了。这种方法所得的范围如图4(b)所示,比4(a)大了一些。

然后,我们通过将对应的feature相加,进一步对原始尺度范围和增大后的尺度范围进行了结合,得到的尺度范围如图4(c)所示。上述操作可以简单地通过在中间3 × 3卷积层上构造膨胀的残余块来实现。

Dilated Encoder:

基于上述的设计,提出了我们的SiSo encoder,如图5所示:

上图中的SiSo encoder命名为Dilated Encoder,其包含两个主要成分:Projector、残差块。Projector是投影层,其首先使用1*1卷积对通道进行降维,然后使用3*3卷积细化语义上下文信息,这部分与FPN一样。之后,利用不同膨胀率的3*3卷积堆叠了四个膨胀残差块,来生成带有多种感受野的输出特征,覆盖了所有的目标尺度。

讨论:

膨胀卷积是增大特征感受野的一个通用手段,正如第二节所描述那样,TridentNet使用膨胀卷积来生成多尺度特征,其通过多分支结构和权重分配机制解决了目标检测中的尺度变化问题,这与我们的单级特征设定不同。此外,Dilate Encoder一个接一个的堆叠膨胀残差块,并没有使用加权机制。虽然DetNet也成功地应用了膨胀残差块,但其目的是保持特征的空间分辨率,并在backbone输出中保留更多的细节,而我们的目的是在backbone外生成具有多个接受域的特征。Dilated Encoder的设计使得我们仅仅使用单级特征就可以检测所有尺度的目标,而不需要想TridentNet和DetNet那样需要多级特征。

4.2、正anchor的不平衡问题

在目标检测的优化问题上,正anchor的定义非常重要。在anchor-based的检测器中,其定义正anchor的策略是测量anchors和GT box直接的IOU,如RetinaNet中将最大IOU大于0.5的anchor当作正例,这种方法称之为max-IOU匹配。

在MiMo Encoder中,anchors是以密集铺砌的方式预先在多个层次上定义的,而GT boxes根据其尺度在特征级别上生成相应的正anchors。在分治机制下,Max-IoU匹配使每个尺度上的GT boxes都能产生足够数量的正anchor。然而,当我们使用SiSo Encoder时,anchor的数量相比MiMo就少了很多(从100k到5k),这就导致了anchor稀疏的问题,而稀疏anchor在进行max-IOU匹配时又引出了匹配问题,如图6所示:

图6表明:Max-IOU的正anchor分配极其不均,大的GTboxes分配的anchor原多于小GT boxes分配到的anchor,这种不平衡会使检测器更加关注大目标,而忽略小目标。

Uniform Matching:

为了解决这种正anchor分配不平衡的问题,提出了 Uniform Matching策略:采用k近邻方法给每个TG box分配正anchor,不管anchor大小,保证每个GT box分配到相同数量的anchor。正例平衡保证了所有GT平等的参与训练并做出贡献。此外,遵循了Max-IOU匹配中的设定,我们在Uniform Matching中将IOU阈值设置为:忽略大IOU(>0.7)的负例和小IOU(<0.15)的正例。

讨论:与其他匹配方法的关系

在匹配过程中应用topK的方式并不新鲜,如ATSS中,首先在L个特征级别上对每个GT box选择topK个anchor,然后在k*L个候选项中采样正anchor。然而,ATSS专注于自适应的正负例定义,而我们的Uniform Matching专注于在稀疏anchors中获取平衡的正例。尽管很多先前的方法在正样本上达到了平衡,但其针对的不是我们所提到的平衡问题。如YOLO和YOLOv2给GT box选取的是最匹配的cell;DETR使用匈牙利算法进行匹配,而这种方法可以当成top1匹配,这是我们Uniform Matching中的一个特例。更重要的是,Uniform Matching与可学习的匹配方法的不同之处在于:可学习的匹配方法(如FreeAnchor、PAA)是根据学习状态来自动将anchors分为正或负,而Uniform Matching是固定分配、不需要学习的。Uniform Matching的提出,是专门用于解决SiSo设计汇总的正anchor分配不平衡问题的,图6和表5e表明了在SiSo中存在的显著不平衡问题。

4.3、YOLOF

基于上面提出的方案,我们提出一个快速、简单的一级特征框架——YOLOF,其架构如图9所示:

可见,其主要包括三个部分:Backbone、Encoder、Decoder。

Backbone:所有模型均使用ResNet、ResNeXt系列作为backbone,且均在ImageNet上预训练。backbone的输出为C5特征,其通道为2048、下采样率为32倍。为了和其他检测器公平对比,backbone中的所有BN层均默认冻结。

Encoder:对于图5中的Encoder,首先按照FPN的方式在backbone后面增加了两个投影层(一个1*1卷积、一个3*3卷积),生成一个512通道的feature map;然后,为了使得Encoder的输出特征能够覆盖所有尺度的目标,我们提出了一个额外的残差块,其包含三个连续的卷积:先用一个1*1卷积将通道维度减少4倍,接着用一个3*3膨胀卷积来增大感受野,最后再用一个1*1卷积恢复通道数。

Decoder:采用了RetinaNet的主设计,包含两个任务head:分类、回归,并仅增加了两个小的修改。第一个修改是按照FPN和DETR的设计,使两个head中的卷积层数量不同。在回归head中,有四个带有BN和RELU的卷积层,而在分类head中只有两个。第二个修改是,按照Autoassign的做法,对回归head中每个anchor增加了一个隐含的对象预测(没有直接监督),最终每个预测的分类得分需要乘以其对应的对象预测结果。

其他细节:由于YOLOF中预定义anchors是稀疏的,这降低了anchors和GT boxes的匹配质量。于是,在图像上增加了一个随机位置,上下左右最大32像素,以此引入噪声、增加GT boxes和高质量anchors的匹配概率。此外,对anchors中心点的位移也进行了约束:各中心点对于所有anchors的位移都小于32像素。

5、实验结果

 6、总结

本文确定了FPN在密集目标检测优化问题上的成功关键在于其分治解决方案,而FPN结构复杂、内存占用多、检测速度慢,故而提出了一个加单有效、没有FPN的方法——YOLOF。通过实验,与RetinaNet、DETR进行公平对比证明了YOLOF的有效性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AICVHub

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值