Feature Pyramid Networks for Object Detection
原文地址:Feature Pyramid Networks for Object Detection
摘要
Feature pyramids are a basic component in recognition systems for detecting objects at different scales. But recent deep learning object detectors have avoided pyramid representations, in part because they are compute and memory intensive. In this paper, we exploit the inherent multi-scale, pyramidal hierarchy of deep convolutional networks to construct feature pyramids with marginal extra cost. A top-down architecture with lateral connections is developed for building high-level semantic feature maps at all scales. This architecture, called a Feature Pyramid Network (FPN), shows significant improvement as a generic feature extractor in several applications. Using FPN in a basic Faster R-CNN system, our method achieves state-of-the-art single-model results on the COCO detection benchmark without bells and whistles, surpassing all existing single-model entries including those from the COCO 2016 challenge winners. In addition, our method can run at 6 FPS on a GPU and thus is a practical and accurate solution to multi-scale object detection. Code will be made publicly available.
特征金字塔是多尺度目标识别系统的基本组成部分。但是最近的深度学习目标检测器不再使用金字塔表示,部分原因是它们是计算和内存密集型的。本文利用深度卷积网络固有的多尺度金字塔结构去构造具有可控额外成本的特征金字塔。本文提出了一种具有横向连接的自顶向下架构,用于在所有尺度上构建高层语义特征图。这种被称为特征金字塔网络(FPN)的架构作为一种通用的特征抽取器在一些应用中显示出了显著的改进。在Faster R-CNN中使用FPN,我们的方法在没有多余数据扩充的COCO目标检测基准上实现了最先进的检测结果,超过了所有现有的单一模型,包括COCO 2016挑战赛的获奖者。此外,我们的方法可以在GPU上以6 FPS的速度运行,是一种实用的多尺度目标检测方法。代码将公开
章节内容
- 介绍了特征金字塔在深度学习中的发展历程,从特征化图像金字塔(
featurized image pyramids
)到网络内部特征金字塔(in-network feature pyramids
) - 介绍了特征金字塔网络的结构,包含了自下向上提取特征图(
bottom-up pathway
)、自顶向下融合特征图(top-down pathway
)以及横向连接(lateral connection
) - 介绍了基于
FPN
的RPN
以及基于FPN
的Fast R-CNN
实现 - 通过实验以及烧蚀研究证明了
FPN
能够有效的提取特征,同时很好的平衡了准确度和速度
特征金字塔演变
如上图所示,在目标检测/识别领域中特征金字塔的使用经历了4
个阶段的变化:
- 通过训练不同分辨率的图像来模拟特征金字塔,从而保证模型具有尺度不变性
- 称其为特征图像金字塔(
featurized image pyramids
) - 常用于人工设计特征的算法中
- 称其为特征图像金字塔(
- 通过卷积网络来自动计算图像特征,对尺度不变性拥有更强大的鲁棒性,在这一阶段仅使用了单尺度特征图进行预测
- 网络在逐层计算过程中,通过下采样来降低特征图的空间尺寸,天然的具备特征金字塔结构。
SSD
重用了由卷积网络计算的金字塔特征级联- 其计算成本接近于
0
,同时能够有效的利用金字塔结构的特征图 SSD
从backbone
的高维输出开始,额外增加了几个层来计算特征金字塔(比如从VGGNet
的conv4_3
开始),忽略了对低维语义的高分辨率特征图的使用,对小目标检测效果不佳
- 其计算成本接近于
- 论文组合了
backbone
中高维语义的低分变率特征图以及低维语义的高分辨率特征图,通过从上到下的特征融合以及横向连接的方式实现特征金字塔- 充分利用了
backbone
天然的特征金字塔结构,不需要增加额外的卷积层 - 称这种方式为特征金字塔网络(
Feature Pyramid Network
)
- 充分利用了
FPN
Bottom-up pathway
在卷积网络的前向计算过程中,其每层输出很自然的会形成金字塔结构,其中低层语义特征图拥有大空间尺寸,高层语义特征图拥有小空间尺寸。FPN
通过组合不同空间尺寸的特征图,得到最初的特征金字塔。将拥有相同空间尺寸输出的层组成一个阶段(stage
),其每个阶段最后一层的输出加入特征金字塔
对于ResNet
模型,其拥有5
个阶段网络,取后4
个阶段(\(conv_{2}, conv_{3}, conv_{4}, conv_{5}\))中最后一个残差块的输出作为特征图(\({C_{2}, C_{3}, C_{4}, C_{5}}\)),其步长分别为\({4, 8, 16, 32}\)
不提取第一阶段网络的原因是因为其输出太大了
Top-down pathway and lateral connections
得到初始的特征金字塔后,再进行从上到下的特征融合以及横向连接,进一步丰富每个级别的特征图
上图显示了特征图融合操作:顶层特征图执行步长为\(2\)的上采样操作(最近邻采样策略),同时求和下一层的特征图。为了保证两者具有相同的通道数,对下层特征图进行\(1\times 1\)卷积操作,对最顶层(\(C_{5}\))特征图同样执行\(1\times 1\)卷积操作
完成特征融合后,再对每一级特征图执行\(3\times 3\)卷积操作,得到最终的特征金字塔(\(P_{1}, P_{2}, P_{3}, P_{4}\))
实现细节
论文设置金字塔特征图的维度为\(d=256\),同时在\(FPN\)上的卷积操作不需要额外连接激活函数
FPN + RPN
RPN(Region Proposal Network)
是一个区域建议提取网络,在Backbone
计算输出特征图后,通过一个小网络(称其为head网络,由一个\(3\times 3\)卷积层跟随两个并行的用于检测和识别的\(1\times 1\)卷积层组成)来计算区域建议
原始实现
- 在输出特征图的每个
cell
上定义不同尺度以及不同长宽比的初始候选框,称其为锚点(anchor) - 将锚点与
GT
进行匹配,赋值正样本标签或者负样本标签- 正样本:1. 和某一个
GT
拥有最高IoU
;2. 和任意一个GT
的IoU
超过0.7
- 负样本:和所有
GT
的IoU<0.3
- 其他:介于正负样本条件之外的锚点框不参与训练
- 正样本:1. 和某一个
- 对输入特征图执行\(3\times 3\times 256, S=1, P=1\)的卷积操作,不改变特征图大小
- 分类层使用\(1\times 1\)卷积核计算每个锚点对应的分类概率,其深度为\(2k\)
- 回归层使用\(1\times 1\)卷积核计算每个锚点对应的边界框偏移,其深度为\(4k\)
FPN增强
首先,使用FPN
计算得到的特征金字塔取代原先的单尺度输出特征图,在每一级金字塔特征图上执行head
网络
其次,因为特征金字塔已实现了多尺度特征计算,所以对于锚点定义,在每一级金字塔特征图中使用单个尺度。比如,在金字塔\(\{P_{2}, P_{3}, P_{4}, P_{5}, P_{6}\}\)上分别设置锚点大小为\(\{32^{2}, 64^{2}, 128^{2}, 256^{2}, 512^{2}\}\);同样对每个cell
使用不同长宽比的锚点,比如设置为\(\{1:2, 1:1, 2:1\}\)。所以共使用了15
种不同的锚点,\(k=3\)
FPN + Fast R-CNN
Fast R-CNN
是一个基于区域的目标检测器,能够同时检测目标位置以及类别
原始实现
- 将原始图像以及一组候选建议输入到
Fast R-CNN
网络 - 通过
Backbone
网络计算特征图,在特征图中提取候选建议的特征 - 通过
RoI
池化层为每个候选建议特征图生成固定长度的特征向量 - 通过两个全连接层计算特征后,分别计算分类概率以及逐类边界框回归偏移
Fast R-CNN
由RoI池化层+head网络
组成,其中head网络
指的是后续的全连接层+并行的分类层和回归层
FPN增强
相比较原始Fast R-CNN
在单个输出特征图提取候选建议的特征,FPN
提供了多级金字塔特征图,需要确定不同大小的候选建议在哪一级金字塔特征图上提取特征(可以充分利用不同语义,类似图像金字塔),再输入到RoI
池化层进行计算
论文设置了如下公式:
\[ k = \left \lfloor k_{0} + log_{2}(\sqrt{wh} / 224) \right \rfloor \]
- \(w/h\)指的是候选建议\(RoI\)大小
- \(224\)指的是原始训练图像大小
- \(k_{0}\)指的当\(RoI\)的大小等于\(w\times h=224^{2}\)的时候应该映射的金字塔级数
- \(\left \lfloor * \right \rfloor\)表示向下取整
在原始的基于ResNet
的Fast R-CNN
中,使用\(C_{4}\)作为单尺度特征图,所以设置\(k_{0}=4\)。当输入\(RoI\)更小的时候,应该映射到更大分辨率的金字塔特征图上(也就是小目标对应低维语义的大尺度特征图)
从金字塔特征图上提取候选建议对应的特征图后,由RoI
池化层提取\(7\times 7\)特征向量;再通过两个\(1024\)维的全连接层后,输入到分类器和回归器计算分类概率以及逐类边界框偏移