引言
论文名称:
You Only Look One-level Feature
论文地址:
https://arxiv.org/abs/2103.09460
论文源码:
https://github.com/megvii-model/YOLOF
作者:
旷视&中科院团队
发表时间:
CVPR2021
YOLOF简介
在二阶段和单阶段的SOTA检测器中,特征金字塔网络FPN(feature pyramids networks)已经成为必不可少的重要组件,FPN主要有两个优点:多尺度特征融合(将多个尺度的特征图融合在一起获得更好的表示)和分而治之策略(将不同尺度的目标在不同层次的特征图上检测)。人们普遍认为FPN的成功在于利用了多尺度特征融合,往往忽视了FPN中的分而治之功能,导致很少有研究这两个收益对FPN的成功贡献究竟如何。YOLOF这篇论文就是针对FPN在单阶段检测器中这两个收益的贡献,指出FPN最成功之处是分治的策略而不是多尺度特征融合。
FPN结构图如下:
相关对比工作(证明)
作者在RetinaNet的基础上通过解耦多尺度特征融合和分治功能设计了实验。具体而言,将FPN视作一个多进多出(Multiple-in-Multiple-out,MiMo)编码器,它从骨干网络编码多尺度特征并且为解码器,即检测head,提供特征表示。
如上两图,实验结果表明,SiMo编码器(单进多出)几乎可以获得和MiMo编码器(多进多出,如FPN)相当的表现,它们之间的差距只有0.9 mAP。但要注意,第一,SiMo只使用了C5特征图,没有使用多层特征融合,说明C5特征图已经包含了足够的检测不同尺度目标的上下文信息。第二,相比之下,MiSo(多进单出)和SiSo(单进单出)结构的mAP下降非常大,恰恰说明FPN分治优化的作用远远大于多尺度特征融合(很明显,输出只输出一个后,即抛弃分治之后,无论输入多个特征图还是一个特征图,mAP都下降很多),因此多尺度特征融合可能并非FPN最重要的影响因素,相反,分而治之将不同尺度的目标检测进行拆分处理,缓解了优化问题。
FPN分治策略是一个好的方式,但是它也带来了比较大的内存负担,降低了检测器速度并且使得单阶段检测器的结构比较复杂。考虑到C5特征图其实已经包含了足够的信息用于目标检测,那么有没有其他方式能够处理优化问题呢?
作者为了克服 FPN 存在的内存占用多,速度慢问题,采用了 SiSo 结构,但是精度下降比较严重,mAP从 35.9 变成了 23.7。作者想要只使用32倍下采样的C5特征图,同时为了弥补SiSo编码器和MiMo编码器之间的性能差距,作者首先对编码器的结构进行了适当的设计,以提取不同尺度目标的多尺度上下文特征,弥补多尺度特征的不足;然后,作者采用均衡匹配机制来解决单特征图中稀疏anchor引起的正样本不平衡问题。
YOLOF框架设计思路
YOLOF框架中,有两个核心组件,分别是膨胀编码器(Dilated Encoder)和均衡匹配策略(Uniform Matching),以减轻与FPN的性能差异,它们带来了巨大的性能提升。
MiMo编码器分析
基于RetinaNet,将检测任务的pipeline分为三个部分:backbone、encoder(编码器)、decoder(解码器),如下图所示。
对这三个组件分别实验,得到下图所示的结果:
首先,左边的纵轴表示FLOPs,可以看到相比于SiSo结构,MiMo结构给编码器和解码器带来了巨大的内存开销(134G vs 6G);
然后,右边的纵轴表示模型推理的速度,可以看出MiMo结构同样比SiSo慢了很多,推理速度的变慢主要是因为在高分辨率特征图C3进行目标检测导致(13FPS vs 34FPS);
既然有这么大的劣势,那么自然想设计一种MiMo结构解决优化问题的替代方案,这个方案还要同时保证检测器的简单高效精度高。设计一个SiSo结构取代MiMo结构是YOLOF的出发点,但是这种替换绝非易事,因为上面的实验结果已经表明将MiMo直接换为SiSo会引起巨大的性能下降。作者对此进行了详细分析,发现主要是两个原因造成了这种性能上的大幅度下降:第一,The range of scales matching to the C5 feature’s receptive field is limited,与C5特征图感受野匹配的目标尺度范围是有限的,这阻碍了不同尺度目标的检测表现;第二,The imbalance problem on positive anchors,由于单级特征图上稀疏anchor生成策略造成的正样本不均衡问题。
Limited Scale Range目标尺度范围受限制
识别不同尺寸的目标是目标检测的一个根本挑战,一种常见的方案是采用多级特征。在MiMo与SiMo的Encoder检测器中,它们从不同感受野(P3-P7)的特征图构建多级特征并在和感受野匹配的尺度的感受野级别特征图上进行目标的检测。但在SiSo的Encoder中仅有一个输出特征,以下图(a)为例,C5特征感受野仅能覆盖有限的尺度范围,无法应对目标检测场景中变化剧烈的目标尺寸,当目标尺度与感受野尺度不匹配时就导致了检测性能的下降。
简要理解如下图所示,绿色点表示数据集中的多种目标尺寸,橙色区域代表特征图能够有效表达的目标尺寸范围:
如下图的(a)所示,C5级别的特征图只能覆盖一个受限的感受野,当目标的尺度和感受野不匹配时,检测效果就会很差;
若使用空洞卷积操作来增大 C5 特征图的感受野,则会出现图(b)所示的情况,感受野变大,能够有效地表达尺寸较大的目标,但是对小目标表达能力会变差;
如果采用不同空洞率的叠加,如图(c)所示,能够覆盖多种目标尺寸,则可以有效避免上述问题;
因此,必须找到一个方案让SiSo结构输出多感受野的特征图。为此,作者设计了 Dilated Encoder 结构,串联多个不同空洞率的模块以覆盖不同大小物体,改善感受野单一问题。如下图所示,它包含先后两个组件,分别是 Projector 和 Residual Blocks 。首先应用一个1×1的卷积层来降低通道维数,然后添加一个3×3卷积层来细化上下文语义信息,这与FPN一致。然后,叠加连续4个卷积核膨胀率不同的残差块,生成具有多个感受野的输出特征,覆盖所有对象的尺度。
对 C5 特征先进行压缩通道,然后串联 4 个不同空洞率的残差模块,从而得到不同感受野的特征图。其实这种做法,在语义分割算法 ASPP 中和目标检测算法 RFBNet 都采用了类似思想,只不过这两个都是并联结构,而本文是串联, RFBNet 结构如下所示:
Imbalance Problem on Positive Anchors正样本不均衡
前面说过 FPN 的核心功能是分治手段,但是我们知道虽然其输出多个尺度特征图,但是要想发挥分治功能则主要依靠 bbox 正负样本分配策略,也就是说 FPN 和优异的 bbox 正负样本分配策略结合才能最大程度发挥功效。大部分最新的单阶段目标检测算法都在 bbox 分配策略上面做文章,可以借用 AutoAssign 论文中的图说明:
为了充分发挥 FPN 功效,一般会从 scale 和 spatial 两个方面着手进行设计,scale 用于处理不同尺度大小的 gt bbox 应该属于哪些输出层负责,而 spatial 用于处理在某个输出特征图上哪些位置才是最合适的正样本点。不同的 bbox 正负样本分配策略对最终性能影响极大。
一般来说,由于自然场景中,大小物体分布本身就不均匀,并且大物体在图片中所占区域较大,如果不设计好,会导致大物体的正样本数远远多于小物体,最终性能就会偏向大物体,导致整体性能较差。YOLOF 算法采用单尺度特征图输出,锚点的数量会大量的减少(比如从 100K 减少到 5K),导致了稀疏锚点,如果不进行重新设计,会加剧上述现象。为此作者提出了新的均匀匹配策略,核心思想就是不同大小物体都尽量有相同数目的正样本。
正样本的定义对于目标检测问题的优化至关重要,在anchor-based方法中,正样本的定义是基于anchor和GT框之间的IoU进行的,在RetinaNet中,如果一个anchor和GT框之间的最大IoU大于一个给定的阈值,这个anchor就是一个正样本。这个策略称为Max-IoU匹配。
在MiMo结构中,anchor以一个密集平铺的方式在多层特征图上预定义,GT框根据尺度在不同级别的特征图上产生正样本。在分治策略下,Max-IoU匹配使各尺度的Gt框可以产生足够数量的正anchor(上述的正样本)。然而,当采用SiSo编码器时,anchor的数量比MiMo编码器中的anchor的数量减少了很多,从100k减少到5k,导致anchor是非常稀疏的。对稀疏的anchor采用Max-IoU匹配会引起一个问题,如下图所示,大GT框比小GT框会产生更多的正anchor,从而造成了正anchor的不平衡问题。这会导致检测器只关注大目标的训练,而忽略小目标检测的优化。
因此,作者设计了一个均衡匹配策略(Uniform Matching) ,即对每个GT框而言,只采用最接近的k个anchor作为正anchor,这就能如上图一样保证每个GT框不论尺寸大小都有相同数目的正anchor。平衡的正样本确保所有的GT框平等地参与训练。同样,作者也设置阈值来过滤大IoU的负样本和小IoU的正样本。Uniform Matching 作用非常大,说明该模块其实发挥了 FPN 的分治作用。
Dilated Encoder 配合 Uniform Matching 可以提供额外的变感受野功能,有助于多尺度物体预测,所提两个模块的作用如下所示:
YOLOF框架
基于上述的两种解决方案,作者提出了一种只使用单级别特征图的简单目标检测框架——YOLOF,它包含三个主要部分:backbone、encoder、decoder。
BackBone。在所有模型中,作者采用了经典的ResNet与ResNeXt作为骨干网络,所有模型在ImageNet上与训练,选择输出C5特征,该通道数为2048,下采样倍率为32;
Encoder。在这部分,作者参考FPN,对backbone输出添加了两个投影层(由1x1卷积和3x3卷积组成),将通道数降到512,然后为了获得全尺度感受野,作者使用了一种残差模块,它由三个卷积组成,第一个1x1卷积通道减少4倍,然后一个3x3膨胀卷积用于增大感受野,最后的1x1卷积恢复通道维度,这个残差块会重复堆叠四次。
Decoder。在这部分,作者采用了RetinaNet的主要设计思路,它包含两个并行的任务相关的Head,分别用于目标分类和边框回归。作者主要做了两个微小改动:(1) 参考DETR中的FFN设计让两个Head的卷积层数量不同,回归Head包含4个卷积层加上BN层和ReLU层,而分类Head则仅包含两个卷积层;(2) 作者参考AutoAssign在回归Head上对每个锚点添加了一个隐式目标预测objectness,最终的分类置信度由分类分支的输出和objectness得分相乘得到。
实验
作者在MS COCO数据集上与RetinaNet、DETR、YOLOv4进行了对比。
上表给出了所提方法与RetineNet在COCO数据集上的性能对比。从中可以看到:
YOLOF取得了与改进版RetinaNet+相当的性能,同时减少了57%的计算量,推理速度快了2.5倍;
当YOLOF采用ResNeXt作为骨干网络时,它可以取得与RetinaNet在小目标检测方面相当的性能且推理速度同样相当。
上表给出了所提方法与DETR的性能对比,从中可以看到:
YOLOF取得了与DETR相匹配的的性能,在小目标检测方面,YOLOF要优于DETR;在大目标检测方面,YOLOF要弱于DETR;在收敛方面,YOLOF要比DETR快7倍,这使得YOLOF更适合于作为单级特征检测器的基线。
最后,上表给出了与YOLOv4的性能对比,从中可以看到:
YOLOF-DC5取得了比YOLOv4快13%的推理速度,且性能高0.8mAP;在小目标检测方面弱于YOLOv4,而在大目标检测方面显著优于YOLOv4;
总结
YOLOF详细分析了FPN成功的核心因素是分治策略,并提出了一种使用单级特征图进行处理的设计方案。
参考链接
1、https://blog.csdn.net/zhouchen1998/article/details/115165988?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164942039016780269888433%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164942039016780269888433&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-115165988.142v7pc_search_result_control_group,157v4control&utm_term=yolof&spm=1018.2226.3001.4187
2、https://zhuanlan.zhihu.com/p/370758213