Feature Pyramid Networks for Object Detection(FPN)

提出一种新的多尺度特征提取方法——特征金字塔网络(FPN),用于改进目标检测器的性能。该方法利用深度卷积网络的固有金字塔结构,通过自顶向下的侧向连接构建语义丰富的多尺度特征图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Feature Pyramid Networks for Object Detection(FPN)

特征金字塔网络用于目标检测

 

特征金字塔是识别中的基本组成部分用于检测不同尺度物体的系统。但是最近深度学习对象检测器避免了金字塔表示,部分是因为它们是计算和内存密集。在本文中,我们利用固有的多尺度,深层卷积网络的锥体层次构造功能金字塔边际额外成本。自上而下侧向连接的体系结构正在开发之中,在各个尺度上构建高级语义特征图。这个架构,称为特征金字塔网络(FPN),作为通用特征提取器显示出显着的改进在几个应用程序。更快地使用FPN R-CNN系统,我们的方法实现了最先进的单一模型无COCO检测基准的结果超越了所有现有的单一模型的条目包括来自COCO 2016挑战赛冠军的选手。另外,可达到6FPS,因此是多尺度的实用和准确的解决方案对象检测。

 

1 介绍

识别大小不同的物体是计算机视觉中的一个基本挑战。 特征建立在图像金字塔上的金字塔(简称我们称之为特征化图像金字塔)构成了标准解决方案的基础[1](图1(a))。 这些金字塔是规模不变的,因为对象的尺度变化是通过在金字塔中移动它的等级来抵消的。 直观地说,该属性使模型能够通过在位置和金字塔等级上扫描模型来检测大范围尺度的对象。

手工设计的功能时代大量使用了形象化的图像金字塔[5,25]。它们非常关键,以至于像DPM这样的物体检测器需要进行高密度的采样才能获得好的结果(例如,10个刻度的peroctave)。对于识别任务,工程特征已经被深度卷积网络(ConvNets)[19,20]计算的特征大部分所取代。 ConvNets除了能够表示更高层次的语义外,还具有更强的尺度变异性,从而有助于从单一输入尺度上计算出来的特征进行识别[15,11,29](图1(b))。但是,即使有这种鲁棒性,金字塔仍然需要得到最准确的结果。在ImageNet [33]和COCO [21]检测挑战中最近的所有最重要的条目都使用了对特征化图像金字塔的多尺度测试(例如[16,35])。使图像金字塔的每个级别具有特征的主要优点在于它产生了多级别的特征表示,其中所有级别在语义上是强的,包括高分辨率级别。

 

(a)图像金字塔,即将图像做成不同的scale,然后不同scale的图像生成对应的不同scale的特征。这种方法的缺点在于增加了时间成本。 (b)像SPP netFast RCNNFaster RCNN是采用这种方式,即仅采用网络最后一层的特征。 (c)像SSDSingle Shot Detector)采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。 (d)我们提出的特征金字塔网络(FPN)与(b)和(c)类似,但是更准确。 在这个图中,特征图用蓝色轮廓表示,较粗的轮廓表示语义上较强的特征。像SSDSingle Shot Detector)采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。

   然而,对图像金字塔的每一个层次进行设计都有明显的局限性。 检测时间显着增加,使得这种方法在实际应用中不切实际。 此外,在图像金字塔上端对端地训练深层网络在内存方面是不可行的,所以如果被利用的话,图像金字塔仅在测试时间被使用[15,11,16,35],这会造成训练和测试的不一致。 由于这些原因,fastfaster R-CNN [11,29]选择在默认设置下不使用featurized图像金字塔。

然而,图像金字塔不是计算多尺度特征表示的唯一方法。 深层的ConvNet逐层地计算一个要素层次结构,并且对这个要素层次结构进行二次采样,得到一个固有的多尺度,金字塔形状 这种网内特征层次结构产生不同空间分辨率的特征图,但引入由不同深度引起的大的语义间隙。 高分辨率图具有低级特征,这降低了它们对物体识别的表现能力。

SSD[22]是首次尝试使用ConvNet的金字塔特征层次结构,好像它是一个特征化的图像金字塔(图1c))。 理想情况下,SSD风格的金字塔将重复使用正向通道中计算的不同层次的多尺度特征映射,因此不增加额外的计算量。 但是为了避免使用低级功能,SSD不得不重复使用已经计算好的图层,而是从网络中的高层开始构建金字塔(例如,VGG网络的conv4_3卷积[36]),然后添加几个新层。 因此,它丢失了特征层次结构的更高分辨率的的位置信息。 我们证明这些对于检测小物体很重要.

在近期的研究中,采用自顶向下和跳过连接的类似架构是流行的[28,17,8,26]。 他们的目标是产生一个高分辨率的高分辨率特征图,在这个高分辨率图上进行预测(图2顶部)。 相反,我们的方法利用该架构作为特征金字塔,其中预测(例如,对象检测)在每个级别独立地进行(图2底部)。 我们的模型与一个特征化的图像金字塔相似,这在这些作品中还没有被研究过。

我们的方法,称为特征金字塔网络(FPN),在各种系统中进行检测和分割[11,29,27]。 没有花里胡哨的报道,我们仅仅基于FPN和一个基本的faster R-CNN探测器[29]报告了具有挑战性的COCO探测基准[21]的最新单模型结果,超过了所有现有的竞赛获胜者的模型参赛作品。 在消融实验中,我们发现,对于bounding box提议FPN将平均召回(AR)显着增加8.0; 对于目标检测来说,它比ResNet上更快的R-CNN强单一基线基线提高了COCO型平均精确度(AP2.3点和PASCALAP 3.8点。 我们的方法也很容易扩展到掩盖提议,并且改善了实例分割AR和速度,这些方法严重依赖于图像金字塔。

 

上面一个带有skip connection的网络结构在预测的时候是在finest level(自顶向下的最后一层)进行的,简单讲就是经过多次上采样并融合特征到最后一步,拿最后一步生成的特征做预测。而下面一个网络结构和上面的类似,区别在于预测是在每一层中独立进行的。后面有这两种结构的实验结果对比,非常有意思,因为之前只见过使用第一种特征融合的方式。

Top: a top-down architecture with skip connections, where predictions are made on the finest level (e.g., [28]). Bottom: our model that has a similar structure but leverages it as a feature pyramid, with predictions made independently at all levels.

另外,我们的金字塔结构可以在所有的尺度上进行端对端训练,并且在训练/测试时间一致地使用,这是使用图像金字塔的比不了的地方。 因此,FPN能够比所有现有的最先进的方法获得更高的准确性。 此外,这种改进是在不增加单一基准测试时间的情况下实现的 我们相信这些进展将有助于未来的研究和应用。

2、相关工作

Hand-engineered features和早期的神经网络。

SIFT特征[25]最初是在尺度空间极值中提取的,用于特征点匹配。 HOG特征[5]以及后来的SIFT特征,在整个图像金字塔上被密集计算 这些HOG和SIFT金字塔已被用于许多作品的图像分类,目标检测,人体姿态估计等等。 对计算特征化的图像金字塔也很感兴趣。 Dollar'等人。 [6]通过首先计算一个稀疏采样(比例尺)的金字塔,然后插入缺失的水平来演示快速金字塔计算。 在HOG和SIFT之前,ConvNet [38,32]早期的人脸检测工作在图像金字塔上计算浅层网络来检测多尺度的人脸。

Deep ConvNet object detectors:

随着现代深度通信网络的发展[19],像OverFeat [34]和R-CNN [12]这样的物体探测器在精度上有显着提高。 OverFeat采用了一种类似于早期神经网络人脸检测器的策略,在图像金字塔上应用ConvNet作为滑动窗口检测器。 R-CNN采用了一个区域提案为基础的策略[37],其中每个提案都是在对ConvNet进行分类之前进行规模化。 SPPnet [15]表明,这种基于区域的检测器可以更有效地应用于在单一图像尺度上提取的特征映射。 最近更准确的检测方法,如Fast R-CNN [11]和Faster R-CNN [29]提倡使用从单一尺度计算出的特征,因为它提供了准确性和速度之间的良好折衷。 然而,多尺度检测仍然表现更好,特别是对于小型物体。

 

Methods using multiple layers

一些最新的方法通过使用ConvNet中的不同层来改进检测和分割。 FCN [24]在多个尺度上对每个类别的部分分数进行求和,以计算语义分割。 Hypercolumns [13]使用类似的方法进行对象实例分割。 其他几种方法(HyperNet [18],ParseNet [23]和ION [2])在计算预测之前将多个层的特征连接起来,这相当于对转换后的特征求和。 SSD [22]和MS-CNN [3]可预测特征层次结构的多个层次的对象,而不需要组合特征或分数。

 

最近有一些方法利用横向/跳过连接,将横跨分辨率和语义层次的低级特征映射关联起来,包括U-Net [31]和SharpMask [28]用于分割,Recombinator网络[17]用于人脸检测以及Stacked Hourglass网络 为关键点估计。 Ghiasi等人 [8]提出了一个拉普拉斯金字塔演示FCNs逐步细化分割。 尽管这些方法采用的是金字塔形结构,但它们不同于特征化的图像金字塔[5,7,34],其中各个层次都进行了独立的预测,参见图2.实际上,对于图2(上)的金字塔结构 ,图像金字塔仍然需要识别多个尺度的对象[28]。

3 特征金字塔网络

我们的目标是利用ConvNet的金字塔特征层次结构,它具有从低到高的语义,并通过高层次的语义建立一个特征金字塔。 由此产生的特征金字塔网络是通用的,本文中我们侧重于滑动窗口提议(Region Proposal Network,简称RPN)[29]和基于区域的探测器(Fast R-CNN)[11]。 我们也将FPN推广到实例细分提案。

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


 

作者的主网络是采用ResNet网络:

作者算法大致结构:一个自底向下的线路,一个自顶向上的线路,横向连接,。图中放大的区域就是横向连接,这里1*1的卷积核的主要作用是减少卷积核的个数,也就是减少feature map的个数,并不改变feature map 的尺寸大小。

自底向上:

自下而上的路径是主干ConvNet的前馈计算,ConvNet计算由几个尺度上的特征映射组成的特征层级,缩放步长为2.通常有许多层产生相同尺寸的输出映射,并且我们说这些层 处于同一个网络阶段。 对于我们的特征金字塔,我们为每个阶段定义一个金字塔等级。 我们选择每个阶段的最后一层的输出作为我们的特征地图的参考集,我们将丰富来创建我们的金字塔。 这个选择是自然的,因为每个阶段的最深层应该有最强大的功能

具体而言,对于ResNets [16],我们使用每个阶段的最后一个残差块输出的特征激活。 我们将conv2conv3conv4conv5输出中的这些最后残差块的输出表示为{C2C3C4C5},并注意到它们具有{4,8,16,32}像素相对于 输入图像。 由于内存占用大,我们不包含conv1到金字塔。

 

CNN的前馈计算就是自下而上的路径,特征图经过卷积核计算,通常是越变越小的,也有一些特征层的输出和原来大小一样,称为“相同网络阶段”(same network stage )。对于本文的特征金字塔,作者为每个阶段定义一个金字塔级别, 然后选择每个阶段的最后一层的输出作为特征图的参考集。 这种选择是很自然的,因为每个阶段的最深层应该具有最强的特征。具体来说,对于ResNets,作者使用了每个阶段的最后一个残差结构的特征激活输出。将这些残差模块输出表示为{C2, C3, C4, C5},对应于conv2conv3conv4conv5的输出,并且注意它们相对于输入图像具有{4, 8, 16, 32}像素的步长。考虑到内存占用,没有将conv1包含在金字塔中。

 

自底向下和横向连接:

自上而下的路径(the top-down pathway )是如何去结合低层高分辨率的特征呢?方法就是,把更抽象,语义更强的高层特征图进行上取样,然后把该特征横向连接(lateral connections )至前一层特征,因此高层特征得到加强。值得注意的是,横向连接的两层特征在空间尺寸上要相同。这样做应该主要是为了利用底层的定位细节信息。

The bottom-up feature map is of lower-level semantics, but its activations are more accurately localized as it was subsampled fewer times

Figure 3显示连接细节。把高层特征做2倍上采样(最邻近上采样法),然后将其和对应的前一层特征结合(前一层要经过1 * 1的卷积核才能用,目的是改变channels应该是要和后一层的channels相同),结合方式就是做像素间的加法。重复迭代该过程,直至生成最精细的特征图。迭代开始阶段,作者在C5层后面加了一个1 * 1的卷积核来产生最粗略的特征图,最后,作者用3 * 3的卷积核去处理已经融合的特征图(为了消除上采样的混叠效应),以生成最后需要的特征图。{C2, C3, C4, C5}层对应的融合特征层为{P2, P3, P4, P5},对应的层空间尺寸是相通的。

由于金字塔的所有层次都使用共享的分类器/回归器,如同在传统的特征图像金字塔中一样,我们在所有的特征图中固定特征维度(通道数,记为d)。 本文设定d = 256,因此所有额外的卷积层都有256个通道的输出。 在这些额外的层面上没有非线性,我们在实验中发现它们有微小的影响。

简单是我们设计的核心,我们发现我们的模型对于许多设计选择是强大的。 我们已经尝试了更复杂的块(例如,使用多层残余块[16]作为连接),并且稍微观察到了更好的结果。 设计更好的连接模块并不是本文的重点,所以我们选择上述的简单设计。

4 实际应用

本文方法在理论上在CNN中是通用的,作者将其首先应用到了RPNFast R-CNN,应用中尽量做较小幅度的修改。

4.1 特征金字塔RPN

RPN [29]是一个滑动窗口类不可知的对象检测器。 在原始的RPN设计中,在密集的3×3滑动窗口上评估一个小的子网络,在单一的卷积特征图的顶部,执行目标/非目标二进制分类和边界框回归。 这是通过一个3×3卷积层,然后是两个同胞1×1卷积来实现的,这个卷积用于分类和回归,我们称之为网络头部。 对象/非对象标准和边界框回归目标是相对于一组称为anchors的参考框定义的[29]anchors具有多个预定义的比例尺和纵横比,以覆盖不同形状的物体。

 

原来的RPN网络是以主网络的某个卷积层输出的feature map作为输入,简单讲就是只用这一个尺度的feature map。但是现在要将FPN嵌在RPN网络中,生成不同尺度特征并融合作为RPN网络的输入。在每一个scale层,都定义了不同大小的anchor,对于P2P3P4P5P6这些层,定义anchor的大小为32^2,64^2,128^2,256^2512^2,另外每个scale层都有3个长宽对比度:1:21:12:1。所以整个特征金字塔有15anchor

 

正负样本的界定和Faster RCNN差不多:如果某个anchor和一个给定的ground truth有最高的IOU或者和任意一个Ground truthIOU都大于0.7,则是正样本。如果一个anchor和任意一个ground truthIOU都小于0.3,则为负样本。

 

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

其中很重要的是ROI Pooling层,需要对不同层级的金字塔制定不同尺度的ROI

此部分的理解不太肯定,请各位辩证看待。这里要把视角转换一下,想象成有一种图片金字塔在起作用。我们知道,ROI Pooling层使用region proposal的结果和中间的某一特征图作为输入,得到的结果经过分解后分别用于分类结果和边框回归。

然后作者想的是,不同尺度的ROI,使用不同特征层作为ROI pooling层的输入,大尺度ROI就用后面一些的金字塔层,比如P5;小尺度ROI就用前面一点的特征层,比如P4。那怎么判断ROI改用那个层的输出呢?这里作者定义了一个系数Pk,其定义为: 

 

K0是基准值,设置为5,代表P5层的输出(原图大小就用P5层),wh表示ROI区域的的长宽,假设ROI大小为56*56,即k = 5 - log20.25=3,即意味着该ROI应该使用P3的特征层。

 

 

Fast R-CNN [11]是一个基于区域的对象检测器,利用感兴趣区域(RoIpooling来提取特征。Fast R-CNN通常在单尺度特征图上执行。 要将其与FPN一起使用,我们需要将不同比例的RoI分配给金字塔级别。

Fast R-CNN [11]是一个基于区域的物体检测器,其中感兴趣区域(RoI)我们将特征金字塔看作是从图像金字塔生成的。 因此,在图像金字塔上运行时,我们可以调整区域检测器的分配策略[15,11]。 在形式上,我们分配宽度w和高度h(在输入图像到网络)的RoI到我们的特征金字塔的水平Pk,通过使用合并来提取特征。 fast R-CNN通常在单尺度特征图上执行。 要将其与FPN一起使用,我们需要将不同比例的RoI分配给金字塔级别。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值