文章: Feature Pyramid Networks for Object Detectin
作者: Tsung-Yi Lin, Piotr Dollar, Ross Girshick, Kaiming He, Bharath Hariharan, and Serge Belongie
核心亮点
提出了多尺度的特征金字塔结构
将最后一层特征图谱进行不断尽快上采样, 并与每一个金字塔阶级的特征图谱进行加法合并操作, 得到新的表征能力更强的不同金字塔层次的特征图谱, 然后将RoI按照尺寸分别映射到这些特征图谱上, 再在每个特征图谱上进行类别和位置预测. 可以直观感受到, 这种多尺度的特征图谱在面对不同尺寸的物体时, 具有更好的鲁棒性, 尤其是在面对小型物体时. 同时, 这种特征金字塔结构是一种通用的特征提取结构, 可以应用到不同的网络框架中, 显著提高(5~8%)模型的召回率(因为提出了更多不同尺度, 不同特征信息的anchor box), 并且可以广泛提高(2~3%)模型的mAP.
论文细节
背景介绍
在面对不同尺度的物体检测问题时, 特征金字塔结构是一个非常基本的组成部分, 但是最近的检测模型都舍弃了这一结构(Fast RCNN, Faster RCNN, YOLOv2等), 其一部分原因是因为这个结构对计算和内存的要求较高. 本文在控制资源消耗的情况下, 建立了一个跨所有层的特征金字塔结构网络, 达到了当时的STOA性能.
传统的特征金字塔结构对于计算资源和内存资源的依赖较为严重, 同时深度卷积网络在不同阶段的卷积层, 虽然较好的传递了特征, 但是因为每一层的输出通道数不同, 会导致层与层之间形成一种潜在的语义鸿沟. 较高的分辨率好好具有更多的低级信息(在深层会被过滤掉), 但是多于的信息也会对降低泛化能力, 较低的分辨率则具有权重更高的重要信息, 但是这样也会使得小目标物体难以检测.
SSD与FPN中多尺度特征图谱融合的区别
SSD算是首批结合多尺度特征金字塔的检测系统, 但是SSD为了避免用到过多的低级特征(高层卷积图谱上的特征), 放弃使用以及计算好的特征特普, 而是从网络的最后一层卷积层开始, 添加新的卷积层, 并在这些新添加的卷积层上进行特征金字塔融合. 这样做一个很直观的结果就是, 它会错过很多高分辨率特征图谱上的特征信息, 而这些特征信息在面对小物体检测时是十分有用的.(这也是SSD对小物体检测较为敏感的原因之一).
Feature Pyramid Networks
输入: 任意尺寸的单张图片(不进行尺度缩放)
输出: 以全卷积的方式在不同层次上输出对应的映射尺寸的特征图谱
构建FPN包含以下步骤:
自下而上的路径: 该方式是根据backbone 卷积网络的前馈计算过程进行的. 特征图通常经过卷积计算后是会越来越小的, 也有一些特征层的输出和原来大小一样, 成为处于同一个网络阶段("same network stage"). 对于本文, 将每一个"network stage"看做是一个金字塔级别. 然后选择每个阶段的最后一层作为特征图的参考集合(因为最深层理应具有最强的特征表示). 具体来说, 对于ResNets, 使用了每一个阶段的最后一个残差结构的特征激活输出, 将这些残差模块conv2, conv3, conv4, conv5 的输出表示为 , 并且注意到他们相对于输入图像具有 像素的步长.
自上而下的路径以及横向连接:
自上而下的路径是通过在更粗糙, 但是语义更强的高层特征图(深层)上进行上采样来得到更高分辨率的图谱, 然后将这些上采样之后的feature map 与 自下而上(自浅而深)的特征图谱通过横向连接的方式拼接在一起.(横向连接的feature map的size是一样大的). 那些bottom-up frature map 具有较为低级的语义信息(低级是指抽象程度低), 但是这些图谱的位置精度更高, 因为它们经过的下采样次数更少. 下面的图3显示了构建top-down feature map的模块. 对于一个粗糙精度的特征图谱, 首先将其上采样至2倍(为了简单, 直接使用最近邻), 然后将上采样后的特征图谱与对应的自下而上的图谱进行按元素相加合并(合并前自下而上的图谱会将经过1×1卷积降低通道数). 这个过程会一直迭代, 知道最浅的卷积图谱也被合并为止. 在最开始的时候, 最深层的合并是使用1×1卷积来生成待合并的top-bottom feature map的. 最后, 会用3×3的卷积在所有合并后的特征图谱上进行卷积操作, 以此来得到最终的特征图谱(以此来消除上采样的混叠效应) , 他们具有与 相同的大小.
由于所有层的金字塔卷积都是使用的共享的分类器和回归器, 因此文章固定了特征图谱的通道数量(256). 文章使用的是最简单的网络结构, 同时也存在其他更好的连接设计, 但本文的主要目的是探讨FPN的有效性, 因此没要尝试过多的连接组合.
应用
FPN是一种用于在卷积网络内部建立特征金字塔的一般化的解决方案, 下面利用Faster RCNN来证明FPN的有效性.
Feature Pyramid Networks for RPN
RPN会在最后一层的特征图谱上, 利用 3×3 的卷积核, 生成同样大小的特征图谱, 然后在这个新的图谱上画anchor boxes, 并利用两个1×1的卷积核进行二分类和回归任务. 本文用FPN替换了RPN的3×3的卷积核, 然后依然使用两个1×1的卷积核进行二分类和回归任务. 同时, 因为FPN会结合前面的backone网络的所有卷积段, 因此, 对于每一个金字塔层, 只使用一个固定尺寸的anchors. 本文中, 对于,其anchors的大小分别为 , 每一层anchors的宽高比例为{1:2, 1:1, 2:1}, 因此, 总共具有15个anchors(对于每一个location而言)
训练时的标签赋值策略和FasterRCNN是一样的.
Feature Pyramid Networks for Fast RCNN
将FPN用于FastRCNN时, 需要在不同的层次上赋予不同尺度的RoI大小.(因为RoI pooling是根据物体在原图中的框决定)
本文宽度为 ,高度为 的RoI 通过如下公式分配到特征金字塔的 等级上:
这里 224 是规范的ImageNet预训练的大小, 而 是则大小为 的RoI应该映射到的目标级别. 类似于基于ResNet的Faster RCNN使用 作为单尺度特征映射, 我们将 设置为4 (也就是说, 与图片一样大的RoI会映射到 的特征图谱上). 上式表明, 如果RoI的尺度变的更小(如224的0.5倍), 那么该RoI就应该映射到分辨率更高的金字塔图谱上(如 ).(也就是说不同大小的RoI会映射到不同金字塔层级的特征图谱上, 总的来说, 越小的RoI, 会映射到更浅层的特征图谱上, 因为太深的图谱可能已经将小物体信息过滤掉了)
文章将预测器(分类和坐标回归)应用到所有金字塔层级的RoI上面. 需要注意, 预测器在所有层级上的权重都是共享的. . 在ResNet中, 会在conv4的特征图谱上在加上一个conv5, 但是本章已经将conv5用于构建特征金字塔. 所以和ResNet不同, 文章很直接的利用RoI pooling来获取 的特征 (注意不是基于滑动窗口的检测器, 这一点和YOLO差不多), 并且会使用2层1024维的隐藏层(后街ReLU), 然后才会送入最终的预测器层当中(分类和位置回归).
实验
用COCO 80ktrain和35k val进行实验. 所有的网络均在ImageNet1k上预训练.
实验细节:
输入图片的尺寸被resize, 其最短边长为800像素. 8块GPU同步训练, 每个GPU的minibatch为两张图片, 每张图片的anchors为256. weight decay为0.0001, momentum为0.9. learning rate 开始的30k图片是0.02, 之后是0.002. 训练时包含了那些处于image之外的anchor boxes(Faster选择忽略).
消融实验
实验结果表明, RPN结构可以提高检测的AR(Average Recall)指标, 尤其是在面对小物体和中等物体等多尺度物体时, 会显著提高AR指标.
top-down 的特征图谱加强可以使得特征图谱具有很强的语义特征信息和更好的分辨率.(原始的特征图谱之间的语义鸿沟更大, 层与层之间的联系比较简单粗糙)
虽然top-down方式的特征图谱具有很强的语义特征信息和更好的分辨率效果, 但是有过经过不断的降采样和上采样过程, 该特征图谱的位置信息可能会变得不够精确. lateral connections 同时结合具有精确位置信息的特征图谱和具有强语义信息的图谱, 进而达到更好的效果.
Pyramid结构的重要性: 如果只在最后一层特征图谱 上进行检测, 这就像是Faster RCNN的单尺度方法一样, 所有的anchors都在最后一层图谱上, 这种变体比Faster RCNN好但是比FPN差. 直观上来说, 在所有特征层上进行检测, 对不同尺度的物体的鲁棒性要更好.
利用Fast/Faster RCNN进行目标检测
利用AP(Average Precision)指标对FPN进行验证
在Faster RCNN上使用FPN, mAP提高了 2%, 其中小物体的mAP提高了2.1%.(固定的候选区域集合)
在面对consistent proposals时(因为RPN和Fast RCNN要共享权重,所以会不断迭代训练), FPN比Faster RCNN的AP高 2.3 点, 比AP@0.5高 3.8 点.
FasterRCNN中RPN和FastRCNN的权重共享大约可以提升mAP值0.5左右(0.2~0.7), 同时, 权重共享也可以降低预测时间(0.148 vs 0.172, ResNet50, M40 GPU因为不用计算两个不同的权重参数, RPN与Fast RCNN用的是一个权重参数).
FPN没有使用很多流行的提升精度的方法, 如迭代回归, 难样例挖掘, 上下文建模, 数据增强等等. 但是FPN仍然在目标检测, 实例分割, 关键点检测等多项任务上刷新了最高分. 如果使用这些trick, 理论上会获得更高的精度.
FPN是一种通用的特征提取方法, 他同样也适用于实例分割任务, 并且可以取得很好的效果.