tags: 单阶段;多尺度特征金字塔

代码: https://github.com/qijiezhao/M2Det
地址:https://arxiv.org/abs/1811.04533

前言

FPN现在已经是目标检测的标配,其利用自底向上的特征金字塔搭建成自顶向下的特征,从而利用这些特征进行预测,在一定程度上解决了不同尺度目标的检测。然而,卷积层的金字塔形式最原始的设计是用来解决分类问题,与检测问题有所区别。

本文尝试搭建更为有效的用于检测的特征金字塔:

  1. 将不同卷积层的特征进行融合,作为基础特征。
  2. 将基础特征送入类似U型的模块中进行编解码,并与基础特征进行融合,产生多层多尺度特征
  3. 最终将多层、多尺度特征进行聚合,构建检测金字塔进行密集采样检测。

M2Det目标检测

各种金字塔

提出缘由

现有的基础网络的目标都是针对图像分类而言的,因此对于检测任务并不是十分友好。而且现有的金字塔基本上都是从础框架中的某一特征层建立的,缺乏足够信息。深层次的特征对于分类而言,更具有说服力;而浅层次的特征对于目标的位置更友好。而且,浅层特征对于描述目标的简单特征更有力,深层特征对于描述目标的复杂特征更有力。然而,对于比如远处的人和近处的交通标志而言,其在某个特征层可能具有同样大小,但其特征复杂性却完全不同。所以,对于单层特征来说,要么对简单特征有很好的表达能力,要么对复杂特征有很好的表达能力,两者之间是不能同时满足的。因此如何解决这个问题就是本文算法的思路。

M2Det

M2Det目标检测

M2Det整体框架

网络同样是密集采样的形式,一共包含三个模块:

  1. 特征融合模块(Feature Fusion Module, FFM)
  2. U型模块(Thinned U-shape Module,TUM)
  3. 基于尺度的特征增强模块(Scale-wise Feature Aggregation Module, SFAM)

从上图中可以看到,FFMv1将主干网络中的语义特征进行了融合,得到了基础特征(base feature);TUM和FFMv2模块交替 ,前者从基础特征中提取多尺度特征,后者将基础特征与TUM产生的特征进行融合,最终将这些多尺度特征送入SFAM模块中,构建了基于不同尺度特征的金字塔,并进行了多层次的划分。

以VGG为例,具体如下:

  1. FFMv1将conv4_3,conv5_3的特征进行融合,产生基础特征
  2. 每个TUM都产生若干个不同尺度的特征图,而FFMv2负责将TUM产生的这些特征图与基础特征进行融合,然后送入下一个TUM中进行特征提取,反复交替。用公式表示如下:

M2Det目标检测
第一个TUM只接受基础特征作为输入,后面TUM接受的是FFMv2的处理结果,而FFMv2要将基础特征和第一个TUM的处理结果相融合。

  1. SFAM模块将前面TUM产生的多层次、多尺度的特征进行融合,采用的方式是:尺度层面的特征拼接和通道层面的注意力机制

M2Det目标检测

FFMv1结构

该结构中,conv5_3经过conv之后变为20x20x512,上采样之后变为40x40x512;conv4_3经过conv之后,变为40x40x256,然后将这两个结果特征图进行拼接,最终产生的维度为768x40x40,也就是基础特征图

M2Det目标检测

FFMv2结构

768x40x40大小的基础特征经过conv之后,变为40x40x128,与TUM产生的128x40x40特征进行拼接后,变为256x40x40

M2Det目标检测

TUM结构

TUM接收FFMv2的结果作为输入,经过内部的一个类似U型的编码-解码操作,产生了不同尺度的分支,这些分支用来预测不同大小的目标。上面的TUM负责预测小目标,中间的为中等目标,下面的为大目标。

M2Det目标检测

SFAM结构

该层是为了将前面各个TUM模块的结果进行汇合,从而产生多尺度,多层次的特征金字塔。聚合的过程如上图:因为前面的每个金字塔都有6中不同大小的尺度,分别为1x1,3x3,5x5,10x10,20x20,40x40,那么在该层中,通过将三种TUM模块中尺度对应的特征图进行拼接,这样就形成了6种拼接之后的特征图,其大小不变,厚度却增加了。然而,仅仅通过增加厚度还不够理想,所以通过了一个SE模块,使金字塔各层更关注于与自己更适应的目标尺度。

训练问题

太耗时!太耗内存!

实验结果

数据集coco

M2Det目标检测

M2Det目标检测

M2Det目标检测

总结

本文提出了新的构建特征金字塔的方式,比FPN使用的基础层少,而且效果还不错。虽然整体框架看着很复杂,但是不难理解,佩服作者的脑洞。等硬件资源充足了,可以试试!