论文: Feature Pyramid Networks for Object Detection.
代码: https://github.com/unsky/FPN.
1. 生成特征的4种方法
一般来说,我们认为在利用CNN对物体进行检测时,
- 浅层网络感受野小、分辨率高,其得到的低阶特征由于具有丰富的细节信息,更适合用于小目标或简单目标的检测;
- 深层网络感受野大、分辨率低,其得到的高阶特征由于具有丰富的语义信息,更适合用于大目标或复杂目标的检测。
1.1 Single feature map
这是最普通的特征生成方法,常见于 VGG 等分类网络和 R-CNN、Fast R-CNN、Faster R-CNN等目标检测网络中。该方法使用网络的最后一层特征进行预测,其优点是计算简单、对计算机的计算能力和内存大小的要求较小。但因为它在预测时只利用了高阶特征的语义信息,而忽略低阶特征的细节信息,所以对小目标的检测效果不是很好。
例如 VGG16的最后一层特征对应的下采样率 stride=16,若原图大小是 512 × 512 512\times512 512×512,经过网络后最深一层的特征图大小是 32 × 32 32\times32 32×32,可理解为特征图上一像素点映射原图中一个 16 × 16 16\times16 16×16的区域;那这个是不是就表示,如果原图中有一个尺寸小于 16 × 16 16\times16 16×16的小物体,网络就会忽略掉该物体,从造成漏检呢!所以,使用 Figure1.(b)的Single feature map会造成检测小物体的性能急剧下降。
1.2 Featurized image pyramid
1.1节指出,单层检测会丢失细节特征,我们很容易想到的就是利用图像的各个尺度进行训练和测试,这就是如图 Figure1.(a)所示的方法,实际上就是我们熟知的图像金字塔,即:对某一图像进行缩放以得到不同尺寸的输入图像,然后采用 Figure1.(b) 所示的同一个网络对于这些不同尺寸的图像来生成不同尺寸的高级特征,最后利用这些特征进行预测。
我们在很多传统算法中都能见到图像金字塔的影子,但是在深度学习中,该算法的应用却不是很广泛,很多深度目标检测算法,如 Fast R-CNN、Faster R-CNN 都只不使用该方法,而只采用1.1节的方法,原因是计算量大,推断时间长(例如,采用4种尺寸的输入图像,推断时间将增加4倍)。
1.3 Pyramidal feature hierarchy
实际上,1.2节的图像金字塔就是想利用多尺度的特征来做检测, 从而使用同一模型来提取不同尺寸的图像来获得这些不同尺寸的特征,这样做无疑是非常耗时的,为了节约时间,我们可以直接使用卷积网络中产生的各层特征图分别进行预测,于是就有了 Figure1. ( c ) 的方法,它的设计思想就是同时利用低层特征和高层特征,分别在不同的层同时进行预测,这是因为一幅图像中可能具有多个不同大小的目标,区分不同的目标可能需要不同的特征,对于简单的目标我们仅仅需要浅层的特征就可以检测到它,对于复杂的目标我们就需要利用复杂的特征来检测它。整个过程就是首先在原始图像上面进行深度卷积,然后分别在不同的特征层上面进行预测。它的优点是在不同的层上面输出对应的目标,不需要经过所有的层才输出对应的目标(即对于有些目标来说,不需要进行多余的前向操作),这样可以在一定程度上对网络进行加速操作,同时可以提高算法的检测性能。它的缺点是获得的特征不鲁棒,都是一些弱特征(因为很多的特征都是从较浅的层获得的)。
该方法最早应该是由 SSD 提出的多尺度卷积,但 SSD 的多尺度实际上只有中高阶特征,而没有低阶特征,而 FPN 的作者指出,这些低阶特征的细节信息对于小目标的检测是非常重要的。
1.4 另一种特征融合方法(非FPN)
在介绍我们的主角FPN出场之前,我们再来看另外一种特征融合的方法,如下图所示:
该方法可以说是Figure1.©的发展,其存在以下两个缺点:
- Figure1.( c )的高阶特征虽然具有丰富的语义信息,它能帮助我们对大部分目标进行识别和检测,但由于它缺乏细节信息,所以如果单独使用它来做预测,会造成小目标检测性能的下降;
- Figure1.( c )的低阶特征虽然具有丰富的细节信息,它在一定程度上有利于我们对小目标进行识别和检测,但由于它缺乏语义信息,所以如果单独使用它来做预测,可能会造成误检率上升;
对此,有人就提出了上图的特征融合方法,对不同尺寸的特征进行融合,高阶特征的丰富语义信息,可以指导低阶特征去识别和检测小目标,减小误检率。
细心的人会发现,这种方法只使用融合后的最后一层特征进行预测,这并不是我们所讨论的多尺度特征预测啊!
让我们带着这个疑问,迎来今天的主角——FPN
2. FPN
既然1.4节的方法采用了特征融合后,没有采用多尺度特征预测,那么FPN就来采用多尺度特征。
FPN包含3个部分:
- 自下而上的特征提取通道(Bottom-up pathway):用于特征提取,每一阶段(多个卷积层组成一个阶段)的下采样率为2,每一阶段的最后一层输出作为后续特征融合部分的输入。
- 自上而下的特征融合通道(Top-down pathway):用于多尺度特征融合,上采样率为2,每一层的输出可作为最终特诊,用于预测。
- 横向连接(lateral connections):用于上述两个通道的连接。
注意:每一层融合之后还会再采用 3 × 3 3\times3 3×3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应(aliasing effect)。
FPN的优点:
-
多尺度特征融合:对不同尺寸的特征进行融合,高阶特征的丰富语义信息,可以指导低阶特征去识别和检测小目标,减小误检率。对于小物体,一方面我们需要高分辨率的feature map更多关注小区域信息,另一方面,需要更全局的信息更准确判断小物体的存在及位置。
-
多尺度特征预测:使用融合后的多尺度特征进行同时预测,融合后的高阶特征仍具有丰富的语义信息,适合识别和检测大部分物体;融合后的低阶特征不仅具有细节信息,还具有部分语义信息,能够更加准确地识别和检测小物体。
-
可以在几乎不增加额外计算量情况下解决多尺度检测问题。
对于特征融合,PAN提出了“自上而下+自下而上”的特征融合,此外,还有很多种特征融合方法。
更多特征融合方式,请参考:
[1]: 目标检测 | 盘点目标检测中的特征融合技巧(根据YOLO v4总结).