Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)

Title:FPN:Feature Pyramid Networks for Object Detection
Note data:2019/05/18
Abstract:利用特征金字塔对不同层次的特征进行尺度变化后,再进行信息融合,从而可以提取到比较低层的信息,也就是相对顶层特征来说更加详细的信息。在R-CNN的基础上FPN达到了最优的结果,在COCO2016中一举夺魁,并且值得注意的是在一张GPU上可以达到6FPS!

Code:pytorch


目录

FPN论文解读

1 Abstract

2 Introduction

3 Related work

3.1 手工提取与早期神经网络

3.2 卷积神经网络目标检测

3.3 使用多层的方法

4 Architecture

4.1 自上而下的路径设计

4.2 自上而下与横向连接

5  Applications

5.1 Faster R-CNN+Resnet-101

5.2 RPN中的特征金字塔网络

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

6 Experiment

6.1 消融实验

6.2 目标检测 F/Faster R-CNN

6.3 算法的比较

7 Conclution 


FPN论文解读

1 Abstract

论文提出一种基于R-CNN的Object Detectino模型FPN

网络结构:在R-CNN基础上引入特征金字塔

创新:以特征金字塔将不同层次的语义信息进行融合,提取到比较低层次信息。

动机:使得目标检测中小物体的信息也能够比较完整地反映

在目标检测中特征金字塔作为多尺度目标检测的一部分,但由于这种方法太浪费算力和显存,很多研究人员避开这种方法。这篇论文中利用卷积神经网络固有的多尺度·多层级的金字塔结构去构建特征金字塔,使用一种自上而下的侧边连接。一边是图金字塔一边是特征金字塔,在所有尺度构建了高级语义特征图,这种结构就就叫做FPN。在R-CNN的基础上FPN达到了最优的结果,在COCO2016中一举夺魁,并且值得注意的是在一张GPU上可以达到6FPS!  

                                   Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)


2 Introduction

多尺度目标检测是计算机视觉一个基础且重要的课题,基于图像金字塔的特征金字塔是较为传统的思路,具有一定意义上的尺度不变性,此属性使模型能够通过在两个位置和金字塔等级上扫描模型来检测大范围尺度的对象。

Featurized image pyramids 主要在人工特征中使用,比如DPM就要用到它产生密集尺度的样本以提升检测水平。深度学习的CNN特征成为主流,CNN特征的鲁棒性很好,刻画能力强。即使如此,仍需要金字塔结构去进一步提升准确性,尤其在多尺度检测上。金字塔结构的优势是其产生的特征每一层都是语义信息加强的,包括高分辨率的低层。

对图像金字塔每一层都处理有很大的局限性,首先运算耗时会增加4倍,训练深度网络的时候太吃显存,几乎没法用,即使用了,也只能在测试的时候。因为这些原因,Fast/Faster R-CNN 都没使用featurized image pyramids 。

当然,图像金字塔并不是多尺度特征表征的唯一方式,CNN固有的多级特征图(feature map hierarchy),且不同层的特征图尺度就不同,形似金字塔结构(Figure1[b])。结构上虽不错,但是前后层之间由于不同深度(depths)影响,语义信息差距太大,主要是高分辨率的低层特征很难有代表性的检测能力。

SSD(Single Shot Detector)为了避免利用太低层的特征,SSD从偏后的conv4_3开始,又往后加了几层,分别抽取每层特征,进行综合利用(Figure1[c])。但是SSD对于高分辨率的底层特征没有再利用,而这些层对于检测小目标很重要。这篇论文的特征金字塔网络(Figure1[d])做法很简单,如下图所示。把低分辨率、高语义信息的高层特征和高分辨率、低语义信息的低层特征进行自上而下的侧边连接,使得所有尺度下的特征都有丰富的语义信息。这种结构是在CNN网络中完成的,和前文提到的基于图片的金字塔结构不同,而且完全可以替代它。  

本文特征金字塔网络自上而下的结构,和某些论文有一定的相似之处,但二者目的不尽不同。作者做了检测和分割实验,COCO数据集的结果超过了现有水平,具体结果参见论文中实验部分。值得说的是,本文方法在训练的时间和显存使用上都是可接受的,检测的时间也没增加。


3 Related work

3.1 手工提取与早期神经网络

SIFT特征最初是在尺度空间极值下提取的,用于特征点匹配。 HOG特征以及后来的SIFT特征也在整个图像金字塔上密集计算。 这些HOG和SIFT金字塔已经用于图像分类,物体检测,人体姿态估计等众多工作中。通过首先计算稀疏采样(按比例)金字塔然后插入缺失的级别来演示快速金字塔计算。 在HOG和SIFT之前,使用ConvNets进行面部检测的早期工作计算了图像金字塔上的浅层网络,以检测跨尺度的面部。

3.2 卷积神经网络目标检测

随着卷积网络的发展,像Over-feat,R-CNN等目标检测的方法都取得不错的准确率。OverFeat通过在图像金字塔上应用ConvNet作为滑动窗口检测器,采用类似于早期神经网络面部检测器的策略。 R-CNN采用了基于区域提案的方法,其中每个提案在分类之前进行了规模标准化
ConvNet。 SPPnet 证明,这种基于区域的探测器可以更有效地应用于在单个图像尺度上提取的特征图。 最近和更准确的检测方法,如Fast R-CNN 和Faster R-CNN 提倡使用从单一尺度计算的特征,因为它提供了准确性和速度之间的良好折中。 然而多尺度检测仍然表现更好,特别是对于小物体。

3.3 使用多层的方法

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


4 Architecture

论文的目标是利用CNN的金字塔层次结构特性(具有从低到高级的语义),构建具有高级语义的特征金字塔。得到的特征金字塔网络(FPN)是通用的,但在论文中,作者先在RPN网络和Fast R-CNN中使用这一成果,也将其用在instance segmentation proposals 中。该方法将任意一张图片作为输入,以全卷积的方式在多个层级输出成比例大小的特征图,这是独立于CNN骨干架构(本文为ResNets)的。具体结构如图Figure 2。 

                               Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)

4.1 自上而下的路径设计

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

4.2 自上而下与横向连接

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

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

                                   Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)

金字塔结构中所有层级共享分类层(回归层),就像featurized image pyramid 中所做的那样。作者固定所有特征图中的维度(通道数,表示为d)。作者在本文中设置d = 256,因此所有额外的卷积层(比如P2)具有256通道输出。


5  Applications

以下这部分内容来源于网络

5.1 Faster R-CNN+Resnet-101

要想明白FPN如何应用在RPN和Fast R-CNN(合起来就是Faster R-CNN),首先要明白Faster R-CNN+Resnet-101的结构,这部分在是论文中没有的。

直接理解就是把Faster-RCNN中原有的VGG网络换成ResNet-101,ResNet-101结构如下图: 
Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)
Faster-RCNN利用conv1到conv4-x的91层为共享卷积层,然后从conv4-x的输出开始分叉,一路经过RPN网络进行区域选择,另一路直接连一个ROI Pooling层,把RPN的结果输入ROI Pooling层,映射成7 * 7的特征。然后所有输出经过conv5-x的计算,这里conv5-x起到原来全连接层(fc)的作用。最后再经分类器和边框回归得到最终结果。整体框架用下图表示:                                                                                             
Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)

5.2 RPN中的特征金字塔网络

RPN是Faster R-CNN中用于区域选择的子网络,具体原理就不详细解释了,可阅读论文和参考博客:faster-rcnn 之 RPN网络的结构解析 。

RPN是在一个13 * 13 * 256的特征图上应用9种不同尺度的anchor,本篇论文另辟蹊径,把特征图弄成多尺度的,然后固定每种特征图对应的anchor尺寸,很有意思。也就是说,作者在每一个金字塔层级应用了单尺度的anchor,{P2, P3, P4, P5, P6}分别对应的anchor尺度为{32^2, 64^2, 128^2, 256^2, 512^2 },当然目标不可能都是正方形,本文仍然使用三种比例{1:2, 1:1, 2:1},所以金字塔结构*有15种anchors。这里,博主尝试画一下修改后的RPN结构: 
Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)

训练中,把重叠率(IoU)高于0.7的作为正样本,低于0.3的作为负样本。特征金字塔网络之间有参数共享,其优秀表现使得所有层级具有相似程度的语义信息。具体性能在实验中评估。

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

Fast R-CNN的具体原理也不详解了,参考博客:Fast R-CNN论文详解 ,其中很重要的是ROI Pooling层,需要对不同层级的金字塔制定不同尺度的ROI。

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

然后作者想的是,不同尺度的ROI,使用不同特征层作为ROI pooling层的输入,大尺度ROI就用后面一些的金字塔层,比如P5;小尺度ROI就用前面一点的特征层,比如P4。那怎么判断ROI改用那个层的输出呢?这里作者定义了一个系数Pk,其定义为: 
Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六) 
224是ImageNet的标准输入,k0是基准值,设置为5,代表P5层的输出(原图大小就用P5层),w和h是ROI区域的长和宽,假设ROI是112 * 112的大小,那么k = k0-1 = 5-1 = 4,意味着该ROI应该使用P4的特征层。k值应该会做取整处理,防止结果不是整数。

然后,因为作者把conv5也作为了金字塔结构的一部分,那么从前全连接层的那个作用怎么办呢?这里采取的方法是增加两个1024维的轻量级全连接层,然后再跟上分类器和边框回归。作者认为这样还能使速度更快一些。

最后,博主根据自己的理解画了一张草图,猜想整个网络经FPN修改后的样子,也就是Faster R-CNN with FPN。 
Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)


6 Experiment

6.1 消融实验

实验中使用的网络架构都是在ImageNet1k上经过预训练的,采用的模型主要为ResNet-50和ResNet-101,

项目                                                    属性
数据集                                                   COCO
预训练模型                                         ResNet-50/ResNet-101
评价标准                                                      AR
优化器                                                     SGD
权重衰减                             weight decay 0.0001/amomentumof0.9
学习率                                      0.02(30k)/0.002(10k)
计算资源                                                     8 GPUs

与基线比较

为了与原始的RPNs进行比较设计了实验一,如表格一所示,我们运用两个基线(表1(a,b))使用单一尺度图C4(或C5,两者都使用与我们相同的超参数,包括使用5个比例 {32 ,64 ,128 ,256 ,512 }的锚点。 表1(b)显示没有(a)的优势,表明单个更高级别的特征映射是不够的,因为在较粗糙的分辨率和较强的语义之间存在折衷。
将FPN放置在RPN中可将AR 1k提高到56.3(表1(c)),这比单一规模的RPN基线增加8.0个点(表1(a))。 此外,小物体(AR 1ks)的表现大幅提升12.9点。 我们的金字塔模式大大提高了RPN对象尺度变化的鲁棒性。

Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)

自上而下的重要性

表1(d)可知没有自上而下结果的网络,效果并不理想,我们猜想这是因为在自下而上的金字塔上不同层次之间存在很大的语义差距(图1(b),特别是对于非常深的ResNets。 我们还评估了表1(d)的变体而没有共享磁头的参数,但观察到类似的降级性能。 这个问题不能简单地通过特定级别的头来补救。

横向连接的重要性

表1(e)显示了自上而下特征金字塔的消融结果没有1×1横向连接。 这个自上而下的金字塔具有强大的语义特征和精细的分辨率。 但我们认为这些特征的位置并不精确,因为这些特征图已经过多次采样和上采样。 更精确的特征位置可以直接从底部向上图像的横向连接传递到自上而下的地图。 结果,FPN的AR 1k得分比表1(e)高10分。

6.2 目标检测 F/Faster R-CNN

项目                                                        属性
评价标准                                                         AP
优化器                                                        SGD
权重衰减                                 weight decay  0.0001 / a momentum of 0.9
学习率                                          0.02(60k)/0.002(next 20k)
训练时长                                                         10H

 Fast R-CNN (on fixed proposals)

为了更好地研究FPN,设计实验二对Fast R-CNN进行消融实验。我们选择冻结由RPN在FPN上计算的提议(表1(c)),因为它对于要由检测器识别的小对象具有良好的性能。为简单起见,除非指定,否则我们不会在快速R-CNN和RPN之间共享功能。作为基于ResNet的快速R-CNN基线,我们采用输出大小为14×14的RoI pooling并将所有conv5层作为头部的隐藏层附加。这使得表2(a)中的AP为31.9。2(b)是利用具有2个隐藏 fc 层的MLP头的基线,类似于我们的架构中的头部。它获得了28.8的AP,在表2(a)中,2-fc头部没有给我们任何正交优势。表2(c)显示了我们的FPN在快速R-CNN中的结果。与表2(a)中的基线相比,我们的方法将AP提高2.0点,小物体AP提高2.1点。与同样采用2fc头的基线(表2(b))相比,我们的方法将AP提高了5.1点。 5这些比较表明,我们的特征金字塔优于基于区域的物体探测器的单一尺度特征。表2(d)和(e)表明,移除自上而下的连接或移除横向连接会导致较差的结果,类似于我们的已在上述小节中观察到RPN。值得注意的是,移除自上而下的连接(表2(d))会显着降低精度,这表明Fast R-CNN在高分辨率地图中使用低级特征。在表2(f)中,我们在P 2的单个最精细的特征图上采用快速R-CNN。其结果(33.4 AP)略有下降比使用所有金字塔等级更差(33.9 AP,表2(c))。我们认为这是因为RoI pooling是一种类似翘曲的操作,对该区域的尺度不太敏感。尽管该变体具有良好的准确性,但它基于{P k}的RPN提议,因此已经从金字塔表示中受益。

 

Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)

Faster R-CNN

实验三与实验二实验内容方法类似,这里不做过多介绍!实验结果如表三所示:

Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)

6.3 算法的比较

表四主要与在COCO竞赛中其他模型的比较;表五主要对比了RenNet-50与RenNet-101实验比较,结果如下:

Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)

                                 Object Detection---FPN:Feature Pyramid Networks for Object Detection (论文解读六)

7 Conclution

该论文主要研究了特征金字塔结构对小目标检测的影响,通过设计三个消融实验来证明了FPN的作用,其可取之处在于将每一层的语义信息都保留下来,使得网络的语义信息更加完整,这样对小目标检测更加有利!