论文题目:《Feature Pyramid Networks for Object Detection》
论文地址:https://arxiv.org/pdf/1612.03144.pdf

概述

这篇论文主要解决的问题是目标检测在处理多尺度变化问题时的不足,现在的很多网络都使用了利用单个高层特征(比如说Faster R-CNN利用下采样四倍的卷积层——Conv4,进行后续的物体的分类和bounding box的回归),但是这样做有一个明显的缺陷,即小物体本身具有的像素信息较少,在下采样的过程中极易被丢失。我们知道低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略,即浅层特征有助于检测物体。为了处理多尺度的问题,经典的方法是利用图像金字塔的方式进行多尺度变化增强,但这样会带来极大的计算量。所以这篇论文提出了特征金字塔的网络结构,能在增加极小的计算量的情况下,处理好物体检测中的多尺度变化问题。

1. 前言

下图中描述了四种不同的得到一张图片多尺度特征的方法:


       下面对图中的每个方法给出详细介绍:

(a)Featurized image pyramid

图像金字塔(尺度不变性):常用的是高斯金字塔(没有CNN,手工操作,很复杂),所谓的高斯金字塔就是通过高斯平滑和亚采样获得一些下采样图像,也就是第K层高斯金字塔通过平滑、亚采样操作就可以获得K+1层高斯图像,高斯金字塔包含了一系列低通滤波器,其截止频率从上一层到下一层以因子2逐渐增加,所以高斯金字塔可以跨越很大的频率范围。总之我们输入一张图片,可以获得多张不同尺度的图像,我们将这些不同尺度的图像的4个顶点连接起来,就可以构造出一个类似真实金字塔的一个图像金字塔。通过这些操作我们可以为2维图像增加一个尺寸维度(或者说是深度),这样我们就可以从中获得更多的有用信息。整个过程类似于人眼看一个目标由远及近的过程(近大远小原理)。高斯核是唯一能够正确模拟人眼观看远近状态的数学工具。

优点:
1)对每一种尺度的图像进行特征提取,能够产生多尺度的特征表示,并且所有等级的特征图都具有较强的语义信息,甚至包括一些高分辨率的特征图。

缺点:
1)推理时间大幅度增加。
2)由于内存占用巨大,用图像金字塔形式训练一个端到端的深度神经网络变得不可行。
3)如果只在测试阶段使用图像金字塔,那么就会造成一个问题:由于训练时,网络只是针对某一个特点的分辨率进行训练,推理时运用图像金字塔,可能会在训练与推理时产生“矛盾”。

(b)Single feature map

利用单个高层特征图进行预测:例如Faster R-CNN中的RPN层以及YOLOv1、YOLOv2就是利用单个高层特征图进行物体的分类和bounding box的回归。这种方法的优点是速度快、需要内存少;缺点是仅仅利用深层网络中最后一层的特征,却忽略的其它层的特征,细节信息可以在一定程度上提升检测的精度。浅层网络关注细节信息(例如物体的边缘、角点),深层网络关注语义信息(例如房子。汽车)。我们知道,对于检测任务而言,要同时进行分类与检测,分类需要的是语义信息,而检测更多的是需要物体的物理信息,即细节信息。因此,只利用高层特征图,不利于小物体的检测以及bounding box的回归效果。

(c)Pyramidal feature hierarchy*

金字塔型特征层级:例如SSD目标检测模型就是不同层多尺度的特征图,即从网络不同层抽取不同尺度的特征做预测,因为一幅图像中可能具有多个不同大小的目标,区分不同的目标可能需要不同的特征。这种方式不会增加额外的计算量,但是这种方法存在问题:低层特征图语义信息不够以及低层特征图的分辨率也不高,SSD为了避免使用低层特征图,放弃了重用已经计算的层,而是从网络的高层开始构建金字塔(例如,VGG网络的Conv4之后,再添加几个新的卷积层),因此,SSD错过了重用低层高分辨的特征图,即没有充分利用到低层特征图中的空间信息(这些信息对小物体的检测十分重要)。。

(d)Feature Pyramid Network

FPN是为了解决以上三种结构的不足,即每一层不同尺度的特征图都具有较强的语义信息。这种网络结构能够在增加较少计算量的前提下融合低分辨率语义信息较强的特征图和高分辨率语义信息较弱但空间信息丰富的特征图。FPN的独特之处在于,它是以特征金字塔为基础结构,对每一层级的特征图分别进行预测。

2. FPN详细介绍

FPN是传统CNN网络对图片信息进行表达输出的一种增强。它目的是为了改进CNN网络的特征提取方式,从而可以使最终输出的特征更好地表示出输入图片各个维度的信息。它的基本过程有三个分别为:自下至上的通路即自下至上的不同维度特征生成;自上至下的通路即自上至下的特征补充增强;CNN网络层特征与最终输出的各维度特征之间的关联表达。
       我们在下图中能看出这三个过程的细粒度表示。


● 自下至上的通路(Bottom-top pathway): 就是指的普通CNN特征自底至上逐层浓缩表达特征的一个过程。此过程很早即被认识到了即较底的层反映较浅层次的图片信息特征,像边缘等;较高的层则反映较深层次的图片特征像物体轮廓、乃至类别等;
● 自上至下的通路(Top-bottome pathway): 上层的特征输出一般其feature map size比较小,但却能表示更大维度(同时也是更加high level)的图片信息。此类high level信息经实验证明能够对后续的目标检测、物体分类等任务发挥关键作用。因此我们在处理每一层信息时会参考上一层的high level信息做为其输入(这里只是在将上层feature map等比例放大后再与本层的feature maps做element wise相加);
● CNN层特征与每一级别输出之间的表达关联: 在这里作者实验表明使用1x1的Conv即可生成较好的输出特征,它可有效地降低中间层次的channels 数目。最终这些1x1的Convs使得我们输出不同维度的各个feature maps有着相同的channels数目(本文用到的Resnet-101主干网络中,各个层次特征的最终输出channels数目为256)。

3. FPN应用与RPN层


       Faster RCNN中的RPN是通过最后一层的特征来做的。最后一层的特征经过3x3卷积,得到256个channel的卷积层,再分别经过两个1x1卷积得到类别得分和边框回归结果。这里将特征层之后的RPN子网络称之为网络头部(network head)。对于特征层上的每一个点,作者用anchor的方式预设了9个框。这些框本身包含不同的尺度和不同的长款比例。
       FPN针对RPN的改进是将网络头部应用到每一个P层。由于每个P层相对于原始图片具有不同的尺度信息,因此作者将原始RPN中的尺度信息分离,让每个P层只处理单一的尺度信息。具体的,对{322、642、1282、2562、512^2}这五种尺度的anchor,分别对应到{P2、P3、P4、P5、P6}这五个特征层上。每个特征层都处理1:1、1:2、2:1三种长宽比例的候选框。P6是专门为了RPN网络而设计的,用来处理512大小的候选框。它由P5经过下采样得到。
       另外,上述5个网络头部的参数是共享的。作者通过实验发现,网络头部参数共享和不共享两种设置得到的结果几乎没有差别。这说明不同层级之间的特征有相似的语义层次。这和特征金字塔网络的原理一致。

4.总结

FPN(Feature Pyramid Network)同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。并且预测是在每个融合后的特征层上单独进行的,这和常规的特征融合方式不同。
       同时,FPN的应用并不局限于目标检测领域,它给出了一种很好的特征融合的思想,因此在计算机视觉其他领域也可以得到很好的应用。
       细心一点不难发现,FPN的结构和语义分割网络U-Net极为相似,相比于U-Net,FPN只是多了几个低分辨率特征图的输出,同时FPN特征融合采用的是element-wise相加,而U-Net只需要最终输出的高分辨率特征图,特征融合采用的是concatenate。

【目标检测】FPN(Fature Pyramid Network)详解相关推荐

  1. 深度学习_目标检测_SPP(Spatial Pyramid Pooling)详解

    在目标检测领域,很多检测算法最后使用了全连接层,导致输入尺寸固定.当遇到尺寸不匹配的图像输入时,就需要使用crop或者warp等操作进行图像尺寸和算法输入的匹配.这两种方式可能出现不同的问题:裁剪的区 ...

  2. 深度学习之目标检测(十一)--DETR详解

    深度学习之目标检测(十一)-- DETR详解 目录 深度学习之目标检测(十一)-- DETR详解 1. 前言 2. DETR 框架 2.1 CNN Backbone 2.2 Transformer E ...

  3. 目标检测特殊层:PSROIPooling详解

    1. Position Sensitive ROI-Pooling 简介 Position Sensitive ROI Pooling(位置敏感的候选区域池化)是检测框架R-FCN的主要创新点.一般来 ...

  4. 目标检测Tensorflow:Yolo v3代码详解 (2)

    目标检测Tensorflow:Yolo v3代码详解 (2) 三.解析Dataset()数据预处理部分 四. 模型训练 yolo_train.py 五. 模型冻结 model_freeze.py 六. ...

  5. onestage方法_目标检测——One-stage和Two-stage的详解

    目标检测--One-stage和Two-stage的详解 发布时间:2019-01-15 14:16, 浏览次数:2784 , 标签: One stage Two 二.Two-stage类别的目标检测 ...

  6. 目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)

    一.RCNN 1. 介绍 2. 步骤流程 3. 部分详解 4. 缺点 二.Fast RCNN 1. 介绍: 2. 步骤流程 3. 部分详解 4. 比较 三.Faster RCNN 1. 介绍 2. 步 ...

  7. 目标检测FPN(Feature Pyramid Networks)的使用

    FPN(Feature Pyramid Networks), 论文:Feature Pyramid Network for Object Detection 使用FPN能给网络带来哪些好处呢?根据原论 ...

  8. 目标检测经典算法和API详解(笔记)

    文章目录 商品目标检测 1. 目标检测概述 1.1.项目演示介绍 学习目标 1.1.1 项目演示 1.1.2 项目结构 1.1.3 项目安排 1.2 图像识别背景 学习目标 1.2.1 图像识别三大任 ...

  9. 【目标检测】Faster RCNN算法详解

    转载自:http://blog.csdn.net/shenxiaolu1984/article/details/51152614 Ren, Shaoqing, et al. "Faster ...

  10. 【目标检测】YOLO系列——YOLOv1详解

    本篇是关于目标检测算法YOLOv1的学习笔记.网上的博客大多是摘抄翻译论文中的重点内容加上自己的理解,或者是梳理论文的大致思路,在没看过原文的情况下可能总会有些看不懂的地方.所以强烈建议博客搭配原文食 ...

最新文章

  1. 解决linux系统CentOS下调整home和根分区大小
  2. python散点图点的大小-Python散点图。 标记的大小和样式
  3. 【PC工具】nodemcu ESP8266常用USB转串口芯片驱动CP210x、CH340G驱动安装有可能遇到的问题及解决办法...
  4. linux命令--VI命令详解(二)
  5. CodeForces - 1339E Perfect Triples(打表找规律)
  6. hibernate脏数据_Hibernate脏检查的剖析
  7. Linux. C语言中else,2. if/else语句
  8. Search in Rotated Sorted Array
  9. HPUX11.31环境下,更换HBA卡后的配置操作(HP-UX)
  10. Linux 权限设置
  11. 求水面面积(C语言)
  12. 区块链技术公司——资本重塑
  13. Java 对Oracle数据库中的 BLOB类型 插入图片
  14. 设计模式-第二篇之简单工厂模式
  15. python中33个保留字的含义_Python的保留字。这是什么意思?
  16. Delphi 播放wav声音
  17. 各类图像数据大集合(下载链接)
  18. Pr 视频效果:过时
  19. 抖快齐聚短剧战场,是加重“同质化”还是搅动“视频格局”?
  20. 停止抱怨英语_停止抱怨

热门文章

  1. FPGA资源评估方法
  2. php声明js变量类型,js中变量是什么以及有哪些类型
  3. vuex commit 模块_一分钟上手Vuex
  4. ideahtml标签不提示_「系统自带标签」如何帮门店区分价值顾客?| 早8点141期
  5. C语言在STM32中的内存分配
  6. crontab 每天凌晨8点_凌晨3点47分,嘉兴8岁女孩竟独自站在街头,原因竟是…
  7. 安装ceston8出现timeout_瓦罗兰特Valorant:显示逾时怎么办 瓦罗兰特time out解决
  8. squid是否支持http1.1和对KeepAlive支持的个人理解
  9. php域名墙检测,php 网站域名被墙判断请求方法
  10. c语言调用子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...