YOLOF-You Only Look One-level Feature阅读笔记

paper:https://arxiv.org/abs/2103.09460

code:https://github.com/megvii-model/YOLOF

本文最大的贡献应该是对FPN重新进行了思考,从另外一个角度认为fpn解决的也许不是多尺度特征融合的问题,干掉了由于fpn带来的多级密集anchors带来的庞大计算量的问题,针对paper认为的fpn潜在解决的问题,paper提出了新的结构,替代fpn,使用单级featuremap预测,从而大幅度减少了计算量和训练时的迭代时间,本文将按照paper的结构进行叙述。

1、abstract

    本文回顾了one-stage的检测器的FPN结构,并指出FPN的成功在于对任务进行分而治之的思路而不是常提及的多尺度特征的融合,从优化的角度来看,引入一种可以替代的方法来解决问题,而不是采用复杂的FPN,在本paper中,提出了两个关键组件,即Dilated 编码器和Uniform matching,其中,Dilated 编码器用于提升特征的感受野,Uniform Matching用于进行不同尺度的目标框匹配,结合两个模块后,在coco上,比 RetinaNet 快 2.5 倍、比 DETR 少 7 倍训练时间,在2080Ti上可以跑出60fps,比yolov4快13%。

2、Introduction

    本paper通过研究fpn在one-stage检测器的两个benefits的影响,通过retinanet解耦多尺度特征融合和分而治之的功能来设计实验,详细的来说,将fpn视为多进多出的编码器(Mimo),对backbone的多尺度特征进行编码并为后面连接的head提供多尺度的特征表达,我们以retinanet为例,通过对retinanet的实验来分析fpn的原理,直接看paper的原图:

    从上图a、b可以看出,仅仅具有一个输入特征c5且不执行特征融合的SiMo编码器可以与MiMo编码器达到相近的性能,且性能差距小于1map,相反,在MiSo和SiSo编码器中(上图c、d),性能急剧下降(超过12mAp),这些现象表明了两个事实:

    1、c5的featuremap具有足够的上下文信息来检测多尺度的目标,因此SiMo具有一个相当不错的结果

    2、多尺度的特征融合不如分而治之的方法那么重要,因此多尺度的特征融合也许并不是fpn的最大优势

    paper继续指出,fpn的成功关键因素是提供了一个目标检测问题中的中最优化思路,而不是多尺度特征融合,fpn针对分而治之的思想是一个不错的方法,但是它带来了存储负担、减慢了检测器的推理速度,同时会使得诸如retinanet之类的one-stage检测器结构变得更加复杂,因此,我们基于c5单层featuremap提出了一种新的优化问题的思想。

    进一步的,本paper提出的YOLOF,该功能仅仅使用c5级别featuremap进行检测(下采样为32),同时,为了弥补SiSo编码器和MiMo编码器之间的性能差距,paper首先适当的设计编码器的结构,以提取各尺度的目标的上下文信息,以弥补没有使用多层特征的不足,然后,在采用统一的匹配机制来解决单层特征中稀疏的anchor 导致正样本(positive anchor)不足的问题。

    在没有使用任何bels和whistles的情况下,YOLOF达到了使用fpn的retinanet的相同效果,但速度提高了2.5倍,简而言之,本文的贡献是:

    1、paper指出,fpn的最显著优势是针对密集目标检测中的优化问题的分而治之的解决方案,而不是多尺度的特征融合

    2、提出了YOLOPF,提出了Dilated Rncode和uniform matching2个关键组件,弥补SISo编码器和MiMo编码器的性能差异。

    3、在coco上验证了每个组件的重要性,结果与retinanet、DETR、yolov4进行了比较,同时在GPU上获得了更快的速度

3、Cost Analysis of MiMo Encoders

    paper指出,多级特征的一个方法不可避免的会使得检测器变得复杂,带来存储负担并导致检测器变慢,本节中,paper对MiMo编码器的成本进行定量研究。基于此,本paper设计了Retinanet和resnet50的实验,将检测任务的流水线格式化为三个关键部分的组合,backbone、encoder、decoder,如下图Figure2所示;

   

    同时,基于这三种组件的划分方式,我们在下图Figure3中显示了每个组件的flops,与SiSo编码器相比,MiMo编码器给编码器和解码器带来了巨大的存储负担(134Gvs6G),此外,带有MiMo编码器器的detector运行速度会比SiSo的detector要慢得多(13fps vs 34fps),速度慢的原因是由于使用检测器中的高分辨率特征图上检测对象所致(密集的anchors等),鉴于MiMo以上的缺点,paper旨在提出一种替代方法来解决优化问题,保持检测器的简单、快速。

4、Method

    出于上述目的,本文尝试用简单的SiSo编码器替换复杂的MiMo编码器,但是上文提到此时性能会大幅度的下降,paper此时分析阻碍SiSo编码器获得高ap值的障碍或者问题所在,paper发现SiSo编码器带来两个问题导致性能下降:

    1、与c5的featuremap的感受野相匹配的比例范围有限,这会妨碍多尺度的目标对象检测性能(The first problem is that the range of scales matching to the C5 feature’s receptive field is limited)

    2、单级featuremap中的稀疏anchors的positive anchors不平衡的问题(大的gt框会包含更多的正anchor-paper的意思应该是大的gt框覆盖的特征图的点越多,会导致有效的训练样本正anchor越多,因此会导致样本不均衡)。

   4.1 Limited Scale Range

    在带有SiSo和SiMo编码器的detector中,通过构造具有不同的的感受野的多级特征,并通过与他们的标尺匹配的感受野来检测目标,但是,单级的feature 检测会改变这个设定,SiSo编码器中只有一个输出功能,则其感受野是一个常数。如图4a所示,c5的感受野只能覆盖有限的比例范围,如果对象的缩放比例与receptive field不匹配,则会导致检测器性能下降,为了实现使用SiSo编码器检测所有对象的目标,我们必须找到一种方法来生成具有各种感受野的输出特征,以弥补多级特征的不足。

    我们首先通过堆叠标准卷积和膨胀卷积来扩大c5的特征感受野,尽管其覆盖的尺度范围在一定程度上扩大,但仍旧无法覆盖所有目标尺度,以上图b为例,相比于图a,它的感受野朝着更大的尺度进行了整体的偏移,然后,作者将原始尺度范围与扩大的尺度范围通过相加的方式进行组合,从而得到过更广的输出特征,见上图c(讲道理,这个地方的组件设计我是觉得不太理解的,为什么这样设计就能够完成一个更好的尺度覆盖?那是不是我瞎去整一个模块,把所有扩大感受野的结构都加上就行了?)。

    组件的结构如下图所示:

    上述组件作者称之为Dilated encoder,其结构如上图所示,包含两个模块,即projector和4个residual blocks,projector使用1*1的conv,然后使用3*3的conv来提取上下文语义信息,然后堆叠4个不同扩张因子的残差模块已生成多感受野的输出特征(从而覆盖所有尺度)。

    4.2. Imbalance Problem on Positive Anchors

    positive anchor的定义非常关键,基于anchor的检测器中,通过确定anchor与gt的iou来定义阳性样本,在retinanet中,iou大于0.5即定义为正样本,我们称之为max-iou匹配。在MiMo编码器中,以密集的方式在多个级别上预先定义了anchors,而gt框在对应于其比例的特征级别上生成正anchors,通过分而治之的思想,max-iou匹配是的每个比例的gt框都能够生辰足够数量的正样本,但是采用SiSo编码器时,与MiMo编码其中的anchors相比,anchor的数量从100K到5K大大地减少,从而会导致anchor的稀疏。如图6所示,当使用max-iou匹配时,稀疏anchor会给检测器带来一个匹配问题,大的gt框会比小的gt框包含更多的正样本anchor,会导致正样本不平衡的问题,这种不平衡会导致检测器在训练时只会注意大目标从而忽略小目标。

    为了解决正anchor不平衡的问题,作者提出了Uniform matching的策略:对于每个目标框都采用K近临anchor作为正anchor,这就确保了所有的目标框都能够以相同的数量的正anchor进行均匀匹配(paper后续的实验证明这样训练收敛很快),在实现时,作者对uniform matching的iou阈值进行设置以忽略大iou的负样本和小iou的正样本。

4.3. YOLOF

    基于以上的解决方案,paper提出了新的one-stage检测器,称之为YOLOF,同样的基于上述的结构,以backbone、encoder、decoder作为基本组件:

    backbone:采用resnet和resnext系列作为基础backbone,所有的模型在imagenet上进行了预训练,输出的featuremap为c5,具有2048个channels,下采样倍数为32,所有batchnorm参数被冻结。

    encoder:对于编码器(上文中的图5),首先遵循FPN,在主干后添加两个投影层(一个1×1和一个3×3卷积),从而生成具有512通道的特征图。 然后,为了使编码器的输出功能能够覆盖各种规模的所有对象,我们建议添加残差块,该残差块由三个连续的卷积组成:第一个1×1卷积以4的缩小率应用通道缩小,然后是3× 使用带扩张的3卷积来扩大接收场,最后使用1×1卷积来恢复通道数。

    decoder:采用RetinaNet的主要设计,它由两个并行的特定于任务的头组成:分类头和回归头(图9)。paper添加两个小修改。 第一个是我们遵循DETR中FFN的设计,并使两个head中的卷积层数不同。 在回归头上有四个卷积,然后是批处理归一化层和ReLU层,而在分类头上只有两个。 第二个是我们遵循autossign,并为回归头上的每个锚添加隐式目标预测(不需要直接监督)。 通过将分类输出与相应的隐式目标预测相乘,可以生成所有预测的最终分类分数。

    other detail:如前一节所述,YOLOF中的预定义锚是稀疏的,从而降低了锚和gt框之间的匹配质量。 我们在图像上添加了随机移位操作来规避此问题。 该操作将图像随机向左,向右,向上和向下方向最大移动32个像素,旨在将噪声注入到对象在图像中的位置,从而增加了将gt框与高质量锚点匹配的可能性。 此外,我们发现,使用单级预测的功能时,对锚点中心偏移的限制也有助于最终分类。

5、experiments

    作者在coco上做了retinanet、DETR、yolov4的性能对比,如下图所示:

    仔细观察数据,在小目标检测方面,YOLOF要优于DETR,在大目标检测方面,YOLOF要弱于DETR。同时,不得不承认,与sota的工作确实有差异,yolov5x的ap50应该在0.69左右,更先进的检测器ap50应该在0.75左右,因此本文更值得注意的还是速度很精度的均衡。

    paper在experiement中做了相当多的实验,详细比对了YOLOF与yolov4和DETR在收敛速度、精度等对比,此处不再详细展开,有兴趣的童鞋可以根据我的地址下载原文仔细对比。

    我们可以看到,YOLOF虽然相比于当前的sota算法精度依旧有差异,但是这个工作我们认为是一个相当有创新的idea,目前的主流yolo都是在tesla v100上进行测试,而本paper在rtx2080Ti进行测试,我觉得算是一个相当良心的工作了,值得参考。

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值