Feature Pyramid Networks for Object Detection


    《Feature Pyramid Networks for Object Detection》发表在2017年CVPR上。

    本文提出一种Feature Pyramid Networks(FPN)网络结构,能够在不影响速度的前提下融合多层特征,使每个level的特征都具有丰富的语义信息,提高CNN网络特征提取能力。理论上,FPN在CNN方法中是一个通用的方法。


    1. 网络结构

    在卷积神经网络中,前几层的特征图分辨率高,但是含有的语义信息少。高层的特征图则恰恰相反。

    在目标检测任务中,由于目标大小的不一致,图像(特征)金字塔是一个很有效的手段。

    A. Featurized image pyramid

Feature Pyramid Networks for Object Detection

        通过调整输入图像的大小构建图像金字塔,从而构建特征金字塔。

        将原图按比例进行缩放,输入到CNN网络中,从而提取的特征大小也不同。

        该法虽然达到了检测不同大小目标的目的,但是需要多次地调整输入图像的大小,所以速度十分慢。

    B. Single feature map

Feature Pyramid Networks for Object Detection

        为了更快地进行检测,有一些方法只采用了单层的特征图进行检测。

        但该法显然对小目标的检测十分不利。

    C. Pyramidal feature hierarchy

Feature Pyramid Networks for Object Detection

        在B的基础上,除了只利用语义信息最丰富的最后一层特征图,也可以使用其他层的特征图分别进行检测。

        但不同深度引起了语义鸿沟问题,前几层的特征图分辨率高,但是语义信息少,对目标的表示不利。

    D. Feature Pyramid Network(FPN)

Feature Pyramid Networks for Object Detection

    为了取得较好地检测效果,这篇论文希望能够在利用到更多层特征图的同时,使每一层特征金字塔都能具有丰富的语义信息。

    所以提出FPN结构,使用自上而下的路径,横向连接低分辨率、语义信息丰富的高层特征和高分辨率、语义信息较少的低层特征

    

    2. Feature Pyramid Network(FPN)

    自下而上的路径

    在网络结构中,有一些卷积层输出的特征图大小是一样的。本文中将这些层称为一个stage。

    对于每一个stage,只定义其中最后一层卷积层作为特征金字塔的一层。

    原因很简单,stage中的最后一层含有的语义信息肯定是最多的。

    特征金字塔的每层间缩放步长为2。

    例如,对残差网络ResNets,忽略conv1,定义残差块conv2~conv5的最后一层为{C2,C3,C4,C5}。与输入图像相比,它们的步长分别为{4,8,16,32}。


    自上而下的路径以及横向连接

    从最高层开始,特征图经过2倍的上采样,与前一层空间大小相同的特征图进行横向连接,即特征图上对应位置元素相加。如此迭代直到产生最精细的特征图。

    简单起见,上采样使用最近邻上采样。

    金字塔不同层采用共享的分类器和回归器,通道数需保持一致。因此每次迭代前一层的特征图需要经过1*1卷积。文中规定通道数d=256,因为不存在非线性,所以影响很小。

    开始迭代时,在C5后添加一个1*1卷积层,产生最小分辨率的特征图。

    同时,为每一个融合的特征图添加一个3*3的卷积层,以减低上采样的混叠效应。

    最后,对应于原来的{C2,C3,C4,C5},产生的特征金字塔为{P2,P3,P4,P5}。其大小分别保持不变(保留位置信息)。

    Feature Pyramid Networks for Object Detection

   

    3.应用

    A. FPN for RPN

    RPN在特征图上产生9种anchor进行目标的检测。

    FPN产生的每层特征图后面,紧跟一个3*3的卷积层和两个1*1的卷积层(简称为一个head)。

    因为金字塔具有尺度信息了,所有在某个特定的金字塔层上不需要多种anchor。

    这里,作者为金字塔的每层设置了单一尺度的anchor。

    对P5进行步长为2的上采样,记为P6。在{P2,P3,P4,P5,P6}融合的特征图上,分别设置大小为{32^2,64^2,128^2,256^2,512^2}的anchor。同时为了满足形状需求,设置三种纵横比{1:2,1:1,2:1}。所以金字塔的每一层具有15种anchor。

    训练时,positive和negative的设定与RPN相同:和任意groundTruth的IoU大于0.7视为positive;和所有groundTruth的IoU小于0.3视为negative。

 

    B. FPN for Fast R-CNN

    Fast R-CNN中有将RoI映射到特征图上的过程。

    在FPN中,这个过程演变成需要确定将RoI映射到金字塔的不同层的融合特征图上。

    作者的想法是:如果RoI的大小比较小,就映射到相对靠前的特征图上,反之映射到相对靠后的特征图上。

    作者提到,先认为FPN的特征图是由图像金字塔生成的。然后使用图像金字塔的方法。

    假设RoI在输入图像上宽和高分别为w、h,

    映射到Pk层的参数k由以下公式决定:

 Feature Pyramid Networks for Object Detection

    其中224是ImageNet预训练的标准输入图像大小。Faster R-CNN提取C4的特征图,因此设置k0=4。预防产生小数进行取整操作。

    将Fast R-CNN中的分类器和回归器简称为一个head。所有head参数共享。

    因为conv5作为了金字塔的一层,所以RoI pooling提取7*7的特征之后,添加两个1024-d的全连接层,再跟着head。