FPN算法详解

算法背景

论文全称:FeaturePyramidNetworksforObjectDetection
论文链接:https://arxiv.org/abs/1612.03144
论文时间:2017.5.19

简介

特征金字塔是目标检测中在不同尺寸下的识别系统的基础元素,但是目前的深度学习目标检测器避免金字塔表示,计算与储存密集,在文利用固有的多尺寸、金字塔层次的深层卷积网络构造带有边际额外成本的特征金字塔。开发了一种具有横向连接的自顶向下架构,用于在所有尺度上构建高级语义特征图。这种结构被称为特征金字塔网络(FPN)。在多个应用中,这个神经网络作为一个通用特征提取器有显著精度改进。在基础Faster RCNN算法中使用FPN算法,在COCO检测挑战中有了最新的结果,超过了之前的算法,在COCO2016挑战中赢得冠军,在一个GPU上运行速度为6FPS。

低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。另外虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测,而本文不一样的地方在于预测是在不同特征层独立进行的。

特征提取算法对比

在这里插入图片描述

特征图片金字塔

如图a,在不同尺度下识别目标物体(Recognization)是计算机视觉中的一个基础挑战,基于图像金字塔构建的特征金字塔(简称我们称这些为特征图像金字塔)构成标准解决方案的基础,这些金字塔具有尺寸不变性,一个物体尺寸的改变在金字塔中转移层级时被抵消,直观地,这种特性确保一个模型能通过观察模型的位置与金字塔层级在一个大范围的尺寸内检测物体。

单一特征映射

如图b,特征图片金字塔在手工提取特征时期得到了广泛的使用,在例如DPM中非常重要。但是卷积神经网络由于其具有更高层的语义信息并且更鲁棒而替代了手工提取特征。但是目前优秀的目标检测算法仍然使用特征图片金字塔进行多尺度测试,对图像金字塔的每个级别进行特征化的主要优点是它产生了多尺度特征表示,其中所有层级在语义上都很强,包括高分辨率级别。

但是在图片金字塔的每一级提取特征也有很大的限制,推测时间增大,对于真实应用,这个方法不实际。基于图片金字塔的端到端神经网络在内存方面是不可行的。Fast and Faster R-CNN没有使用特征图片金字塔。

金字塔特征分层

如图c,图片金字塔不是计算多尺度特征代表的唯一方法,深层深度卷积神经网络逐层计算特征层次结构,并且通过子采样层,特征层次结构具有固有的多尺度、金字塔形状。 这种网内特征层次结构产生不同空间分辨率的特征图,但引入了由不同深度引起的大的语义间隙。 高分辨率图像具有低级别的特征,会影响他们对物体识别的表征能力。
在这里插入图片描述
单次检测器(SSD)[22]是使用ConvNet的金字塔特征层次结构的首次尝试之一,采用这种多尺度特征融合的方式。 理想情况下,SSD式金字塔将重复使用前向传递中计算的不同层的多尺度特征图,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。 但是为了避免使用低级特征,SSD首先重新使用已经计算好的层,然后在网络中从高处开始构建金字塔(例如,VGG网络的conv4 3 [36]),然后再添加几个新层。 因此,它错过了重用足够低层的特征。而这些对于检测小物体很重要
采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为SSD算法中没有用到足够低层的特征(在SSD中,例如,VGG网络的conv4 3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。

特征金字塔

如图d,本文的目标是自然地利用ConvNet特征层次结构的金字塔形状,同时创建一个在所有尺度上都具有强大语义的特征金字塔。 为了实现这一目标,我们依靠一种架构,该架构将低分辨率,语义强大的特征与高分辨率,语义上较弱的特征相结合,通过自上而下的路径和横向连接。 结果是一个特征金字塔,在所有级别都具有丰富的语义,并且可以从单个输入图像比例快速构建。本文展示了如何创建网络内特征金字塔,这些特征金字塔可以用于在没有牺牲代表性能力,速度或记忆的情况下使用图像金字塔。
在这里插入图片描述
采用自上而下和跳过连接的类似架构在其他算法中也有应有。 他们的目标是产生用于预测的具有精确分辨率的单一高级特征映射(图2上图)。 相反,我们的方法是利用特征金字塔构架,其中独立地在每一个水平上(图2底部)预测(例如,目标检测)。 我们的模型回应了一个特征图像金字塔,这些金字塔在这些作品中尚未被探索过。

扫描二维码关注公众号,回复: 4843643 查看本文章

总结

  • 特征图片金字塔:产生了多尺度特征表示,但是花费大量的时间,不适合实际应用
  • 单一特征映射:只有高层的特征信息,会导致小尺寸的目标物被忽视,从而会造成检测小物体的性能急剧下降。
  • 金字塔特征分层:让不同深度的特征图去学习同样的语义信息,同样会忽略掉底层网络中的细节特征。
  • 特征金字塔:FPN主要解决的是物体检测中的多尺度问题,通过简单的网络连接改变,在基本不增加原有模型计算量的情况下,大幅度提升了小物体检测的性能

算法详解

本文的目标是利用ConvNet的金字塔特征层次结构,该层次结构具有从低到高的语义,并构建一个具有高级语义的特征金字塔。
在这里插入图片描述
整个结构有一个自底向上的下采样,一个自顶向下的上采样以及一个横向连接结构构成。

自底向上的下采样

是一个普通卷积神经网络前向传播计算过程,它计算一个由多个尺度的特征图组成的特征层次结构,其缩放步长为2。 通常有许多层产生相同大小的输出图,我们说这些层是在同一个网络阶段。对于我们的特征金字塔,我们为每个阶段定义一个金字塔等级。我们选择每个阶段的最后一层的输出作为我们的参考特征映射集。

具体来说,对于ResNets,我们使用每个阶段的最后一个残余块输出的特征激活。 对于conv2,conv3,conv4和conv5输出,我们将这些最后残余块的输出表示为{C2,C3,C4,C5},并注意它们相对于{4,8,16,32}像素具有大步。 输入图像。 由于内存占用大,我们不会将conv1包含在金字塔中。

在这里插入图片描述

自顶向下的上采样与横向连接

自上而下的路径通过较高的金字塔等级的特征映射,从较高的分辨率中提取较高分辨率的特征。 然后通过自下而上的通路旁边连接增强这些功能。

每个横向连接合并来自自下而上路径和自上而下路径的相同空间大小的特征图。 自底向上的特征映射具有较低级别的语义,但是它的激活更准确地进行了本地化,因为它被子采样次数较少。

自顶向下的上采样使用较粗糙分辨率的特征图,我们将空间分辨率上采样2倍(为简单起见,使用最近邻居上采样)。 然后通过逐元素加法将上采样的映射与对应的自下而上的映射(其经历1×1卷积层以减少信道维度)合并。 迭代此过程,直到生成嵌套分辨率图。 为了开始迭代,我们简单地在C5上附加1×1卷积层以产生最粗糙的分辨率图。 最后,我们附加一个3×3卷积的默认图来生成最终的特征图,这是为了减少上采样的混叠效应。 该最终特征映射集称为{P2,P3,P4,P5},对应于分别具有相同空间大小的{C2,C3,C4,C5}。

因为金字塔的所有级别都使用共享分类器/回归器,所以在所有特征映射中都固定了特征维度(通道数量,表示为d)。 我们在本文中设置d = 256,因此所有额外的卷积层都削减了256通道输出。 在这些额外的层中没有非线性,我们根据经验发现它们具有较小的影响。

算法应用

我们采用RPN中的方法进行边界框建议生成,采用fast R-CNN进行对象检测。 为了证明我们的方法的简单性和有效性,我们对RPN、fast R-CNN的原始系统进行了最小化的修改,使其适应我们的特征金字塔。

RPN

在 RPN 中,区别于原论文直接在最后的 feature map 上设置不同尺度和比例的 anchor,由于头部在所有金字塔等级的所有位置上密集滑动,因此没有必要在每个特征级别上设置多尺度anchor。 本文的尺度信息对应于相应的 feature map(分别设置面积为 32×32,64×64, 128×128, 256×256, 512×512),比例用类似于原来的方式设置 {1:2, 1:1, 2:1} 三种,所以在金字塔上总共有15个anchor。与 RPN 一样,FPN 每层 feature map 加入 33 的卷积及两个相邻的 11 卷积分别做分类和回归的预测。在 RPN 中,实验对比了 FPN 不同层 feature map 卷积参数共享与否,发现共享仍然能达到很好性能,说明特征金字塔使得不同层学到了相同层次的语义特征。

训练标签的设置:

  • 形式上,如果锚具有给定groundtruth框的最高IoU或具有任何地面实况框的IoU超过0.7,
  • 并且如果所有地面实况框的IoU低于0.3,则为负标签分配正标签。

共享参数的良好性能表明我们的金字塔的所有级别都具有相似的语义级别。

Fast R-CNN

Fast R-CNN最常在单尺度特征图上执行。 要将它与我们的FPN一起使用,我们需要将不同比例的RoI分配给金字塔等级。 我们将特征金字塔视为从图像金字塔生成。 因此,我们可以调整基于区域的检测器的分配策略,以便在图像金字塔上运行。 在形式上,我们通过以下方式将宽度为w且高度为h(在图像网络上)的RoI分配到我们的特征金字塔的等级P_k:
在这里插入图片描述

算法结构

在这里插入图片描述

  • 首先,选择一张需要处理的图片,然后对该图片进行预处理操作;
  • 然后,将处理过的图片送入预训练的特征网络中(如ResNet等),即构建所谓的bottom-up网络;
  • 接着,如图5所示,构建对应的top-down网络(即对层4进行上采样操作,先用1x1的卷积对层2进行降维处理,然后将两者相加(对应元素相加),最后进行3x3的卷积操作,最后);
  • 接着,在图中的4、5、6层上面分别进行RPN操作,即一个3x3的卷积后面分两路,分别连接一个1x1的卷积用来进行分类和回归操作;
  • 接着,将上一步获得的候选ROI分别输入到4、5、6层上面分别进行ROI Pool操作(固定为7x7的特征);
  • 最后,在上一步的基础上面连接两个1024层的全连接网络层,然后分两个支路,连接对应的分类层和回归层;

猜你喜欢

转载自blog.csdn.net/woduitaodong2698/article/details/85141329
FPN
今日推荐