目标检测(五)——FPN

简介

在coco与imagenet上取得靠前名次的网络都采用了多尺度的方法,而特征金字塔是识别不同尺度的目标时常用的结构。但是特征金字塔需要较大的计算量和显存,所以一般只在测试时使用。而FPN则利用了CNN的金字塔结构,设计了一种新型的特征金字塔的方式,可以减少额外的对计算量和显存的消耗。使用FPN,Faster RCNN的精度进一步提升(因为提取的特征更为丰富),速度为6fps on a GPU。


原理

特征金字塔

本文的目的就是利用CNN特征层次,建立一个各个尺度特征都包含较强语义的特征金字塔。
目标检测(五)——FPN_第1张图片
介绍了目前的特征金字塔的都有哪些形式:

  • Featurized image pyramid:figure 1(a) 速度慢、消耗大量显存。为了取得较好的精度,可能会有10个降采样层(图像要resize 10次),作者很不认同这种做法,因为这太慢了,消耗显存大。但是毋庸置疑的是最近在coco和imagenet上取得较好成绩的模型都是用了Featurized image pyramid,作者认为这主要是由于Featurized image pyramid生成的多尺度特征,每一层都是semantically strong的。
  • Single feature map: figure 1(b) 与Featurized image pyramid不同,不同层次的包含的语义明显不同,低特征层只包含低级特征,这对目标识别是不利的。所以除了为了速度,也为了精度,包括Faster R-CNN都用这种方法。因为最顶层的特征是semantically strong的。
  • Pyramidal feature hierarchy:figure 1(c),用SSD举例说明,为了减小对计算机能力的开销,SSD重复使用了多尺度特征图,但是也错失了利用底层特征的机会。这对于小目标的探测是非常有用的信息。
  • Feature Pyramid Network:figure 1(d),作者提出的网络, 图中蓝色细线代表feature maps,蓝色粗线代表semantically stronger features。通过使用top-down pathway和lateral connections,把low-resolution,semantically strong的特征和high-resolution,semantically weak的特征相结合,外加横向连接结构,目的是建立一个类似于Featurized image pyramid那种各尺度都是强语义的特征金字塔。这种方法比第一种速度快,占用显存少。

下面说明下细节:
目标检测(五)——FPN_第2张图片

  • Bottom-up pathway: 其实就是正常的resnet,vgg这些。
  • Top-down pathway and lateral connections:
    Top-down pathway 很简单,高层特征上采样,但是与同级别的Bottom-up pathway中的特征层尺寸相同,但是其包含的语义信息更多,使用横向连接(lateral connections)将两者融合。bottom-up pathway中的底层特征虽然包含的语义信息少,但是由于它还未进行很多次降采样,所以包含了更多的定位信息。使用1x1 conv目的是统一两条pathway channel的数量(256),方便融合。然后将同层特征元素相加,最后使用3x3卷积,目的是为了消除上采样造成的混叠效应(aliasing effect)。

FPN For RPN

RPN工作原理:在Faster R-CNN,RPN的输入是使用一个3x3的滑窗在最后一个卷积层的输出上进行滑动,会分成定位和分类两个分支,这可以通过3x3卷积后再接一个1x1卷积实现,作者称这部分为:network head。

为了引入FPN,我们把同样的head设计(3x3 convs and two sibling 1x1 convs)连接到特征金字塔的每一层(每一层共用分类器与线框回归器),由于特征金字塔已经包含了尺度信息,我们不在需要向faster rcnn那样设计三种不同尺寸的anchor,我们只要每一层设计一种尺寸的anchor即可, pixels on {P2,P3,P4,P5,P6}。但是与faster rcnn中相同的是,我们仍使用{1:2,2:1,2:1}三种ratios,所以一共是15中anchors。

与faster rcnn中一样,与gt重叠大于0.7或者是与某个gt重叠率最高的anchor都会被赋予positive label,如果与其他所有的gt的重叠率都小于0.3就会被赋予negtive lable。
之后的流程就与Faster RCNN相同了。

FPN For Faster R-CNN

Fast rcnn中的ROI Pooling层使用region proposal的结果和特征图作为输入。经过特征金字塔,我们得到了许多特征图,作者认为,不同层次的特征图上包含的物体大小也不同,因此,不同尺度的ROI,使用不同特征层作为ROI pooling层的输入。大尺度ROI就用后面一些的金字塔层,比如P5;小尺度ROI就用前面一点的特征层,比如P4。但是如何确定不同的roi对应的不同特征层呢?
作者提出如下的方法

224是ImageNet的标准输入,k0是基准值,设置为5,代表P5层的输出(原图就用P5层),w和h是ROI区域的长和宽,假设ROI是112 * 112的大小,那么k = k0-1 = 5-1 = 4,意味着该ROI应该使用P4的特征层。k值做取整处理。这意味着如果RoI的尺度变小(比如224的1/2),那么它应该被映射到一个精细的分辨率水平。
目标检测(五)——FPN_第3张图片

你可能感兴趣的:(目标检测,目标检测,计算机视觉,深度学习,FPN)