Feature Pyramid Networks for Object Detection

https://arxiv.org/pdf/1612.03144.pdf

Feature Pyramid Networks for Object Detection

Abstract

特征金字塔是对于多尺度目标检测的识别系统里的一个基本组件。但是近期的深度学习目标检测器已经避免使用金字塔的表达方式,有部分原因是因为金字塔表达是计算和存储密集型。在本文中,我们开发了一种内在多尺度的金字塔层级的深度卷积网络来构建特征金字塔,只带入了一些边际额外成本。这个带有横向连接的自上而下的结构能够在所有尺度上构建高层次的语义特征图。这个结构叫做特征金字塔网络(FPN),在很多应用中作为通用特征提取器都取得了很好的结果。在基本的Faster R-CNN结构中使用FPN,我们的方法在COCO 检测基准数据集上取得了state-of-art的结果,超过了以往所有的单一模型。另外,我们的方法在一个GPU上可以跑到6fps,因此这是一个可以应用于实际的,精确的对于多尺度目标检测的解决办法。

1. Introduction

在机器视觉里,在多尺度上识别物体是一个最为基本的挑战。基于图像金字塔生成的特征金字塔形成了第一种解决方法的基础(如图1(a))。这些金字塔在某种意义上是具有尺度不变性的,也就是一个物体的尺度变换是可以通过金字塔的层级来偏移进行补偿的。直观上,这个性质保证了模型可以通过扫描各种位置和金字塔层级来在很大尺度跨度上对物体进行检测。

这里写图片描述
图1. (a)使用图像金字塔来构建特征金字塔。特征被独立的从每个图像尺寸中提取出来,速度慢。(b)近期的检测系统倾向于只使用一种尺度的特征来进行更快速的检测。(c)一种代替方案是重复利用由卷积网络计算出的金字塔层级特征来将其当作是特征图像金字塔。(d)我们提出的FPN,和(b),(c)一样快,而且更准确。在图中,蓝框表示特征图,越粗的外框表示特征语义信息越强。

特征图像金字塔在人工编码特征的时代是使用地非常多的。对于要求密集采样的目标检测器如DPM,要得到好的结果,特征图像金字塔是非常关键的。对于识别任务来说,人工编码的特征已经绝大部分被深度卷积网络计算出的特征所替代。除了能够表达高层次的语义信息,卷积网络对于特征的变化更加鲁棒,因此促进了使用单一输入尺度计算出的特征进行识别(如图1(b))。但是即使有了这样的鲁棒性,为了得到更为准确的结果,金字塔仍然是需要的。所有最近的ImageNet和COCO检测挑战中的高分模型都使用了特征图像金字塔进行多尺度测试。对于图像金字塔的每一层进行特征编码的优势在于这样会产生一个多尺度的特征表达,因为对于所有层来说都是带有强烈的语义信息的,包括高像素的层级。
尽管如此,对于图像金字塔的每一层进行特征编码具有明显的短板。推断时间将大幅度增加(如4倍),使得这一方法在真实环境下不太现实。而且,在一个图像金字塔上进行深度网络的端对端学习在存储上也是不现实的,所以如果要利用图像金字塔,它只能被用于测试,这就使得训练和测试的推断不一致。基于这些原因,Fast和Faster R-CNN在默认设置中倾向于不使用特征图像金字塔。
但是,图像金字塔并不是计算多尺度特征表达的唯一方法。一个深度卷积网络一层一层地计算层级特征,然后随着降采样层,层级特征被赋予了内在的多尺度和金字塔形状。这个网络内的层级特征就构造出了不同空间像素的特征映射图,但是由于深度不同会造成比较大的语义gap。高像素的特征图带有的是低层次的特征这会使得它们对于目标识别的特征表达能力较弱。
SSD(Single Shot Detector)是第一个尝试使用使用卷积网络的层级特征来作为特征图像金字塔的(如图1(c))。理想情况下,SSD-style的金字塔会重复使用通过前向传播计算的不同层的多尺度特征图,因此几乎不需要额外的花费。为了避免使用低层次的特征,SSD放弃重复使用已经计算过的层,而是从网络的高层通过增加新的层来开始建立金字塔(如VGG16的conv4_3开始)。因此它错过了使用高像素特征图的层级特征的机会。我们发现这些特征对于预测小的物体来说非常重要。
本篇论文的目的在于自然地利用卷积网络特征层级的金字塔大小 来创造一个在所有尺度上都具有强力语义信息的特征金字塔。为了完成这个目的,我们建立了一个自上而下的带有横向连接的结构,它能很好的结合低像素、高语义特征和高像素、低语义特征(如图1(d)))。这个得到的结果是一个在所有尺度都具有丰富语义信息的特征金字塔,而且它能够从一个单独的输入图像尺度中迅速建立起来。换句话说,我们将展示如何创造一个网络内的特征金字塔,这个金字塔能够在不牺牲表达能力,速度和存储空间的情况下代替特征图像金字塔。
相似的采用自上而下和跳跃连接的结构在最近的研究中很流行。它们的目标在于生成一个单一高层级的高分辨率特征图(如图2),然后使用这个特征图进行预测。相反,我们的方法是独立地在每一层进行预测(如图1(d))。我们的模型还效仿了特征图像金字塔,这个是上述研究中没有的。
除此之外,我们的金字塔结构能够在所有尺度上进行端对端的学习,而且在训练和测试上都可以一致地使用。最后,FPNs能够取得比现存state-of-the-art的方法都要高的准确率。另外,这种提高并没有额外增加时间。

这里写图片描述
图2. 自上而下带有跳跃连接的网络结构,使用分辨率最高的层级进行预测。

2. Related Work

Hand-engineered features and early neural networks. SIFT特征是从空间尺度的极值上提取出来的,用于特征点匹配。HOG特征还有之后的SIFT特征都是从整个图像金字塔中密集地计算出来的。这些HOG和SIFT金字塔被运用到大量的诸如图像分类,目标检测,人类动作预测等任务中。这导致特征图像金字塔迅速地引起了人们的注意。Dollar等人给出了一种快速金字塔计算,通过先计算一个稀疏采样金字塔然后再对丢失的层级进行插值。在HOG和SIFT之前,早期的利用卷积网络进行人脸检测是在图像金字塔上计算浅层网络来进行多尺度的人脸检测。

Deep ConvNet object detectors. 随着近来深度卷积网络的发展,例如OverFeat和R-CNN的目标检测都展现出了准确率上的极大提升。OverFeat采用了与早期神经网络人脸检测器相似的策略,对一个图像金字塔使用一个卷积网络作为滑动窗口检测器。R-CNN则是采用了基于区域候选框的策略,在这里每个候选框在输入进卷积网络进行分类之前都需要进行尺度归一化。SPPnet展示了这样的基于区域的检测器能够更高效地使用由单一图像尺度上提取的特征图。最近的、更加准确的检测方法像Fast R-CNN和Faster R-CNN支持使用从单一尺度图像中计算出的特征,因为它提供了很好地准确率和速度上的平衡。然而,多尺度检测仍然会表现地更好,尤其是小物体。

3. Feature Pyramid Networks

我们的目的是好好利用卷积网络的金字塔层级特征(语义信息从低到高)去建立一个整个都带有高语义信息的特征金字塔。这个生成的FPN是通用的,在本文中主要着重于滑动窗口(RPN)和基于区域的检测器(Fast R-CNN)。
我们的方法可以将任意大小的单一尺寸图像作为输入,然后按比例地在多个层级上输出对应大小的特征映射图,网络是全卷积模式。这个过程与主网络结构是独立的,在本文中我们使用ResNets。我们金字塔的构建包含了一个自下而上地通道,一个自上而下的通道和横向连接,我们接下来会一一阐述。

Bottom-up pathway. 自下而上的通道是主卷积网络的前向传播计算过程,它会计算一个层级特征,这个层级特征会包含几个尺寸(尺寸间的缩放大小是2)的特征映射图。这里有许多层都会生成同样大小的输出映射图,我们将这些层定义为同一个网络stage。对于我们的特征金字塔来说,对于每一个stage我们定义一个金字塔级。我们选择每个stage的最后一层输出加入到我们特征映射图集合中来丰富我们的金字塔。这个选择很自然合理,因为每个stage的最深的一层往往拥有最强烈的特征。
特别的,对于ResNets,我们使用每个stage的最后一个残差块的特征激活值输出。我们将最后的残差块的输出定义为 { C 2 , C 3 , C 4 , C 5 } \{C_2,C_3,C_4,C_5\} ,它们分别表示conv2,conv3,conv4,conv5的输出,注意到它们对于输入图像拥有步长 { 4 , 8 , 16 , 32 } \{4,8,16,32\} 像素。我们在金字塔里不使用conv1,因为像素太大,需要很大的存储空间。

Top-down pathway and lateral connections. 这个自上而下的结构通过从更高的金字塔层级中上采样像素更低,但是语义更强的特征映射图来生成更高分辨率的特征。这些特征通过横向连接和自下而上通道中的特征进行合并从而得到加强。每个横向连接都将来自自上而下和自下而上通道中的同样大小的特征图进行合并。自下而上的特征图虽然语义信息少,但是它的激活值定位更为准确,因为它降采样的次数更少。
图3展示了建立自上而下特征图的模块。对于低分辨率的特征图,我们使用2像素的上采样(为了简便,使用最近邻上采样)。这个上采样的特征图然后与相应大小的自下而上特征图通过按位相加进行合并(需要经过 1 × 1 1\times1 卷积进行通道匹配)。这个步骤一直迭代直到生成最高像素的特征图。为了开始这个迭代过程,我们简单地在 C 5 C_5 上联接一个 1 × 1 1\times1 的卷积层来生成最低像素的特征图。最后,我们在每个合并图上增加一个 3 × 3 3\times3 的卷积来生成最终的特征图,这是为了减少上采样带来的混叠效应。最终的特征图集合被叫作 { 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\} 相对应。

这里写图片描述
图3. 一张图像展示横向连接和自上而下通道通过相加实现合并。

因为在传统的特征图像金字塔中所有级的金字塔需要使用共享的分类器和回归器,所以我们对于所有的特征图进行了维度修正(使用 d d 来表征通道数)。在本文中我们设置 d = 256 d=256 ,因此所有额外的卷积层都是256通道的输出。在这些额外的层中不包含非线性,经验上我们发现这会带来一些很小的影响。
简洁是我们设计的核心,我们发现我们的模型对于很多设计选择都是鲁棒的。设计更好的连接模块不是本文的核心,所以我们倾向于介绍上面介绍的简单设计。

4. Applications

我们的方法是一种普世方法在深度卷积网络中建立特征金字塔。接下来,我们将在RPN中采用我们的方法来进行预测框的生成在Fast R-CNN中采用我们的方法进行目标检测。为了阐明我们方法的简洁性和有效性,我们对原来的RPN和Fast R-CNN系统进行小小的修改来适应我们的特征金字塔。

4.1. Feature Pyramid Networks for RPN

RPN是一个滑动窗口类不可知物体检测器。在原来的RPN设计中,单一尺度的卷积特征图上,经过密集的 3 × 3 3\times3 的卷积连接一个小的子网络,通过这个子网络来实现前景/背景的二分类和边框回归。这个 3 × 3 3\times3 卷积和两个同胞子网络的结果,我们定义为网络head。这个前景/背景标签和边框回归目标都是通过一个叫做anchors的参考框集合来定义的。这些anchors是预先定义好的多尺度和纵横比的,为了覆盖不同大小的物体。
我们通过将单一尺寸的特征映射图替换成FPN来适应RPN。在我们特征金字塔的每一级上我们都联接一个同样设计的head( 3 × 3 3\times3 卷积+两个同胞 1 × 1 1\times1 卷积)。因为head结构在所有金字塔级上的所有位置进行密集滑动,所以对于特定级就不需要多尺度的anchors。而是,我们对于每一级都设计一个特定尺寸的anchors。对于 { P 2 , P 3 , P 4 , P 5 , P 6 } \{P_2,P_3,P_4,P_5,P_6\} 我们分别定义anchors大小为 { 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\} 。但是我们仍然在每一级都使用RPN中的纵横比 { 1 : 2 , 1 : 1 , 2 : 1 } \{1:2,1:1,2:1\} 。所以总得来说,在金字塔里我们一共拥有15种anchors。
我们仿照RPN中的标定方法,基于anchors与gt框的IoU来对anchor进行标定。注意到gt框的尺寸并不用来作为将gt框赋予给哪层金字塔的标准;而是,gt框只对应于anchors,再由anchors对应到自己的层级。那么这样我们就不引入RPN论文里提到的规则以外的规则。
我们注意到网络heads的参数在所有特征金字塔层级上是共享的;我们也评估了不共享参数的模型,发现得到了相似的准确率。共享参数引入好的结果表明金字塔所有层级都共享相似的语义层级。这个优势就类似于使用了特征图像金字塔,在这个特征图像金字塔里一个共有的head 分类器可以使用任意图像尺度计算出的特征。

4.2. Feature Pyramid Networks for Fast R-CNN

Fast R-CNN是一个基于区域的目标检测器,其中使用了RoI(Region-of-Interest)池化来提取特征。Fast R-CNN一般都应用在单一尺度的特征图上。为了配合我们的FPN,RoIs需要被应用在金字塔的不同层级上。
我们假装我们的特征金字塔是从一个图像金字塔上生成的。因此我们可以采用当在图像金字塔上使用基于区域的检测器的策略。我们将宽度为 w w ,高度为 h h (在网络的输入图像上)的RoI分配到层级 P k P_k 的特征金字塔, k k 由下式定义:
(1) k = k 0 + log 2 ( w h / 224 ) k=\lfloor k_0+\log_2(\sqrt{wh}/224) \rfloor \tag 1
这里224是标准的训练前ImageNet图像大小,然后 k 0 k_0 是目标层级,一个 w × h = 22 4 2 w\times h=224^2 的RoI需要被映射到这个层级上。类似于基于ResNet的Faster R-CNN系统是使用 C 4 C_4 作为单一特征图,所以我们设置 k 0 = 4 k_0=4 。直观的来说,方程(1)意味着如果RoI的尺度变小,那么RoI就应该映射到一个分辨率更高的层级( k = 3 k=3 )。
我们在所有层的所有RoIs上都联接一个head(在Fast R-CNN里,heads是类别分类器和边框回归器)。所有的head不管是哪一级都共享参数。在ResNet论文中,ResNet的conv5层级(一个9层深度的子网络)是作为一个head应用在conv4的特征上,但是我们的方法已经利用conv5来构建金字塔了。所以不像ResNet论文里,我们就简单地采用RoI池化来提取 7 × 7 7\times7 的特征,然后联接两个隐藏的,1024维的全连接层(每个都跟一个ReLU)(最后再经过分类和回归层)。这些层都是随机初始化,因为全连接层在ResNet中没有预训练的参数。相比于标准的conv5 head,我们的2-fc MLP head参数很少,训练更快。


小广告

淘宝choker、耳饰小店 物理禁止
女程序员编码时和编码之余 都需要一些美美的choker、耳饰来装扮自己
男程序员更是需要常备一些来送给自己心仪的人
淘宝小店开店不易 希望有缘人多多支持 (O ^ ~ ^ O)
本号是本人 只是发则小广告 没有被盗 会持续更新深度学习相关博文和一些翻译
感谢大家 不要拉黑我 ⊙﹏⊙|||°
这里写图片描述

猜你喜欢

转载自blog.csdn.net/mike112223/article/details/79155378