Feature Pyramid Networks for Object Detection 论文学习

论文地址:https://arxiv.org/abs/1612.03144

Abstract

特征金字塔是在不同的尺度上进行物体检测的基本组成。但是最近的深度学习目标检测器都避免使用金字塔特征,部分原因是金字塔特征很消耗算力和内存。这篇论文探索了深度卷积网络内在的多尺度和金字塔层级,低成本就可以构建特征金字塔。通过top-down结构和lateral连接,在所有的尺度上构建high-level的语义特征。我们称这个结构为特征金字塔网络 (FPN),作为通用的特征提取器,它在多个应用中都有明显的提升。在Faster R-CNN中使用FPN,我们的方法在COCO检测基准上获得了 state of art 的成绩,超过了现在所有的目标检测模型。此外,此方法在GPU上运行速度为5帧每秒。

1. Introduction

在多个尺度上识别物体是机器视觉领域中一个重要挑战。基于图像金字塔的特征金字塔(featurized image pyramids)是标准解决办法中不可缺少的一部分。这些金字塔具有尺度不变性,因为一个物体的尺度变化可以通过调整特征金字塔的层级来抵消。这个特性使得模型能够在多个尺度上检测物体。

特征化的图像金字塔(featurized image pyramids)在 hand-engineered 特征时代用的非常多。目标检测器如DPM就使用了非常多的尺度采样。在识别任务上,人们已经开始使用深度网络计算的特征来替换 engineered 特征。卷积网络除了可以表达更high level 的语义信息,它对尺度的变化也很robust,因此有助于单一输入尺度特征上的识别(Fig. 1b)。尽管卷积网络很robust,但我们仍需要金字塔特征来达到更高的精度。ImageNet 和 COCO 检测竞赛上最近所有的算法都在特征图像金字塔上使用了多尺度测试。将图像金字塔的每一层都特征化,好处就是它能产生一个多尺度的特征表示,每一层都具有很强的语义信息,包括高分辨率 levels。

但是,将图像金字塔的每一层都特征化有明显的限制。推理时间将变得非常长,那么这个方法就没法用到实际应用中。而且,用图像金字塔端到端地训练一个深的网络在内存空间上也是不可行的。所以,如果要使用图像金字塔,就只能在测试阶段用,但是这会导致训练和测试时的推理过程不一致。基于这些原因,Fast 和 Faster R-CNN 都没有使用特征化的图像金字塔。

但是,图像金字塔并不是计算多尺度特征表示的唯一方法。深度卷积网络也逐层计算特征层级,因为CNN有用到下采样层,该特征层级就自带了多尺度性和金字塔的形状。这个 in-network 特征层级产生不同分辨率的特征图。由于各层深度不同,造成它们语义信息间的 gap 较大。高分辨率特征图的特征都比较low-level,损害特征表示能力。

SSD 是第一个尝试利用卷积网络金字塔特征层级的模型,将其看作特征化的图像金字塔(Fig. 1c)。理想上,SSD 风格的金字塔可以重复利用前向传播中,在不同网络层中计算得到的多尺度特征图,这样就没什么额外成本。但是为了避免使用 low-level 特征,SSD 放弃了使用已经计算好的层,而是在网络较高的层上构建金字塔(VGG 网络中的 conv4_3)。因此,它就没有再使用特征层级中高分辨率的特征图。但我们证明了,这些高分辨率的特征图对检测小物体很重要。

这篇论文的目的就是利用卷积网络特征层级的金字塔形状,构建一个在所有的尺度上都有丰富的语义信息的特征金字塔。为此目的,我们需要一个这样的网络结构,它能将低分辨率而语义信息丰富的特征,和高分辨率而语义信息贫瘠的特征结合起来,通过一个 top-down pathway 以及 lateral 连接(Fig. 1d)。这样的特征金字塔在所有层级上都有丰富的语义信息,而且从单一输入图像尺度上构建起来也很快。也就是说,这个网络结构创建的 in-network 特征金字塔能够代替特征化的图像金字塔,而无需牺牲表现能力,速度和内存空间。

类似的结构( top-down 和 skip 连接的结构)在最近的研究中很流行。它们的目的就是生成一个单一的高分辨率且 high-level 特征图,然后再进行预测(Fig. 2 top)。相反,我们的方法将网络结构作为特征金字塔,然后在每个层级上独立地进行预测(Fig. 2 bottom)。我们的方法效仿了特征化图像金字塔,在其它学术论文中都没有提过。

我们将此方法称为特征金字塔网络(FPN)。在COCO检测基准上,基于FPN的 Faster R-CNN 检测器获得了 state of art 的成绩,超过了所有的 heavily-engineered 模型。在研究实验中,我们发现对于边框 proposals,FPN 极大地提升了 Average Recall 8.0 分。对于目标检测任务,FPN 和基于 ResNets 的 Faster R-CNN 模型相比,提升了 COCO-Style Average Precision 2.3 分,PASCAL-Style 的 AP 3.8 分。我们的方法也很容易就可扩展到实例分割任务上,相较于依赖图像金字塔的 state of art 方法,可以提升 AR 值和速度。

此外,我们的金字塔结构可以在所有尺度上端到端地训练,在训练和测试时过程统一。这样,FPN 能够获得更高的精度,而且和单尺度基线网络比较,这种提升不会增加测试时间。

2. Related Work

Hand-engineered features and early neural networks

SIFT 特征最初是用于特征点匹配。HOG 特征和 SIFT 特征要在整个图像金字塔上进行密集计算。HOG 和 SIFT 金字塔在许多论文著作中都有用到,如图像分类,目标检测,人体姿势估计。学者对如何提升特征化图像金字塔的计算速度很有兴趣。

Deep ConvNet object detectors

随着深度卷积网络的发展,目标检测器如 OverFeat 和 R-CNN 都在准确率上展现不错的效果。OverFeat 采取了与早期人脸检测器类似的策略,在图像金字塔上用卷积网络作为一个滑动窗口检测器。R-CNN 采取了 region proposal 策略,每一个 proposal 在分类前都通过尺度归一化操作。SPPnet 证明这种 region-based 检测器可以在单一图像尺度的特征图上更高效地应用。最近的如 Fast R-CNN 和 Faster R-CNN 都使用的单一尺度计算出来的特征,因为它能很好地平衡速度和精度。但是,多尺度检测对小物体效果仍然更好。

Methods using multiple layers

最近有一些方法使用卷积网络中不同的层来提升检测和分割。FCN 在每一个类别将多个尺度的分数加和,计算语义分割。SSD 和 MS-CNN 在特征层级的多个层上预测物体,无需结合特征或得分。
另一些方法探索了 lateral/skip 连接,将不同分辨率和语义信息层级的 low-level 特征图联系起来,来进行语义分割(U-Net, Sharp-Mask),人脸识别(Recombinator networks)或关键点检测(Stacked Hourglass networks)。

3. Feature Pyramid Networks

我们的目的是使用卷积网络的金字塔特征层级,因为它包含着从低到高的语义信息,然后去构建一个有着丰富语义信息的特征金字塔。FPN 是通用的,在这篇论文我们主要基于滑动窗口的 Region Proposal Network — RPN 和 region-based Fast R-CNN。我们也在第六节将FPN用在语义分割任务上。

我们的方法将任意大小,尺度单一图像作为输入,然后以卷积的方式,在不同的层级输出相对应大小的特征图。这个过程是独立于主干网络结构的,在这篇论文我们用了 ResNet。金字塔的结构包括一个 top-down pathway,bottom-up pathway 和 lateral 连接。

Bottom-up pathway

Bottom-up pathway 就是主干卷积网络中的前向计算,它以缩放因子2来计算各层的特征图,然后得到特征层级。通常有许多层输出的特征图大小和输入的是一样的,我们将这些层称作处于同一网络阶段(stage)。对于我们的特征金字塔,我们对每个阶段只定义一个金字塔层。因为每个阶段最深的层应该包含着最丰富的特征,我们选取每个阶段的最后一层的输出,添加到金字塔中。

对于 ResNet,我们使用每个阶段最后一个残差模块的特征激活输出。我们将这最后的残差模块的输出表示为 { C 2 , C 3 , C 4 , C 5 } \{C_2, C_3, C_4, C_5\} ,分别对应着 c o n v 2 , c o n v 3 , c o n v 4 , c o n v 5 conv2, conv3, conv4, conv5 的输出,注意它们的步长为 { 4 , 8 , 16 , 32 } \{4,8,16,32\} 像素,对应输入的图像。我们在金字塔中没有包含 c o n v 1 conv1 层,因为内存有限。

Top-down pathway and lateral connections

Top-down pathway 通过对较高金字塔层的特征图(spatially coarser,语义更强)进行上采样,推理出高分辨率特征。然后通过 lateral 连接到bottom-up pathway,用 bottom-up pathway 的特征增强这些特征。Lateral 连接将 bottom-up pathway 和 top-down pathway 上相同空间大小的特征图融合起来。Bottom-up 特征图的语义信息虽然比较 low-level,但是它的下采样次数比较少,激活函数能更准确地进行定位。

Fig. 3 就是构建 top-down 特征图的模块。有了分辨率较粗糙的特征图,我们将其进行因子为2的上采样,使用 nearest neighbor upsampling 方法。上采样得到的特征图然后和bottom-up 对应的特征图通过 element-wise addition进行融合。不断迭代这个过程,直到产生最优的分辨率特征图。在开始迭代时,我们在 C 5 C_5 上添加一个 1 × 1 1\times 1 的卷积层,产生 coarsest 的分辨率特征图。最后,我们在每个融合的特征图上加一个 3 × 3 3\times 3 的卷积,产生最终的特征图,降低上采样的影响。这组最终的特征图叫做 { P 2 , P 3 , P 4 , P 5 } \{P_2, P_3, P_4, P_5\} ,对应着 { C 2 , C 3 , C 4 , C 5 } \{C_2, C_3, C_4, C_5\}

因为金字塔每一层级都共享分类器/回归器,和传统的特征化图像金字塔一样,我们将所有特征图中的特征维度(通道个数, d d )固定。在这篇论文,我们设 d = 256 d=256 ,因此所有额外的卷积层都有256-通道的输出。在这些额外的层中,均为线性的。

简洁性在我们的设计中是最核心的点,我们发现此模型能够对许多设计选项都能表现出足够的鲁棒性。我们用更加复杂的模块(使用多层残差模块作为连接)做实验,结果得到了少量的提升。

4. Applications

我们为在深度卷积网络中搭建特征金字塔提供了一个通用解决方案。我们采用了RPN 来进行边框 proposal 生成以及 Fast R-CNN 进行目标检测。为了显示此方法的简洁性和有效性,我们在原系统上做了些许改动来适应我们的特征金字塔。

4.1 Feature Pyramid Networks for RPN

RPN 通过滑动窗口来进行物体检测,这些滑动窗口不知道具体类别。在原来的RPN 设计中,在密集的 3 × 3 3\times 3 滑动窗口之上,有一个小网络去做有物体/没有物体的二元分类,以及边框回归。这是通过一个 3 × 3 3\times 3 的卷积层,和其后两个 1 × 1 1\times 1 卷积的分支来做分类和回归实现的,我们称作网络的head。是否存在物体,以及边框回归都是通过一组 anchors 定义的。这些 anchors 都有多个预先定义好的尺度和宽高比,以此来尽可能地覆盖不同的物体形状。

我们修改了RPN,将单尺度特征图替换为我们的FPN。我们在特征金字塔的每一层上都加上了一个 3 × 3 3\times 3 卷积和2个 1 × 1 1\times 1 卷积。由于 head 需要在每一个金字塔层级所有的位置上密集地滑动,我们不需要在具体的某一层上都弄个多尺度的 anchors。我们对每一层都有单一尺度的 anchors。也就是说,我们在 { P 2 , P 3 , P 4 , P 5 , P 6 } \{P_2, P_3, P_4, P_5, P_6\} 上分别定义了 { 3 2 2 , 6 4 2 , 12 8 2 , 25 6 2 , 51 2 2 } \{32^2,64^2,128^2,256^2,512^2\} 像素大小的 anchors。我们在每一层也使用了多个宽高比 { 1 : 2 , 1 : 1 , 2 : 1 } \{1:2, 1:1, 2:1\} 的 anchors。所以,总共在金字塔上我们有15个 anchors。

我们依据每个 anchor 和 ground-truth 边框的IoU 来决定其训练标签。如果一个 anchor 对于某一 ground truth 边框有着最高的 IoU,或者它和任一 ground-truth 边框的IoU 大于0.7,那么它就被赋予一个正标签;如果它和所有的 ground truth边框的IoU都小于0.3,它就是负标签。需要注意的是,ground truth边框并不是直接赋给金字塔的各层;相反,ground truth 边框是和 anchors 绑在一起的,然后 anchors 被赋给各金字塔层。

我们将各 head 的参数在所有的金字塔层级上进行了共享。我们也尝试了下如果不共享参数的情况,也得到了类似的精度。共享参数得到的优异表现说明,金字塔所有的层都共享着类似的语义信息。有了上述的改进,RPN 能很自然地通过FPN 进行训练和测试。

4.2 Feature Pyramid Networks for Fast R-CNN

Fast R-CNN 是基于 region的目标检测器,Region-of-Interest(RoI)池化用于提取特征。Fast R-CNN 通常用于单尺度特征图上。为了将它用在我们的FPN上,我们需要将不同尺度的 RoIs 赋给各金字塔层级。

我们将特征金字塔当作从图像金字塔产生的。这样我们就可以调整 region-based 检测器的赋值策略。我们将一个宽度为 w w 高度为 h h 的 RoI 赋给特征金字塔的第 P k P_k 层,通过:
k = k 0 + l o g 2 ( w h / 224 ) k=\lfloor k_0 + log_2(\sqrt{wh}/224) \rfloor

这里224是经典ImageNet预训练的大小, k 0 k_0 是RoI( w × h = 22 4 2 w\times h=224^2 ) 应该映射到的目标层。与基于ResNet的Faster R-CNN类似,它将 C 4 C_4 作为单尺度特征图,我们也设 k 0 = 4 k_0=4 。上述等式的意思是,如果一个RoI的尺度变小了,它就应该映射到一个分辨率更高的层级。

我们将预测器的 heads 加到各层所有的 RoIs上。这些 heads 都共享参数,不管它们在哪一层。我们仅使用了 RoI池化来提取 7 × 7 7\times 7 的特征,然后在最终的分类和边框回归层之前,加上两个隐藏层(1024-维全连接层),每一个后面跟着一个ReLU层。这些层都随机初始化,因为在ResNet中没有预先训练好的全连接层可用。和标准的 c o n v 5 conv5 head相比,我们的两个全连接 MLP head 参数权重更轻而且更快。

基于以上改进,我们可以在特征金字塔上面训练和测试Fast R-CNN。

5. Experiments

Pls read paper for more details.

猜你喜欢

转载自blog.csdn.net/calvinpaean/article/details/88875530