前言
解决目标检测任务中目标实例的尺度变化问题一般有两种方法:
- 图像金字塔(image pyramid),即对输入图像进行一系列的缩放,只在测试时被使用。这种方法会占用大量内存并且计算很复杂;
- 特征金字塔(feature pyramid),训练和测试时都可以使用。与图像金字塔相比,它占用的内存和计算开支都很少。
如下图所示,有四种不同构成方式的特征金字塔:
在SSD中,独立地利用了主干网络的最后两层,和经过步长为2的卷积得到的另外4个层来构成特征金字塔。在STDN中,只用了DenseNet的最后一个dense块,通过池化和尺度变换操作得到特征金字塔。在FPN中,通过top-down的通路和横向连接将深层特征和浅层特征融合起来,得到特征金字塔。以上方法构建的特征金字塔有以下两个缺点:
- 金字塔中的特征图对目标检测任务来说不够典型(表达能力不够),它们只是简单的从主干网络的不同层中构造,并且主干网络是被设计进行目标分类任务的;
- 特征金字塔中的每个特征图仅来自主干网络中的单一层,只包含单层信息。
一般来说,深层的高级特征有助于分类,浅层的低级特征有助于目标位置的回归。而且,低级特征适合于表征外观简单的目标,而高级特征适合于表观外观高级的目标。在实际中,如果两个目标的尺度相同,但它们的外观复杂度可能会不同。比如,红绿灯和较远处的行人的大小可能是一样的,但明显行人的外观复杂度更高。因此,以上方法的检测器的性能不佳主要是因为,特征金字塔中的特征图只包含单极特征。
为了克服以上方法的缺点,本文提出了一种效率更高的特征金字塔结构MLFPN(Multi-Level Feature Pyramid Network),它包括三个模块:FFM,TUM和SFAM。MLFPN的工作方式如下:
- 首先FFMv1将主干网络提取的多级特征进行融合,作为base feature;
- 将base feature送入交替连接的TUM和FFM中,提取出更典型的多级多尺度特征。具体来说就是,每个TUM生成一组尺度不同的特征图,FFMv2将base feature和前一个TUM生成的最大的特征图融合起来,送入下一个TUM中,最终通过交替连接的TUM和FFMv2提取出多层级多尺度的特征。注意第一个TUM不包含任何其他TUM的信息;
- 最后SFAM将多组多尺度特征图中相同尺度的特征图组合起来,构成最终的特征金字塔。从下图可以看出,特征金字塔中的每一层都包括不同层级的特征图。
为了评估MLFPN的效率,论文还设计了一个端到端的one-stage的目标检测模型,称为M2Det,它是通过将MLFPN整合进SSD的结构得到的。主干网络和MLFPN提取出输入图像的特征,然后和SSD一样,生成密集的bbox和类别得分,最后通过NMS操作产生最终的预测结果。
MLFPN的结构
MLFPN输出的多层级多尺度特征图可以被计算为:
其中是base feature,表示第个TUM中第种尺度的特征,表示TUM的数量,表示第个TUM的处理过程,表示FFMv1处理过程。
1. FFMs
FFMs将M2Det中不同层级的特征融合起来,为生成最终的多层级多尺度的特征图做准备。在融合时需要用1x1的卷积对输入特征的通道数进行压缩。
如上图所示,FFMv1的输入是主干网络中两个不同尺度的特征图,深层特征的大小为1024x20x20,浅层特征的大小为512x40x40。在融合时,需要对深层特征进行2x2的上采样操作,将其变为256x40x40,然后和浅层特征连结,生成768x40x40的base feature。
上图是FFMv2的融合过程。FFMv2将base feature和前一个TUM生成的最大的特征图连结起来,这两个特征的尺度是一样大的,都是40x40,因此不必再做上采样。
2. TUMs
TUMs采用了更薄的U型结构,如下图所示:
其中encoder是一系列步长为2的3x3的卷积层,就是图中上半部分的U型结构。decoder将ecoder的输出作为特征图的参考,因为ecoder的输出并不直接作为最终的特征图,还要由decoder对它们进行处理。在上采样和element-wise相加操作之后,在decoder分支(也就是图中下半部分的6个卷积层)中添加1x1的卷积,以增强学习能力并保持特征的平滑度。每个TUM中的decoder的所有输出构成了当前层级的多尺度特征图。如上图所示,所有decoder的输出构成的是当前这个层级的多尺度特征图。从整体来看,所有TUM的输出共同构成多尺度多层级的特征图。其中,靠前的TUM提供的是浅层特征,中间的TUM提供的是中级特征,后面的TUM提供的是高级特征。
3. SFAM
SFAM将TUM生成的多层级多尺度特征图聚合成一个多层级特征金字塔,如下图所示:
首先first stage沿着通道维度将相同尺度的特征图进行连结,这样多层级金字塔中的每个尺度都包含了多个层级的特征。在second stage,借用SE bolck,引入channel-wise attention module,以更好的捕捉有用的特征。在最终得到的多层级特征金字塔中,每一层都包含不同层级的特征图,也就是multi-level。TUM数量为8,每个TUM输出6个不同尺度的特征图,因此最终生成的多层级特征金字塔共有6层,每层包括8个不同层级的特征图。
网络的训练
预训练
在ImageNet 2012数据集中先对主干网络进行预训练。MLFPN的默认配置包括8个TUM,每个TUM有5个卷积层和5次上采样操作。为了减少参数的数量,TUM生成的不同尺度的特征图的通道数被设置为256。输入图像的大小为320,512和800。
训练检测器
在多层级特征金字塔的每一层(共有6层)添加两个卷积层,分别进行回归和分类操作。在每一层的每个像素上设置6个anchor,有3种长宽比。之后以0.05的阈值过滤掉大多数得分较低的anchor。然后用soft-NMS得到更多更精确的box。