Feature Pyramid Networks for Object Detection(接)

 2. 相关工作

           手工工程特征和早期的神经网络:SIFT特征是最初是在尺寸空间极值中提取的,并用于特征点匹配。方向梯度直方图(HOG特)征以及之后的尺度不变特征变换(SIFT),都是在整张图像金字塔上进行密集计算的。方向梯度直方图(HOG特)征以及之后的尺度不变特征变换(SIFT)已经被用于许多的作品中,用于图像分类、目标检测、人类姿态估计等。对快速地计算特征图像金字塔也有明显的兴趣。Doll´ar et al等人通过首先计算一个稀疏采样金字塔和内插缺失的等级来阐述了快速金字塔计算。在方向梯度直方图(HOG特)征和尺度不变特征变换(SIFT)之前,早期的工作人脸检测使用 ConvNets 计算了图像金字塔上浅层网络,去检测不同尺寸的人脸。

         Deep ConvNet object detectors:伴随着现代深ConvNets的发展,对象探测器(OverFeat and R-CNN )在精度上展示了极大的提升。OverFeat 采用了一种与早期神经网络人脸探测器类似的策略,通过在一张图像金字塔是那个应用一个ConvNet作为滑动窗口检测器。R-CNN 采用基于区域建议的策略,在每种建议中在使用 ConvNet 分类之前进行规模归一化。SPPnet 阐明 基于区域的探测器可以有效从一张单模型图像尺度上提取特征图。最近一些精确的探测方法像 Fast R-CNN and Faster R-CNN提倡使用从一单模型图片计算出特征。因为它能提供速度和精度的一个良好的平衡。多尺寸探测器性能仍然很好,尤其是对一些小目标的物体。

       Methods using multiple layers:大量最新的方法通过在 ConvNet 上使用不同层来提高检测和分割。FCN 将多个尺寸上的每个类别的部分分数相加以计算语义分割。Hypercolumns 使用类似的方法进行对象实例分割。一些其他的方法(HyperNet , ParseNet , ION))在计算预测之前,将多个层的特征连接起来,这相当于对转换特征求和。SSD 和 MS-CNN 预测特征特征层次的多个层次上的对象,而不需要组合特征和得分。有一些最近的方法利用横向或跳跃连接将横跨分辨率和语义层次低级特征映射关联起来,包括

U-Net  和  SharpMask 用于分割,Recombinator 网络用于人脸检测 和 Stacked Hourglass 网络用于关键点估计。Ghiasi 等人为FCNs 呈现 Laplacian 金字塔展示,去逐渐细化分割。虽然 这些方法 采用金字塔形状结构, 它 们不同于特征图像金字塔,其中每层的预测是独立的。

       Feature Pyramid Networks for Object Detection(接)

事实上,对于上图的金字塔结构,图像金字塔仍然需要在多个尺度上识别物体。

3.   特征金字塔网络

        我们的目标是利用 ConvNet金字塔的特征层级,该层次结构具有从低到高的语义,并在整个过程中构建具有高级语义的特征金字塔,构建的金字塔是通用的,在文章中,我们集中于滑动窗体建议和基于的区域的检测器。我们在 Sec. 6. 中将PRN推广到实例分割提议。

        我们的方法采用任意大小的单尺寸图像作为输入,并以完全卷积的方式输出多级比例尺寸的特征地图。这个过程独立于骨干卷积体系结构,在文中我们使用ResNets给出结果。如下所述,我们的金字塔结构包括自下而上、自上而下的路径和横向连接。

自下而上的路径:自底而上的路径是骨干 ConvNet 的前馈计算,它 计算由几个尺寸的特征映射组成的特征层级结构,其尺寸步长为2。通常有很多层产生相同大小的输出图,我们说这些 层处于相同的网格阶段,对于我们的特征金字塔,我们定义每一阶段金字塔等级。我们选择每一阶段的最后一层的输出作为我们参考的特征集。这种选择是很自然的,因为每一阶段的最深层应该具有强大 的特征。

特别的,对于 ResNets,我们使用每一阶段最后的一个残差块输出**特征。对于 conv2, conv3, conv4, and conv5的输出,我们将每一阶段最后的残差块的输出表示为{C2, C3, C4, C5},并注意它们相对应图片的输入具有 {4, 8, 16, 32 } 像素的步幅。由于占用内存比较大,我们没有 将 conv1 加入金字塔。

           自上而下的路径和横向连接: 自顶向下的路径通过从更高的金字塔层次向上采样空间更粗但语义更强的特征图,从而产生更高分辨率的特征。之后通过横向连接从下往上的路径增强了这些特征。每次横向连接从底向顶和从顶向底合并相同空间大小的特征图。自底向上的特征映射具有较低层次的语义,由于它的采样次数少,其**作用在局部更为精准。

Feature Pyramid Networks for Object Detection(接)

            上图显示构建了我们自顶向下特征图的构建块。使用较为模糊的分辨率特征图,我们将空间分率率上采样为2倍(为了简单 使用邻近上采样)。这个上采样图之后通过逐元素与相对应由底向上的图(通过1*1 卷积层减少通道规模)合并相加。这个过程一直迭代直到好的分辨率图像生成。为了开始这迭代,我们将1*1 的卷积层连接到C5 上去生成 模糊的分辨率图。最后我们在每个合并的图上附加 3*3 卷积 生成最后特征图。最终的特征映射集成为 {P2, P3, P4, P5}, 对应{C2,C3,C4,C5},分别具有相同的空间大小。

    由于所有层级的金字塔使用共享的分类器/回归器,像传统的特征图像金字塔 ,我们固定所有的特征信道(通道的数目 记为 d),在文中设d= 256 因此所有额外的卷积层都有256个通道的输出。在其余的层中没有非线性,我们通过经验找到了最小的影响。

简单是我们设计的核心思想,发现我们模型对许多设计的选择是有效的。我们用许多复杂的块去做实验并观察到好的实现结果。设计更好的连接模型不是本文的专注重点,我们选择上面简单的设计。

4 . 应用

        我们的方法是深度ConvNets内部建立金字塔的通用解决方法,紧接着我们采用我们的方法在RPN中 进行边生成界框建议,并在 Fast R-CNN 进行目标检测。为了论证我们方法的简单性和有效性,对原始的系统做了很小的修改使其适应我们的特征金字塔。

4.1 特征金字塔网络

     RPN是一个滑动窗口未知类的对象检测器。在原始的RPF设计,在一个密集的3*3滑动窗口上评估一个小型的子网络,执行对象的二值分类和边界框的回归。通过3*3的卷积层和两个同样的1*1 卷积实现分类和回归,我们称之为网络头部。对象/非对象和边界回归目标是相对于一组成为锚的盒子。为了覆盖不同尺度的对象,预先定义了多种尺寸和横纵比的锚盒。

我们通过用FPN代替单尺度特征图来适应RPN.我们在特征金字塔的每级上连接一个同样设计的头部。因为在每一金字塔级别上头部能够密集的滑动到所有位置,所以在特定级别是没有必要具有多尺寸的锚盒。代替的,我们分配单一尺寸的锚盒到每一级别上。形式上,我们我们定义了锚盒在{ P2; P3; P4; P5; P6} 上上分别具有Feature Pyramid Networks for Object Detection(接)的像素的区域,在 Faster R-CNN: Towards  real-time object detection with region proposal networks我们在每一级别上使用多个纵横比为Feature Pyramid Networks for Object Detection(接)的锚盒。在金字塔上总共有15个锚盒。

         我们分配给训练标签给基于使用真实边界框的IOU的锚盒,形式上,如果一个锚盒对于给定的真实框有最高的IoU值或对于任何真实框IOU 的值超过 0.7 则是分配积极的标签。对于 真实边框具有 IoU 低于 0.3 分配一个 消极的标签,注意,地面真实盒的尺寸没有明确用于它们分配到金字塔的层级上。代替,真实盒与已经被分配给金字塔层的锚盒相联系。

        我们注意头部的参数是在所有特征金字塔等级*享的,我们评估了替换方案没有使用共享的参数但观察到有相似的精确度。共享参数有好的性能 表明 我们的金字塔所有级别上共享相同的语义级别。这个优势类似于使用特征图像金字塔的优点,其中可以将常见头部分类器应用于在任何图像尺寸在计算特征。

4.2  特征金字塔网络Fast R-CNN

      Fast R-CNN是一个基于区域建议的对象检测器,利用感兴趣区域池来提取特征。Fast R-CNN大多数情况下是喜爱一张单尺寸的特征图上执行。为了一起使用Fast R-CNN和 FPN,我们需要分配不同尺寸的RoIs到金字塔等级。

我们将特征金字塔卡看作是有由一个图像金字塔产生的。因此在金字塔上运行的时候,我们采用基于区域的探测器分配策略。

形式上,我们分配宽度为 W 和 高度为 h 的感兴趣区域到特征金字塔的对应级别: Feature Pyramid Networks for Object Detection(接)

 这里是224是经典的ImageNet 预训练大小,Feature Pyramid Networks for Object Detection(接) 是在一个为RoI为Feature Pyramid Networks for Object Detection(接) W * h = Feature Pyramid Networks for Object Detection(接)Feature Pyramid Networks for Object Detection(接) 映射的目标级别。类别基于ResNet的Faster R-CNN系统 是用Feature Pyramid Networks for Object Detection(接)作为单尺寸的特征图,我设置Feature Pyramid Networks for Object Detection(接) 为4。直观上看,等式(1)意味着 如果RoI的尺寸变小,它应该被映射到一个高分辨率的级别(Feature Pyramid Networks for Object Detection(接) = 3).

        我们连接预编译的头(在Fast R-CNN的头等级特定类的分类器和边界框的回归)到所有等级的RoIs上面。 头部的参数是可以共享的,忽略它的等级。在 Deep residual learning for image recognition,ResNet  的 conv5 图层是被作为con4特征顶部的头部,但是我们的方法利用con5去构造特征金字塔。所以不像  Deep residual learning for image recognition,我们简单采用RoI池化层去提取 7*7  的特征,并在最终分类和边界回归层之前附加两个隐藏层 1024-d全连接层。这些层是被随机初始化,因为在 ResNets中没有预训练的全连接图层。注意到与标准的conv5 相比,我们的 2-fc MLP 是更轻更快。

基于这条件,我们能够在特征金字塔训练和测试 Fast R-CNN。

 5 .对象检测实验

      我们在80类COCO检测集上进行实验。我们训练使用80K列车图像和验证集的35可子集的联合,并报告了在5K大小的验证图像子集在消融实验。我们也报告你在没有公开标签的标准测试集上的最终结果。

      通常习惯性的做法,我们所有网络骨干都是在ImageNet1k 分类数据集上面进行预训练,然后检测数据集上面进行微调。我们使用公开可适用的ResNet-50和ResNet-101模型。

5.1 区域建议与RPN

     根据Microsoft COCO: Common objects in context中定义,我们分别在小 中和大型的对象上面评估COCO类型的平均召回率,我们使用每张图片使用100 或 1000个 建议的结果(Feature Pyramid Networks for Object Detection(接) and Feature Pyramid Networks for Object Detection(接)).。

       Feature Pyramid Networks for Object Detection(接)

       实现细节:   表1 中所有的框架都是端到端的训练的,输入图片大小调正为其较短边有800像素。我们采用8个GPU进行同步训练。一小批量每个GPU上面包含2张图片并且每张图片上有256的锚盒。我们使用0.0001的权重衰减和0.9的动量。对于前30k小批量数据的学习率为0.2,下一个10k的学习率为0.002。对于所有RPN实验(包括基准),我们都包含图像外部的锚盒来进行训练,不同于Faster R-CNN: Towards  real-time object detection with region proposal networks 中忽略这些锚盒。使用具有FPN的RPN在8个GPU上训练COCO 数据集需要约8个小时。

5.1.1 消融实验

         与基线进行比较:为了与原始的RPN 进行公平的比较,我们使用Feature Pyramid Networks for Object Detection(接) 或者 Feature Pyramid Networks for Object Detection(接) 的单尺寸映射运行两个基线(Table 1(a, b)),都是使用相同的超参数,包括使用5种尺寸的锚盒Feature Pyramid Networks for Object Detection(接)。表 1(b)没有展示出优于a 的优势,表明单个高级别的映射是不足够的,因为存在较简单分辨率和强语义的权衡。

           将FPN放在RPN中可以将Feature Pyramid Networks for Object Detection(接) 提高到56.3,这比单尺寸RPN基线增加了8.0分。此外,在小物体上面的性能也大幅上涨12.9 个点。我们的特征金字塔表示大大提高了RPN对目标变化尺寸的鲁棒性。

          自顶向下改进的重要性:表(1d) 展示我们特征金字塔的结果没有使用自顶向下的路径,通过这个修改,将 1 *1 的横向连接和紧跟的3*3  卷积 连接到自下而上 的金字塔。这个架构模拟重用金字塔特征层次结构的效果。表(1d)中的结果与RPN基线相当,并且远远落后于我们的结果。我们推测这是因为自下而上的金字塔的不同层次之间存在较大的语义差距,特别是深的ResNets。 我们还评估了表(1d)的一些不同的变体,但没有共享的参数,但观察到类似的性能下降。这个问题不能简单地通过特定级别的头部来纠正。

        横向连接的重要性:    表1 (e) 展示了没有使用1*1 横向连接到的自顶向下特征金字塔的消融研究。这个自顶向下的金字塔有强大的语义特征和好的分辨率。但是我们争论这些特征的位置不是很精准,因为这个图已经被做了多次上采样和下采样。更精确的特征位置可以通过横向连接直接从自下而上映射的更精细层级传递到自上而下的映射。因此,FPN中Feature Pyramid Networks for Object Detection(接)的得分比表1(e)高10个点。

       金字塔表示的重要性:可以将头部附加到Feature Pyramid Networks for Object Detection(接)的最高分辨率的强语义特征映射上(即我们金字塔中的最好层级),代替采用金字塔表示。与单尺度基线类似,我们将所有锚点分配给 Feature Pyramid Networks for Object Detection(接) 特征映射。这个变体(表1(f))比基线要好,但不如我们的方法。RPN是一个具有固定窗口大小的滑动窗口检测器,因此在金字塔层级上扫描可以增加其对尺度变化的鲁棒性。

      另外,我们注意到因为 Feature Pyramid Networks for Object Detection(接) 较大的空间分辨率,单独使用Feature Pyramid Networks for Object Detection(接)  会导致更多的锚点(750k,表1(f))。这个结果表明,大量的锚盒本身并不足以提高准确率。

5.2 目标检测(Fast / Faster R-CNN)

    Feature Pyramid Networks for Object Detection(接)

  下一步我们研究基于区域的FPN(未使用滑动窗)的探测器。我们通过在COCO和PASCAL数据上的平均精度(AP)评估对象检测。

实现细节:输入图片的短边重新调整大小为800像素。在8个GPU上同步使用随机梯度训练这个模型。一个小批量数据包括每个GPU的2张图像和每张图像上的512个感兴趣区域。我们使用0.0001的权重衰减和0.9的动量。前60k次小批量数据的学习率为0.02,而接下来后 20k次迭代学习率为 0.002。每张图像使用2000个RoIs进行训练,1000个RoI进行测试。使用FPN在COCO数据集上训练Fast R-CNN需要约10小时。

5.2.1 Fast R-CNN(固定的建议)

        为了更好地研究单独使用基于区域的检测器FPN的影响,我们在一组固定的提议上进行Fast R-CNN的消融实验。我们选择冻结RPN在FPN上计算的提议(表1(c)),因为它在能被检测器识别的小目标上具有良好的性能。为了简单起见,我们不在Fast R-CNN和RPN之间共享特征,除非指定。

        作为基于ResNet的Fast R-CNN基线,遵循  Deep residual learning for image recognition,我们采用输出尺寸为14×14的RoI池化,并将所有conv5层作为头部的隐藏层。这得到了31.9的AP,如表2(a)。表2(b)是利用MLP头部的基线,其具有2个隐藏的fc层,类似于我们的架构中的头部。它得到AP值为28.8,表明2-fc头部没有给我们带来任何超过表2(a)中基线的正交优势。

       表2(c)显示了Fast R-CNN中我们的FPN结果。与表2(a)中的基线相比,我们的方法将AP提高了2.0个点,小型目标AP提高了2.1个点。与也采用2fcfc头部的基线相比(表2(b)),我们的方法将AP提高了5.1个点。这些比较表明,对于基于区域的目标检测器,我们的特征金字塔优于单尺度特征。

       表2(d)和(e)表明,去除自上而下的连接或去除横向连接会导致较差的结果,类似于我们在上面的RPN小节中观察到的结果。值得注意的是,去除自上而下的连接(表2(d))显著降低了准确性,表明Fast R-CNN在高分辨率映射中使用了低级特征。

         在表2(f)中,我们在P2P2的单个最好的尺度特征映射上采用了Fast R-CNN。其结果(33.4 AP)略低于使用所有金字塔等级(33.9 AP,表2(c))的结果。我们认为这是因为RoI池化是一种扭曲式的操作,对区域尺度较不敏感。尽管这个变体具有很好的准确性,但它是基于{Feature Pyramid Networks for Object Detection(接)}的RPN提议的,因此已经从金字塔表示中受益。

5.2.2 Faster R-CNN(一贯提议)

   Feature Pyramid Networks for Object Detection(接)  

  在上面我们使用了一组固定的提议来研究检测器。但是在Faster R-CNN系统,RPN和Fast R-CNN必须使用相同的骨干网络来实现特征共享。表3展示了我们的方法和两个基线之间的比较,所有这些RPN和Fast R-CNN都使用一致的骨干架构。表3(a)显示了我们重新Deep residual learning for image recognition 中描述的Faster R-CNN系统的基线。在受控的环境下,我们的FPN(表3(c))超过这个强劲的基线要 2.3个点的AP和3.8个点的AP @0.5。

      注意到表3(a)和(b)的基线比He等人[16]在表3()中提供的基线强大得多。我们发现以下实现有助于缩小差距:

      (i)我们使用 800像素的图像尺度,而不是[11,16]中的600像素;

     (ii)与[11,16]中的 64个ROI相比,我们训练时每张图像有512个ROIs,可以加速收敛;

     (iii)我们使用5个尺度的锚点,而不是[16]中的4个(添加 32*32);

     (iv)在测试时,我们每张图像使用1000个提议,而不是[16]中的300个。

因此,与表3()中的He等人的ResNet-50 Faster R-CNN基线相比,我们的方法将AP值提高了7.6并且将[email protected]提高了9.6。

  Feature Pyramid Networks for Object Detection(接)

       共享特征在上面,为了简单起见,我们不共享RPN和Fast R-CNN之间的特征。在表5中,我们按照[29]中描述的4步训练评估了共享特征。与[29]类似,我们发现特征共享能提高一点准确率,也缩短了测试时间。

       运行时间:通过特征共享,我们的基于FPN的Faster R-CNN系统使用ResNet-50在单个NVIDIA M40 GPU上每张图像的推断时间为0.148秒,使用ResNet-101的时间为0.172秒。作为比较,表3(a)中的单尺度ResNet-50基线运行时间为0.32秒。我们的方法通过FPN中的额外层引入了较小的额外成本,但具有更轻的头部。总体而言,我们的系统比对应的基于ResNet的Faster R-CNN更快。我们相信我们方法的高效性和简洁性将有利于未来的研究和应用。

       我们发现在表 5中 ResNet-101模型在默认学习速率的情况下没有进行足够的训练。所以在训练Fast R-CNN步骤时,我们将每个学习速率的小批量数据的数量增加了2倍。这将minival上的AP增加到了35.6没使用特征共享。

Feature Pyramid Networks for Object Detection(接)

     我们的方法不依赖图像金字塔,只使用单个输入图像尺度,但在小型目标上仍然具有出色的AP。这只能通过使用之前方法的高分辨率图像输入来实现。

     我们的方法没有利用许多流行的改进,如迭代回归,难例挖掘,上下文建模,更强大的数据增强等等。这些改进与FPN互补,应该会进一步提高准确度。

6. 扩展:分割建议

           Feature Pyramid Networks for Object Detection(接)

       我们的方法是一种通用金字塔表示,可用于除目标检测之外的其他应用。我们使用FPN生成分割建议,遵循DeepMask/SharpMask框架。

         DeepMask/SharpMask是在裁剪图像上进行训练,并且预测实例块和目标/非目标分数。在推理时,这些模型运行卷积在图像中生成密集的提议。为了在多个尺度上生成分割块,图像金字塔是必要的。

       修改FPN去生成mask建议。我们在训练和推断中使用全卷积设置。我们在5.1小节中构造我们的特征金字塔并设置d=128。在特征金字塔的每个层级上,我们应用一个小的 5×5 MLP以全卷积方式预测14×14掩码和目标分数,参见图 4。此外,由于在Learning to segment object candidates 和 Learning  to refine object segments的图像金字塔中每组使用2个尺度,我们使用输入大小为7×7的第二个MLP来处理半个组。+

7. 结论

       最后,我们的研究表明,尽管深层ConvNets具有强大的表示能力以及它们对尺度变化的隐式鲁棒性,但使用金字塔表示对于明确地解决多尺度问题仍然至关重要。