FPN-Feature Pyramid Networks for Object Detection

标签(空格分隔): 深度学习 目标检测


这次学习的论文是FPN,是关于解决多尺度问题的一篇论文。记录下论文笔记,欢迎交流。转载请注明网址:http://www.cnblogs.com/alanma/p/6884121.html

动机
特征金字塔是多尺度目标检测系统的一个基本组成部分。但是,在最近的深度学习目标检测上,考虑到特征金字塔花费的计算和存储代价,都选择避免使用特征金字塔。问题的关键是寻找特征金字塔对多尺度问题带来的准确率和代价的trade-off,这也就是这篇文章的研究目的。

整体思想
因为深度卷积神经网络具有内在的多尺度性质(池化带来的不同size的feature map),网络由浅即深,分辨率越来越粗糙,但是语义信息越来越丰富。相似的思想利用在FCN的skip layer。要识别多尺度的目标,也需要利用不同level的feature map。作者利用了这种内在多尺度性质,设计出FPN。结构如下图:


到这,应该已经了解了FPN基本思想,就是想利用不同level的feature map预测不同尺度的目标。尺寸小的物体因不断的池化会在较深的层消失,所以利用浅层检测小目标,但是浅层不如深层具备丰富的语义特征,所以还需要浅层融合深层的特征。
总结来说,FPN = top-down的融合(skip layer) + 在金字塔各层进行prediction。


这部分比较FPN和其他多尺度方法,说明为什么FPN代价较小

下面是对比图:

图(a)是相当常见的一种多尺度方法,称为featurized image pyramid,这种方法在较早的人工设计特征(DPM)时被广泛使用,在CNN中也有人使用过。就是对input iamge进行multi scale,通过设置不同的缩放比例实现。这种可以解决多尺度,但是相当于训练了多个模型(假设要求输入大小固定),即便允许输入大小不固定,但是也增加了存储不同scale图像的内存空间。

图(b)就是CNN了,cnn相比人工设计特征,能够自己学习到更高级的语义特征,同时CNN对尺度变化鲁棒,因此如图,从单个尺度的输入计算的特征也能用来识别,但是遇到明显的多尺度目标检测时,还是需要金字塔结构来进一步提升准确率。
从现在在imageNet和COCO数据集上领先的的一些方法来看,在测试的时候都用到了featurized image pyramid方法,即结合(a),(b)。 说明了特征化图像金字塔的每一级的好处在于,产生了多尺度的特征表示,每一级的特征都有很强的语义(因为都用cnn生成的特征),包括高分辨率的一级(最大尺度的输入图像)。
但是这种模式有明显的弊端,相比于原来方法,时间增长了4倍,很难在实时应用中使用,同样,也增大了存储代价,这就是为什么只是在测试阶段使用image pyramid。但是如果只在测试阶段使用,那么训练和测试在推断的时候会不一致。所以,最近的一些方法干脆舍弃了image pyramid。

但是image pyramid不是计算多尺度特征表示的唯一方法。deepCNN能够层次化的特征,而且因为池化的作用,会产生金字塔形的特征,具有一种内在的多尺度。但是问题在于,高分辨率的map(浅层)具有low-level的特征,所以浅层的目标识别性能较弱。这也是不同level融合的目的。
如图(c),SSD较早尝试了使用CNN金字塔形的层级特征。理想情况下,SSD风格的金字塔 重利用了前向过程计算出的来自多层的多尺度特征图,因此这种形式是不消耗额外的资源的。但是SSD为了避免使用low-level的特征,放弃了浅层的feature map,而是从conv4_3开始建立金字塔,而且加入了一些新的层。因此SSD放弃了重利用更高分辨率的feature map,但是这些feature map对检测小目标非常重要。这就是SSD与FPN的区别

图(4)是FPN的结构,FPN是为了自然地利用CNN层级特征的金字塔形式,同时生成在所有尺度上都具有强语义信息的特征金字塔。所以FPN的结构设计了top-down结构和横向连接,以此融合具有高分辨率的浅层layer和具有丰富语义信息的深层layer。这样就实现了从单尺度的单张输入图像,快速构建在所有尺度上都具有强语义信息的特征金字塔,同时不产生明显的代价。

FPN与FCN的区别:
FPN在金字塔的所有层都进行prediction。FCN同样进行了融合,但是最后是在单个层进行的prediction。

精度和速度:FPN作为一个通用的特征提取器,可以放入到其他网络中,实验展示了FPN带来的明显提升。FPN+faster r-cnn在coco数据集检测任务中碾压了所有现有的单模型方法。同时FPN+faster r-cnn的检测速度为5fps,因此也是一种可以实用的方法。

代码:作者还没放出...


FPN在RPN和fast rcnn上的使用

  • 任意尺度的输入(全卷积)。输出是多层,成比例的(池化步长)的feature map。主体网络结构可任意,如ResNet
  • Bottom-up
    排除conv1(考虑到内存),产生相同大小feature map尺寸的layer算做一个stage,其实就是以pool层为界。那特征金字塔的层的尺寸步长就是pool步长2。取每个stage的最后一层feature map作为特征金字塔的层,因为越深的层的特征语义信息越好。
  • top-dowm和横向连接
    就是执行融合过程。首先上层上采样2倍(最近邻上采样),浅层进行1x1的卷积保证两层的维度相同,最后进行相加进行融合,得到更具有语义信息的浅层。最后,特征金子塔的每一级都进行3x3的卷积,免除上采样产生的混叠效应。
  • 最后,所有的特征金字塔的层都要确保通道数一致(d =256),因为它们最后在进行预测的时候,要共享最后的分类器(在RPN和fast rcnn中,共享了box的分类器和box的回归器)。
  • RPN:因为特征金字塔的不同层已经代表着不同的尺度,所以在产生anchor的时候,在特定层只考虑不同的形状比,而不考虑不同的scale。然后特征金字塔的所有层共享box分类器和回归器。
  • Fast rcnn: fast rcnn就是一个基于区域的目标检测器。以往它的输入是单尺度的。现在考虑FPN多尺度。因为我们可以将CNN的特征金字塔看成是来自于image pyramid.这个不难理解,因为CNN的每层对应不同大小的感受野。那么多尺度需要将不同大小的roi,对应到特征金字塔的不同的层(因为我们要将CNN的特征金字塔看成是来自于image pyramid.)。论文给出了计算公式:

    根据公式很容易理解,文章把224224大小的ROI对应到ResNet faster rcnn的C4, 如果有一个roi大小是224224的1/4,也就是更小的目标,应该对应到比C4更浅的层去。再根据池化的步长,很容易推测出对应到C3,那么检测112*112大小的roi,就到C3层检测。
    同RPN一样,后面也共用box分类器和box回归器。

FPN-Feature Pyramid Networks for Object Detection的更多相关文章

  1. Feature Pyramid Networks for Object Detection比较FPN、UNet、Conv-Deconv

    https://vitalab.github.io/deep-learning/2017/04/04/feature-pyramid-network.html Feature Pyramid Netw ...

  2. 『计算机视觉』FPN:feature pyramid networks for object detection

    对用卷积神经网络进行目标检测方法的一种改进,通过提取多尺度的特征信息进行融合,进而提高目标检测的精度,特别是在小物体检测上的精度.FPN是ResNet或DenseNet等通用特征提取网络的附加组件,可 ...

  3. 【Network Architecture】Feature Pyramid Networks for Object Detection(FPN)论文解析(转)

    目录 0. 前言 1. 博客一 2.. 博客二 0. 前言   这篇论文提出了一种新的特征融合方式来解决多尺度问题, 感觉挺有创新性的, 如果需要与其他网络进行拼接,还是需要再回到原文看一下细节.这里 ...

  4. Feature Pyramid Networks for Object Detection

    Feature Pyramid Networks for Object Detection 特征金字塔网络用于目标检测 论文地址:https://arxiv.org/pdf/1612.03144.pd ...

  5. 论文阅读笔记三十三:Feature Pyramid Networks for Object Detection(FPN CVPR 2017)

    论文源址:https://arxiv.org/abs/1612.03144 代码:https://github.com/jwyang/fpn.pytorch 摘要 特征金字塔是用于不同尺寸目标检测中的 ...

  6. 论文阅读 | FPN:Feature Pyramid Networks for Object Detection

    论文地址:https://arxiv.org/pdf/1612.03144v2.pdf 代码地址:https://github.com/unsky/FPN 概述 FPN是FAIR发表在CVPR 201 ...

  7. FPN(feature pyramid networks)

    多尺度的object detection算法:FPN(feature pyramid networks). 原来多数的object detection算法都是只采用顶层特征做预测,但我们知道低层的特征 ...

  8. Parallel Feature Pyramid Network for Object Detection

    Parallel Feature Pyramid Network for Object Detection ECCV2018 总结: 文章借鉴了SPP的思想并通过MSCA(multi-scale co ...

  9. Paper Reading: Relation Networks for Object Detection

    Relation Networks for Object Detection笔记  写在前面:关于这篇论文的背景知识,请参考我前面的两篇随笔(<关于目标检测>和<关于注意力机制> ...

随机推荐

  1. BZOJ2173 整数的lqp拆分(生成函数)

    首先有序整数拆分有个显然的递推式是g(n)=Σg(i) (i=0~n-1),即枚举加入最后一个数之前和是多少.(虽然不用递推式也能显然地知道答案是2n-1). 类似地,lqp拆分有递推式f(n)=Σf ...

  2. BZOJ2821 作诗(分块)

    和区间众数几乎一模一样的套路. // luogu-judger-enable-o2 #include<iostream> #include<cstdio> #include&l ...

  3. HDU4296-ChengduOnling-贪心

    某人要搬砖盖一栋楼,有m块砖,每块有两个值w和s,表示重量和强度.楼盖好后每块砖有一个危险值,表示为此砖之上的砖的重量和减此砖的强度,即Σ0(j-1)w - sj. 整体危险值是每块砖危险值的最大值. ...

  4. Codeforces Round #410 (Div. 2) B

    B. Mike and strings time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. adb 命令 链接 安装应用

    adb connect 192.168.11.1:5555(可省略) adb kill-server  杀掉服务 adb install xxx.apk

  6. android第二课:运行你的应用

    如果你按照前面课程创建了 Android 项目,它包含了可以立即运行的 "Hello World"源代码文件. 由两该条件来决定如何运行你的应用:你是否拥有运行着 Android ...

  7. OneProxy 管理

    -----client-----------haproxy---------mysql1----------mysql2------192.168.1.250 192.168.1.1 192.168. ...

  8. matplotlib 28原则

    记下各个简易模板,方便ctrl+c和ctrl+v 子图: import numpy as np import matplotlib.pyplot as plt x = np.array(range(1 ...

  9. 洛谷P3952 时间复杂度

    大毒瘤...... 时隔快半年我终于花了两个小时堪堪A掉这一题...果然我还没有准备好. 想法:用DFS模拟递归. 时间复杂度的处理:每层循环取max,然后相加. 最大难点:各种繁杂而令人发指的特判. ...

  10. vue实现添加与删除图书

    先放大图,当我们点击删除的时候,图书名单就会被我们删掉.当我们重新添加回来或者添加新书的时候,我们只需要在添加新书这里添加即可. 当我点击删除的时候,只需要的就是除却删除的那一个书籍之后剩下的图书. ...