文介绍 CVPR 2021 接收的目标检测论文 You Only Look One-level Feature。
原论文作者来自:中科院自动化所、中科院大学人工智能学院、中国科学院脑科学与智能技术卓越创新中心、旷视科技。
0 动机
在高性能的目标检测网络中,特征金字塔网络(Feature Pyramid Network,FPN)是一个不可或缺的组成部分。作者认为FPN主要有2个作用:
其一是多尺度特征融合,提高了特征的丰富程度;
其二是使用分治法(divide-and-conquer),将目标检测任务按照目标尺寸不同,分成若干个检测子任务。
为了探索FPN的上述2个作用对检测器性能的贡献程度,作者做了一个实验,作者将检测器抽象成如下图所示个3个组成部分
编码器(Encoder)处理Backbone提取的特征,将处理结果传输给解码器(Decoder)用于分类和回归。
FPN可以看作一个MiMo(Multiple-in-Multiple-out)编码器,作者还设计了SiMo(Single-in-Multiple-out)、MiSo(Multiple-in-Single-out)、SiSo(Single-in-Single-out)编码器,这4种编码器的结构如下图所示:
上图中图(a)就是RetinaNet中的FPN,方框左侧的C3、C4、C5代表Backbone输出的特征,方框右侧的P3~P7代表传入Decoder的特征。
分别使用图(b)、(c)、(d)中的结构代替RetinaNet中的FPN,使用ResNet-50作为RetinaNet中的Backbone,分别训练4个网络并在COCO验证集上测试,结果如下图所示:
从上图中可以看出,使用MiMo和SiMo作为编码器,性能相近;使用MiSo和SiSo作为编码器,性能较差。这种现象说明了如下问题:
相比于MiMo,SiMo只使用Backbone输出的C5特征作为输入,使用SiMo作为编码器构建的网络性能基本与MiMo相当,说明Backbone输出的C5已经包含了足够的信息用于构建高性能检测器;
相比于MiMo和SiMo,使用单一输出的MiSo和SiSo作为编码器构建的网络性能较差,说明使用“分治法”将目标检测问题以目标尺寸为依据分解为多个子问题,对于构建高性能网络的贡献很大。
通过上述实验可知,使用Backbone输出的单一特征和分治法,即上图中图(b)的结构,就可以构建一个很好的检测网络。但是使用图(b)的结构会使得模型变庞大和复杂,因为编码器要输出多个特征。
基于上述发现,作者提出了YOLOF(You Only Look One-level Feature)网络,在YOLOF中,编码器只用到了Backbone输出的C5特征,同时避免使用上图中图(b)的SiMo复杂结构,而是使用了图(d)的SiSo结构以减少计算量。
使用MiMo(即FPN)的RetinaNet、使用SiSo的RetinaNet和使用SiSo的YOLOF的计算量、帧率和在COCO数据集上的精度如下图所示:
Decoder和Encoder是有强耦合关系的,因此Decoder的结构受Encoder输出特征的影响,所以作者将Decoder和Encoder的计算量叠加在一起显示。
上图中的4个模型均使用ResNet-50作为Backbone,FLOPs是在COCO验证集上前100张图片中将图片短边尺寸resize成800个像素计算得到,FPS是在2080Ti GPU上测量,设置batch size为1,使用Detectron2里面的测量工具,C表示Encoder和Decoder使用的通道数量。
从上图可以看出,使用SiSo的RetinaNet在运行速度上优于使用MiMo的RetinaNet,但是精度比较低;而作者提出的YOLOF网络同样使用了SiSo的Encoder,在保持高帧率的同时拥有高精度。
1 使用Dilated Encoder模块代替FPN
依前文所述,使用SiSo替代MiMo会引起较大的性能损失,作者认为,SiSo Encoder只使用了Backbone中的C5特征作为输入,而C5特征的感受野所对应的目标尺寸范围是受限的,无法应对目标检测场景中变化剧烈的目标尺寸。如下图所示:
上图中绿色的点表示数据集中的多种目标尺寸,粉红色的区域代表特征能够有效表达的目标尺寸范围,使用C5特征作为输入的SiSo Encoder,会发生上图中图(a)所示的情况。
若使用空洞卷积(Dilated Convolution)操作以增大C5特征的感受野,则会发生上图中图(b)所示的情况,感受野变大,能够有效地表达尺寸较大的目标,但是对小目标表达能力变差。
作者提出了一个SiSo Encoder的新结构,将其称作Dilated Encoder,该结构能够融合多种尺寸的感受野,从而能检测尺寸变化范围大的多种目标,达到上图中图(c)所示的效果。
Dilated Encoder的结构如下图所示:
从上图中可以看出,Dilated Encoder将Backbone输出的C5特征作为输入,使用1x1卷积减少通道数目,接着使用3x3卷积精炼语义信息,紧接着是4个连续的空洞残差单元(Dilated Residual Block),这4个空洞残差单元中3x3卷积的dilation rate不一定相等。
使用4个连续的空洞残差单元可以在one-level feature中包含具有多种不同感受野的特征,以应对不同的目标尺寸。
2 解决positive anchor不均匀问题
在RetinaNet中,如果某个anchor和目标的ground truth的最大IoU超过0.5,则该anchor为positive anchor,作者将这种选取positive anchor的方法称作Max-IoU Matching。
由于RetinaNet的Encoder使用了MiMo结构,预定义的anchor数量很多,使用Max-IoU可以在multi-level上选择和目标尺寸匹配的positive anchor,因而可以产生大量的positive anchor。
YOLOF的Encoder使用了SiSo结构,相比于使用MiMo结构的RetinaNet,预定义的anchor数量会少很多,若使用Max-IoU Matching选择positive anchor,ground truth尺寸大的目标产生的positive anchor要多于ground truth尺寸小的目标产生的positive anchor,如下图所示,这种现象会导致网络在训练时更关注大尺寸的目标,忽略小尺寸目标。
为了解决positive anchor对于目标尺寸分布不均匀的问题,作者提出了Uniform Matching方法:对于每个目标,都将和该目标ground truth最近的k个anchor作为该目标的positive anchor,从而保证每个目标都有相同数量的positive anchor,如上图所示,保证网络训练时能兼顾尺寸大小不同的目标。
在实际应用中,为了避免一些极端情况,忽略Uniform Matching方法中产生的与ground truth的IoU大于0.7的negative anchor和与ground truth的IoU小于0.15的positive anchor。
3 YOLOF网络结构
基于上述方法,作者构建了YOLOF网络,其结构如下图所示:
下面依次介绍YOLOF网络的Backbone、Encoder和Decoder。
3.1 Backbone
作者分别使用了ResNet和ResNeXt这2种Backbone实现YOLOF,Backbone使用了在ImageNet数据集上预训练的模型。对于Backbone的输出,作者实现了2个版本,其一为相对于输入图像采样率为32、通道数2048的feature map,即网络结构图中的C5;
其二为相对于输入图像采样率为16、通道数为2048的feature map,即网络结构图中的DC5。
3.2 Encoder
使用上文介绍的Dilated Encoder作为YOLOF的Encoder。Dilated Encoder将Backbone输出的特征作为输入,首先使用1x1卷积和3x3卷积减少特征通道数至512,然后使用4个连续的残差模块提取特征。
在每个残差模块中,首先使用1x1卷积将特征通道数减少至原来1/4,然后使用3x3的空洞卷积增大感受野,最后使用1x1卷积将特征通道数扩充4倍。4个残差模块中空洞卷积的dilation rate分别为2、4、6、8。
3.3 Decoder
Decoder部分与RetinaNet中的设置类似,主要有如下2个区别:
在回归分支中包含4个Conv-BN-ReLU操作,在分类分支中包含2个Conv-BN-ReLU操作;
回归分支中的每个anchor都有一个objectness prediction,最终的分类得分由分类分支的输出乘以objectness prediction得到。
4 实验
YOLOF使用8个GPU在COCO训练集上训练,batch size为64,优化器为synchronized SGD,推理时使用的NMS阈值为0.6。
作者将YOLOF与RetinaNet进行对比,训练完成后,在COCO验证集下测试,结果如下图所示,图中schedule为“1x”的模型在训练时将输入图片的最短边设置为800个像素,且最长边不超过1333个像素。
上图中最上面一组为使用了Detectron2中的设置训练的RetinaNet;中间一组为使用了与YOLOF一致的设置训练的RetinaNet,比如使用generalized IoU去衡量回归损失,在检测头中使用GN替代BN等;
最后一组为YOLOF的测试结果,表中的YOLOF使用ResNet-50作为Backbone,YOLOF-R101使用ResNet-101作为Backbone,YOLOF-X101使用ResNeXt-101-64x4d作为Backbone。上图中的最后两行分别表示多尺度训练单尺度测试和多尺度训练多尺度测试的结果。
为了与DETR合理对比,YOLOF模型使用了多尺度训练方式,在COCO验证集上进行测试,与DETR对比的实验结果如下图所示:
由于YOLOv4在训练时使用了数据增强和3阶段的训练方法,为公平对比YOLOF同样使用了上述方法训练,并且将Dilated Encoder中残差模块的数量增加至8个,8个残差模块中空洞卷积的dilation rate为1、2、3、4、5、6、7、8。
使用CSPDarkNet-53作为Backbone,使用Backbone输出的DC5特征,使用LeakyReLU替代Encoder和Decoder中的ReLU,在COCO测试集上的实验结果如下图所示:
图中的FPS是按照YOLOv4的测试方法得到的,即将卷积层和BN层融合且将模型转换为半精度模型,进行FPS的测量。
5 总结
通过实验分析了FPN成功的最重要原因,即使用分治法(divide-and-conquer)解决目标检测问题;
提出Dilated Encoder结构用来提取多尺寸感受野的特征,替代了FPN,减小了模型复杂度和计算量;
使用Uniform Matching方法解决positive anchor在尺寸不同的目标上分布不均匀的问题;
以Dilated Encoder代替RetinaNet中的FPN模块,构建了YOLOF,并通过实验证明了YOLOF的高效性。
源码:https://github.com/megvii-model/YOLOF
论文:You Only Look One-level Feature