M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network
写在前面
在目标检测任务中,目标的尺度缩放一直是一个棘手的问题。
特征金字塔是解决这一问题的有效方法,目前有两种手段:
- 检测图片金字塔,这种方法只能在预测时使用,同时会显著增加时间和内存消耗
- 使用特征金字塔,这种方法在训练和预测时都可以部署,且增加的时间和内存消耗相对较少,同时保存了深度学习模型的端到端特点
本文在总结了第二种方法的几个经典模型的不足以后提出了自己的方法MLFPN
,并将其融合进了SSD
,取得了COCO
数据集上AP41.0,FPS 11.8
的成绩,加上图片金字塔的辅助,可以达到AP44.2
的准确率
主要思想
作者认为现有的特征金字塔方法都有一定的不足,文章列举了SSD,FPN,STDN
网络的特征融合方法,如下图所示
作者认为:
- 特征金字塔中的特征图表征能力不足,因为它只由backbone网络中的特征图构成
- 特征金字塔中的特征图主要来源于或者仅来源于backbone网络中的一个层级的特征信息
作者的模型从这两个角度进行了改进,命名自己的特征金字塔网络为MLFPN
,并将其融合进了one-stage
目标检测网络SSD
中,模型命名为M2Det
MLFPN
由以下三个部分组成:
- Feature Fusion Module(FFM):FFMs融合M2Det不同层层级的特征
- Thinned U-shape Module(TUM):TUM以U形结构提取融合后的特征
- Scale-wise Feature Aggregation Module(SFAM):SFAM集合TUMs生成的多层级特征
关键点
FFMs:
FFMs融合了M2Det的不同层级特征
FFMv1融合了backbone不同层级的特征,其中用到了一个upsample
操作
FFMv2融合了backbone特征和前一个TUM输出的特征,没有upsample
,输出给下一个TUM作为输入
TUMs:
TUM采用了一种较窄的U形结构
encoder以3x3,step为2进行卷积;decoder将其输出还原
并且作者在最后加了element-wise sum
操作是为了增加学习能力和特征的平滑性
SFAMs:
SFAM将TUMs产生的多层级特征整合起来,采用的是通道维度上的concat操作
在这之后,作者采用了SE block
的自注意力机制来进一步提升性能
开源代码
本文作者开源了Pytorch
代码,版本0.4.0,CUDA9,CUDNN7
: M2Det
参考文献
M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network