个人博客:http://www.chenjianqu.com/

原文链接:http://www.chenjianqu.com/show-110.html

论文:Tsung-Yi Lin, Piotr Dollar, Ross Girshick,Kaiming He, Bharath Hariharan, and Serge Belongie. Facebook AI Research (FAIR),Cornell University and Cornell Tech. Feature Pyramid Networks for Object Detection

论文摘要

特征金字塔(Feature pyramids)是多尺度目标检测系统的基本部件,但是最近几年提出的深度学习目标检测系统避免了金字塔表示,部分原因是需要大量计算和内存。在这篇论文中,我们利用深度卷积网络内在的多尺度金字塔结构,构造特征金字塔,只需要少量的额外计算。设计了具有横向连接的自定向下架构,用于在所有尺度上构建高层次语义特征图。我们把这个架构称之为Feature Pyramid Network(FPN),它作为一个特征抽取器在多个应用中展示了巨大的提升。将FPN应用在基础的Faster R-CNN系统中,我们的方法在COCO detection benchmark上获得了SOTA单模型结果。此外,我们可以模型可以在单个GPU上达到6 FPS的运行速度,因此这是一个可实际应用和精确的多尺度目标检测的解决方案。我们将开源我们的系统。

特征金字塔

Figure 1.是特征金字塔的四种利用形式:

在目标检测领域,图像中目标的大小不确定,需要引入多尺度来解决这个问题。最基础的解决方案是图像金字塔,即通过原始图片的上采样和下采样构建图片金字塔,然后对金字塔的每层抽取特征,完成相应的任务,如Figure 1.(a)所示。该方法在手动提取特征时代用的很多,比如DPM。到了深度学习时代,卷积神经网络能自动提取特征,从而对目标尺度更加鲁棒,因此通常使用特征金字塔的其中一层进行识别,如Figure 1.(b),最经典的例子是Fast R-CNN和Faster R-CNN,使用RoIPool从RoI区域提取固定长度的向量。图像金字塔毫无疑问效果很好,因为图像的各个尺度都提取特征,但是其训练和测试所需要的计算资源过多,无法实际应用,因此通常只在测试的时候应用。

然而并不只有图像金字塔才能构建多尺度特征表示,卷积神经网络计算得到的各个特征图组合在一起也是一个多尺度特征金字塔,如Figure 1.(c)。特征图的分辨率从大到小变化,但是不同特征图的语义层次不同。分辨率高的特征图的表示的低层次的特征,这不利于目标识别。SSD是最早尝试使用卷积神经网络的特征金字塔的模型,SSD直接网络的高层(比如VGG的conv4_3)开始构建金字塔,然后添加几个新的层。这样的话低层级中的高分辨率的特征图不被使用,然后这些层对检测小目标很重要(这就是SSD小目标检测性能不行的原因)。

本文的目标是利用卷积神经网络的特征图金字塔,创建一个在所有尺度拥有高层次语义的特征金字塔。本文将,高分辨率但是语义特征层次低的特征图,和,低分辨率的但是语义特征层次高的特征图,通过一个自顶向下(top-down)和横向连接(lateral connections)的方式,联合在一起。如Figure 1.(d)所示。把该网络称之为特征金字塔网络(Feature Pyramid Network,FPN)。特征金字塔上的各层都拥有丰富的语义,并且只有单个输入图片构建,这意味着不会像图像金字塔那样消耗资源。

最近的一些工作也采用的自顶向下和横向连接的架构,他们的目标是产生一个具有高分辨率和高层语义信息的特征图,然后用于预测,如Figure 2.(Top)。与之相反,本文设计的金字塔对每层都进行预测,如Figure 2.(Buttom)

基于FPN和基础Faster R-CNN的模型在COCO detection benchmark上获得了单模型的SOTA结果。

FPN的构成

FPN以单尺度图片作为输入,以全卷积的方式在金字塔的多个层级上输出特征图。这个方法基于backbone卷积架构,比如ResNet、AlexNet、VGG16,本论文的使用ResNet。FPN由三部分组成:自底向上通路自顶向下通路横向连接

自底向上通路(Buttom-up pathway)

自底向上通路是backbone卷积神经网络的前向计算结果,相邻层级之间的尺度系数为2。在backbone卷积神经网络中,相邻的相同分辨率的特征图组成一个stage。FPN以每个stage为一个特征层级,每个stage的最后输出的特征图创建特征金字塔,这是因为越深的层有越高级的语义信息。

具体的说,对于ResNet使用每个阶段的最后一个残差块的输出特征图。定义conv2,conv3,conv4,conv5输出特征图为{C2,C3,C4,C5},每个特征图相对于输入图片的stride为{4,8,16,32}。这里不包含conv1,因为它占用的内存过大。

自顶向下通路(Top-down pathway)和横向连接(lateral connections)

特征金字塔层级越高,分辨率越低,但是语义信息更加高级。自顶向下通路通过对金字塔高层进行上采样,得到分辨率高同时语义信息更抽象的信息。这些特征通过与自底向上路径进行横向连接得到增强。每个横向连接融合自顶向下和自底向上的特征图。自底向上特征图包含的语义信息是低层次的,但是它的激活值更有利于精确定位,因为它被下采样很少的次数。

Figure 3.展示了自顶向下特征图的一个构建块。

因为来自自顶向下通路的特征图的分辨率是来自自底向上通路特征图的一半,因此需要两倍上采样(采用最近邻插值)。而且该特征图与对应的自底向上通路的特征图的通道数量不同,因此需要将来自自底向上的特征图进行1x1卷积以匹配通道数量。然后将上采样后的自顶向下特征图与1x1卷积后的自底向上特征图逐像素相加。该这种相加过程从上到下迭代进行直到产生最精细的特征图。迭代的起始点是将C5卷积层经过1x1卷积得到最粗糙分辨率的特征图。最后,对每个融合后的特征图进行3x3卷积得到最终的特征图,这样可以减少上采样的混叠效果(aliasing effect)。最终得到特征金字塔{P2,P3,P4,P5}。如下图所示:

特征金字塔各个层共享后面的分类器和回归器,因此需要统一各层特征图的通道数,记作d。这里设置d=256。最终特征金字塔的各特征图的输出不加入非线性激活,因为作者认为这些层的影响很小。简单性的FPN设计的主旨,这个模型对很多设计选择都是鲁棒的。

FPN是在深度卷积神经网络中构建特征金字塔的一个通用的解决方案。

FPN + Faster R-CNN

RPN

RPN是Faster R-CNN论文提出的候选框生成的网络:

其基于Caffe实现的网络结构:

在单个特征图的上应用3x3卷积,对每个位置抽取特征,然后对每个位置进行回归和分类。每个位置预定义3个尺度、3个长宽比的anchor。回归器使用1x1卷积回归每个位置定义9个Anchor。同时分类器使用1x1卷积+Softmax对每个Anchor判定是否是候选框。

FPN+RPN

这里把RPN中滑动窗口用到的3x3卷积和两个1x1卷积分枝称为network head。把 应用RPN的单尺度特征图 替换为 拥有5层特征图的FPN ,同时将network head应用到特征金字塔的所有层。由于network head在多尺度特征图上是密集滑动的,因此不需要对每个位置定义多尺度Anchor。而是金字塔的每层只使用一种尺度的Anchor。

具体来说,在{P2,P3,P4,P5,P6}层上定义的Anchor的面积为{32^2,64^2,128^2,256^2,512^2}像素。每个位置定义3种长宽比{1:2,1:1,2:1}的Anchor。因此总共定义5x1x3=15个Anchor。这里的P6层是专门为RPN网络设计的,由P5下采样得到,用来处理512^2大小候选框的。

跟原始的RPN差不多,当某个Anchor与GT box的IOU最高或高于0.7时判定为Positive lable,当与所有的GT box的IOU低于0.3时判定为Negative label。

Fast R-CNN

Fast R-CNN的架构如下:

原始图片经过卷积神经网络得到特征图,经过RoiPooling得到各个候选框的特征向量,然后特征向量送入分类器和回归器得到最终结果。

Faster R-CNN

RPN和Fast R-CNN结合得到的Faster R-CNN的整体网络如下图:

FPN + Faster R-CNN

在金字塔的不同层分配不同尺度的RoI池化。将特征金字塔看作由图像金字塔得来的,因此可以参照其分配策略。以224x224的输入大小为例,宽高为w,h的ROI被分配到金字塔的第k层,k的计算如下:

K0对应wxh=224^2的ROI应该被分配到的层级。在基于ResNet的Faster R-CNN中,设置k0为4。

接着将预测器头部(也就是分类器和回归器)应用到所有层的RoI池化层输出,在各层共享参数。在Faster R-CNN中,ResNet的Conv4用来提取RoI特征,经过Ros Pooling后映射为14x14大小。经过RoI Pooling后的特征再进入conv5层,进而得到最终的分类和边框回归结果。但是在FPN中,conv5已经被用作特征提取器得到P5层,因此这里单独设计两个1024维的全连接层作为检测网络的头部。该网络头部随机初始化,比原来的conv5更加轻量级。

实验

总结

本文提出了一种简单、有效的建立特征金字塔的方法。它的使用RPN方法和Fast/Faster R-CNN都有极大的性能提升。另外,它的训练和测试时间和普通的Faster R-CNN差不多,因此可以作为图像金字塔的一种良好的替代。

最详细的FPN论文笔记相关推荐

  1. 最详细的SSD论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-90.html 文:Wei Liu, Dragomir Angu ...

  2. 最详细的YOLOv3论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-117.html 论文:YOLOv3: An Increment ...

  3. 最详细的U-net论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-84.html 论文:Olaf Ronneberger, Phi ...

  4. 最详细的YOLOv2论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-116.html 论文:YOLO9000:Better, Fas ...

  5. 最详细的FCN论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-81.html 文:Jonathan Long,Evan She ...

  6. 最详细的YOLO论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-77.html 论文:Joseph Redmon, Santos ...

  7. 最详细的R-CNN论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-69.html RBG大佬的论文<Rich feature ...

  8. 论文笔记 SiamMask : Fast Online Object Tracking and Segmentation: A Unifying Approach

    论文连接:[1812.05050] Fast Online Object Tracking and Segmentation: A Unifying Approach 论文连接:[1812.05050 ...

  9. 论文笔记:HKMF-T: Recover From Blackouts in TaggedTime Series With Hankel Matrix Factorization

    论文笔记:Hankel Matrix Factorization for Tagged Time Series to Recover Missing Values during Blackouts_U ...

最新文章

  1. Java项目:在线电影售票系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)
  2. Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!]
  3. Exchange 2016 (登陸賬號匯出電子郵件地址)
  4. 账号体系——账号合并的历史数据处理
  5. instance的用法 php,php面向对象之instanceof关键字的用法
  6. Atmosphere 1.0:支持Java/JavaScript的异步通信框架
  7. Apache不记录制定文件类型日志
  8. 如何在Spring Boot App中集成H2数据库
  9. matlab拟合例子,MATLAB数据拟合例子
  10. layui date插件设置不能跨月查询
  11. jcabanillas/yii2-inspinia-asset composert 安装失败
  12. python爬取wifi密码完整代码_WIFIpass – Python获取本机保存的所有WIFI密码(附源代码)...
  13. Python压缩、减压7z文件
  14. 使用 nosqlBooster for mongoDB 连接 Mongodb
  15. 基于LSTM神经网络的负荷预测(Python代码实现)
  16. 【JAVA语言学习】Java面向对象Ⅲ
  17. cordova 微信支付
  18. 东南大学提出条件自监督小样本学习方法,显著提升小样本分类准确率
  19. Python-修改密码功能
  20. Kafka(三)、Kafka架构

热门文章

  1. java mongodb开发_Java Tutorial:Java操作MongoDB入门
  2. 如何解决网页中console的显示内容出现undefined和null_如何优雅地处理前端异常?...
  3. mysql 从备份_MySQL主从备份配置
  4. 4-Ubuntu—终端下重启与关机
  5. python-9:nonlocal,指定上一级变量
  6. eclipse clean和build作用
  7. 如何利用数据分析找到女朋友?
  8. UESTC 288 青蛙的约会 扩展GCD
  9. Java 位运算和逻辑运算的区别
  10. C# 使用Bitmap类进行图片裁剪