1 特征金字塔
特征金字塔(Feature Pyramid Networks, FPN)的基本思想是通过构造一系列不同尺度的图像或特征图进行模型训练和测试,目的是提升检测算法对于不同尺寸检测目标的鲁棒性。但如果直接根据原始的定义进行FPN计算,会带来大额的计算开销。为了降低计算量,FPN采用一种多尺度特征融合的方法,能够在不大幅度增加计算量的前提下,显著提升特征表达的尺度鲁棒性。
1.1 特征金字塔结构
在实际场景中,同一个目标物体,会因为拍摄距离不同,呈现出不同的尺度。识别不同尺度的目标,是计算机视觉中一个重要问题。一个常规的解决策略是用原图生成一系列缩放比例不等的图像,将这些图像按照面积从小到大的顺序排列起来,就构成了一个图像金字塔。如图a所示,对图像金字塔的每一层提取特征,应用检测算法只要在任意层检测到了目标,都算检测成功。但是,在实际应用中,基于神经网络的方法本身就非常耗时,如果再使用多个尺度的图像特征进行训练和测试,时间和内存的开销就更大了,因此这种方法很少被真正使用。
如图b所示,卷积神经网络本身也具有金字塔结构,在特征图的不同层上,同样大小的检测窗口在原图的感受野的尺度是不同的。如图c所示,可以同时使用不同层特征图检测不同尺度的目标,SSD方法采用的就是这个思路。但这也存在一个问题,特征图不同层次特征的表达能力不同,浅层特征主要反映明暗、边缘等细节,深层特征则反映更丰富的整体结构。单独使用浅层特征是无法包含整体结构信息的,会减弱特征的表达能力。
因为深层特征本身就是由浅层特征构建的,所以天然包含了浅层特征的信息,一个很自然的想法是,如果再把深层特征融合到浅层特征中,就兼顾了细节和整体,融合后的特征会具有更为丰富的表达能力。图d显示了这一策略的实现方式,在特征金字塔上选取若干层,这些层本身构成了一个由浅到深的层次关系,再把深层特征逐级向浅层合并,就构成了一个新的特征金字塔,这个新金字塔的每一层都融合了浅层和深层的信息,分别应用每一层的特征进行检测,就达到了检测不同尺度目标的目的。我们将这种构造特征的方法称为特征金字塔方法,这种方法利用了网络本身的层次结构,提供了基于原图的端到端的训练方法,能够在不显著增加计算开销和内存开销的情况下,实现多尺度目标检测。
FPN的网络结构本质上也是一种全卷积网络,以任意尺度的图像作为输入,对于每一个卷积主干,所输出的各层特征图的尺度分别与原始图像的尺度保持固定的比例。FPN构造特征包括自下而上(bottom-up)、自上而下(top-down)以及同层连接3个过程,下面将对其进行详细说明。
自下而上的过程实质上是卷积网络前向传播的过程。比如ResNet网络在前向传播的过程中,包含若干个stride=1和stride=2的卷积,经过stride=1的卷积后,特征图的尺度保持不变,经过stride-2的卷积后,特征图的尺度缩小为原来的1/2。我们称连续的尺度不变的各个特征图处于一个网络阶段,对于每个阶段,最后一层特征图包含了这个阶段中最具表达能力的特征。
FPN构造特征金字塔时,选取每个阶段的最后一层特征图构建层级结构。对于ResNet网络而言,用来构造特征金字塔的特征图,就是每个阶段的最后一个残差块(residual block)。直接选取各个特征图的通道数是不同的,这是因为负责后续处理的网络需要在不同层的特征图上滑窗截取特征,这就要求所有层的特征图具有相同的深度(通道数),为了使得各个特征图具有相同的深度,FPN对选取的每个特征图增加一次1×1的卷积操作,以此转化成统一的通道数。
分别在conv2、conv3、conv4、conv5对应阶段的最后一个残差块上使用一个1×1卷积变换成d维通道(比如d=256),并分别标记为C1、C2、C3、C4。因为相邻两个阶段之间的特征图有2倍的尺度缩放,所以C1、C2、C3、C4,的宽、高尺度分别为原图的1/4、1/8、1/16和1/32,深度全都等于d维。此处之所以没有选择convl,是为了避免过大的内存消耗,如果不考虑内存的问题,使用convl也是没有问题的。
自上而下的过程实质上是通过把上层的特征图进行尺度变换,来构造新的特征图,新的特征图需要和下层的特征图保持一致的尺度,从而保证特征图可以融合在一起。在长、宽方向上,采用向上采样(upsample)的方法,和下层特征图的宽、高拉成一样大小;在深度方向上,通过一个1×1的卷积,把上层特征图的深度压缩到和下层特征图的深度相同。综合使用上采样操作和1×1的卷积 操作,就从上层特征图构造出了一个和下层特征图尺度完全一致的新的特征图。
经过自上而下的过程,基于上层特征图构建的新特征图和原始的下层特征图具有了同样的尺度。如图2所示,先把新的特征图和原始的下层特征图中每个对应元素相加(element-wise add),就实现了上层特征和下层特征的融合,再把融合后的每层特征图都输出为一个深度为d(比如d=256)的新特征图。
为了消除两个特征图对应元素直接相加可能带来的融合不充分的问题,FPN在融合之后的特征图上使用一个3×3卷积进行平滑处理,从而得到一个融合得更加充分的特征图。至此,完成了特征金字塔的构建,特征金字塔每一层特征图都融合了低维和高维的特征,各层的长、宽尺度不同,但通道数相同。后续任务的网络分别在特征金字塔的各个特征图上进行特征截取,就能得到多个尺度的特征。 FPN是使用卷积神经网络构建特征金字塔,用于多尺度目标检测的通用方法,可以广泛地应用于候选框的筛选(RPN)、Fast R-CNN 检测等场景中,如图2所示。多组实验结果表 2xup
明,在不明显增加计算开销和内存开 lxl conv销的情况下,FPN能够明显提升多尺度目标检测算法的性能。