Feature Pyramid Networks for Object Detection
Feature Pyramid Networks for Object Detection 特征金字塔网络用于目标检测
论文背景:
特征金字塔是用于检测不同尺寸物体的识别系统的基本组成部分。但是最近的深度学习目标检测方法避免了使用金字塔表示,部分原因在于它是计算和内存密集型的。Fast R-CNN和Faster R-CNN主张使用单一尺度计算特征,因为它提供了精确度与速度之间良好的折中,然而多尺度检测仍然表现更好,特别是对小目标检测。SSD(Single Shot MultiBox Detector)利用不同层的特征图进行不同尺寸的目标预测,效果又快又好,SSD为了预测小目标,就得把比较低的层拿出来进行预测,较低的层语义特征较弱,很难保证精确度。
多尺度目标检测是计算机视觉领域的一个基础且具有挑战性的课题。在图像金字塔(Image Pyramids)基础上构建的特征金字塔(Feature Pyramids)是基本的解决办法。这些金字塔是尺寸不变的,因此目标尺寸的变化是通过偏移其在金字塔中的级别来实现。除了可以表达高等级的语义信息,卷积网络更具鲁棒性,即使这样金字塔也同样被需要,因为它可以得到更加精确的结果,尤其是在多尺度检测上。金字塔结构的优势是其产生的特征每一层都是语义信息加强的,包括高分辨率的底层。
对图像金字塔的每一层都进行特征提取存在显而易见的局限性,首先运算耗时会增加4倍,而且训练深度网络非常耗显存,几乎没法用,即使用了也只能在测试(test)阶段用,而这又会导致训练/测试的不连续。因为这些原因Fast R-CNN 和Faster R-CNN默认的设置是不使用Featurized Image Pyramids。
SSD的处理方式
图像金字塔(Featurized Image Pyramid)并不是多尺度特征表示的唯一方式。CNN计算的时候本身就存在多级特征图(Feature Map Hierarchy),且不同层的特征图尺度就不同,形如金字塔结构。结构上虽然不错,但是前后层之间由于不同深度(depths)影响,语义信息差距太大,主要是高分辨率的低层特征很难有代表性的检测能力。
SSD方法在借鉴利用Featurized Image Pyramid上很值得一说,为了避免利用太低层的特征,SSD从偏后的Conv4_3开始,又往后加了几层,分别抽取每层特征,但是SSD对高分辨率的低层特征没有再利用,而这些层对检测小目标很重要。

本文的方法
本文中,作者利用了固有的多尺度和锥形层次结构的卷积网络来构造具有边际额外成本的金字塔网络,开发具有侧向连接(Skip Connector)的自顶向下的架构,用于在所有尺度上构建高级语义特征图,依靠一种通过自上而下的路径和横向连接将低分辨率但语义强的特征与高分辨率语义弱的特征结合在一起,这样就可以获得高分辨率,强语义的特征,有利于小目标的检测。这种结构是在CNN网络中完成的,和前文提到的基于图片的金字塔结构不同,而且完全可以替代它。

- (a):使用一个图像金字塔来构建一个特征金字塔。每个不同的图像尺寸上都需要单独计算特征,很慢
- (b):最近的检测系统已经选择使用单一尺寸的特征用于更快的检测。
- (c):重用卷积网络计算的金字塔特征等级,像Featurized Image Pyramid
- (d):本文提出的方法,Feature Pyramid Network(FPN),和(b),(c)一样快,但是更精确
简单总结下:
- (a):用图片金字塔生成特征金字塔
- (b):只在特征的最上层进行预测
- (c):特征层分层预测
- (d):FPN从高层携带信息传给低层,再分层预测,本文作者的创新之处就在于既使用了特征金字塔,又搞了分层预测。
特征金字塔结构
本论文的目标是利用CNN的金字塔层次结构特性(具有从低到高的语义),构建具有高级语义的特征金字塔。得到的特征金字塔网络(FPN)是通用的,但在论文中,作者先在RPN网络和Fast R-CNN中使用这一成果,也将其用在instance segmentation proposals中。
该方法将任意一张图片作为输入,以全卷积的方式在多个层级输出成比例大小的特征图,这是独立于CNN骨干架构(该论文中是ResNets)的。

- Top:自上向下的带有侧连接(Skip Connections)的结构,预测发生在最好的一层
- Bottom:作者提出的模型跟这个相似,利用它作为一个特征金字塔,各个级别的预测都是独立的
自下而上的路径
CNN的前馈计算就是自下而上的路径,特征图经过卷积核计算,通常是越变越小的,也有一些特征层的输出和原来大小一样,称为“相同网络阶段”(same network stage)。对于本文中的特征金字塔,作者为每个阶段定义一个金字塔级别,然后选择每个阶段的最后一层的输出作为特征图的参考集。这种选择是很自然的,因为每个阶段的最深层应该具有最强的特征。具体来说,对于ResNets,作者使用了每个阶段的最后一个残差结构的特征激活输出。将这些残差模块输出表示为{C2,C3,C4,C5},对应于Conv2,Conv3,Conv4,Conv5的输出,并且注意他们相对于输入图像具有{4,8,16,32}像素的步长。考虑到内存占用,没有将Conv1包含在金字塔中。
自上而下的路径和横向连接
自上而下的路径是如何去结合低层高分辨率的特征呢?方法就是,把更抽象,语义更强的高层特征图进行取样,然后把该特征横向连接(lateral connections)至前一层特征,因此高层特征得到加强。值得注意的是,横向连接的两层特征在空间尺寸上要相同,这样做主要是为了利用低层的定位细节信息。
把高层特征做2倍上采样(最近邻上采样法),然后将其和对应的前一层特征结合(前一层要经过1*1的卷积核才能用,目的是改变channels,应该是要和后一层的channels相同),结合的方式就是像素间的加法。重复迭代该过程,直至生成最精细的特征图。迭代开始阶段,作者在C5层后面加了一个1*1的卷积核来产生最粗略的特征图,最后,作者用3*3的卷积核去处理已经融合的特征图(为了消除上采样的混叠效应),以生成最后需要的特征图。{C2,C3,C4,C5}层对应融合特征层为{P2,P3,P4,P5},对应的层空间尺寸是相通的。

金字塔结构中所有层级共享分类层(回归层),就像Featurized Image Pyramid中所做的,作者规定所哟特征图中的维度(通道数,表示为d)。作者在本文中设置d=256,因此所有额外的卷积层(比如P2)具有256通道输出,这些额外层没有用非线性,非线性会带来一些影响。
实际应用
本文方法在理论上在CNN中是通用的,作者将其首先应用到了RPN和Fast R-CNN中,应用中尽量做小幅度的修改。要想明白FPN如何应用在RPN和Fast R-CNN(合起来就是Faster R-CNN),首先要明白Faster R-CNN + Resnet-101结构。
Faster R-CNN + Resnet-101

Faster R-CNN利用Conv1~Conv4-x的91层为共享卷积层,然后从Conv4-x的输出开始分叉,一路经过RPN网络进行区域选择,另一路直接连一个ROI Pooling层,把RPN的结果输入ROI Pooling层,映射成7*7的特征。然后经过Conv5-x的计算,这里Conv5-x起到原来全连接层(fc)的作用,最后经过分类器和边框回归得到最终的结果。
RPN中的特征金字塔网络
RPN是Faster R-CNN中用于区域选择的子网络,RPN是一个13*13*256的特征图上应用9种不同尺度anchor,本文另辟蹊径,把特征图弄成多尺度的,然后固定每种特征图对应的anchor尺寸,也就是说每一个金字塔层级应用了单尺度的anchor,{P2,P3,P4,P5}分别对应的anchor尺度为{32^2,64^2,128^2,256^2,512^2},当然目标不可能都是正方形,本文仍然使用三种比例{1:2,1:1,2:1},所以金字塔结构中共有15中anchors。(没有画完整,缺256^2,512^2)

训练中,把重叠率(IoU)高于0.7的作为正样本,低于0.3的作为负样本。特征金字塔网路之间有参数共享,其优秀表现使得所有层级具有相似的语义信息。具体性能在实验中评估。
Feature Pyramid Networks for Object Detection的更多相关文章
- 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 ...
- 『计算机视觉』FPN:feature pyramid networks for object detection
对用卷积神经网络进行目标检测方法的一种改进,通过提取多尺度的特征信息进行融合,进而提高目标检测的精度,特别是在小物体检测上的精度.FPN是ResNet或DenseNet等通用特征提取网络的附加组件,可 ...
- 【Network Architecture】Feature Pyramid Networks for Object Detection(FPN)论文解析(转)
目录 0. 前言 1. 博客一 2.. 博客二 0. 前言 这篇论文提出了一种新的特征融合方式来解决多尺度问题, 感觉挺有创新性的, 如果需要与其他网络进行拼接,还是需要再回到原文看一下细节.这里 ...
- 论文阅读笔记三十三:Feature Pyramid Networks for Object Detection(FPN CVPR 2017)
论文源址:https://arxiv.org/abs/1612.03144 代码:https://github.com/jwyang/fpn.pytorch 摘要 特征金字塔是用于不同尺寸目标检测中的 ...
- 论文阅读 | FPN:Feature Pyramid Networks for Object Detection
论文地址:https://arxiv.org/pdf/1612.03144v2.pdf 代码地址:https://github.com/unsky/FPN 概述 FPN是FAIR发表在CVPR 201 ...
- FPN-Feature Pyramid Networks for Object Detection
FPN-Feature Pyramid Networks for Object Detection 标签(空格分隔): 深度学习 目标检测 这次学习的论文是FPN,是关于解决多尺度问题的一篇论文.记录 ...
- Parallel Feature Pyramid Network for Object Detection
Parallel Feature Pyramid Network for Object Detection ECCV2018 总结: 文章借鉴了SPP的思想并通过MSCA(multi-scale co ...
- FPN(feature pyramid networks)
多尺度的object detection算法:FPN(feature pyramid networks). 原来多数的object detection算法都是只采用顶层特征做预测,但我们知道低层的特征 ...
- Paper Reading: Relation Networks for Object Detection
Relation Networks for Object Detection笔记 写在前面:关于这篇论文的背景知识,请参考我前面的两篇随笔(<关于目标检测>和<关于注意力机制> ...
随机推荐
- MapReduce实战(二)自定义类型排序
需求: 基于上一道题,我想将结果按照总流量的大小由大到小输出. 思考: 默认mapreduce是对key字符串按照字母进行排序的,而我们想任意排序,只需要把key设成一个类,再对该类写一个compar ...
- HDFS的HA机制
传统的HDFS机制如下图所示: 也就是存在一个NameNode,一个SecondaryNameNode,然后若干个DataNode.这样的机制虽然元数据的可靠性得到了保证(靠edits,fsimage ...
- ThinkPHP 模板 Volist 标签嵌套循环输出多维数组
ThinkPHP 中对 volist 标签嵌套使用可实现多维数组的输出. volist 嵌套使用 一般的二维数组,可以用 volist 标签直接循环输出.对于多维数组,则需要对其中的数组成员再次使用 ...
- SQLServer 批量备份与还原
备份与还原是数据库避不开的主题,而作为DBA,经常会面临将一台机器上的所有数据库重新构建到一台新机器上的要求: 在现在都讲究自动化管理的时代,传统的界面操作备份还原的做法不仅浪费时间和精力,而且还很容 ...
- Web监听器导图详解
监听器是JAVA Web开发中很重要的内容,其中涉及到的知识,可以参考下面导图: Web监听器 1 什么是web监听器? web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特 ...
- C#反射Assembly 详细说明,有项目例子
1.对C#反射机制的理解2.概念理解后,必须找到方法去完成,给出管理的主要语法3.最终给出实用的例子,反射出来dll中的方法 反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等 ...
- 卡友pos机使用流程
Q: pos机正常使用步骤 A: 1. 按开机键开机2. 输入“01”进行签到3. 系统提示输入密码,密码为“0000”4. 系统提示“请刷卡”,可正常刷卡消费首次使用请务必登陆商户后台核对结算收款账 ...
- ubuntu卸载vmware player
sudo vmware-installer -u vmware-player 转自: http://zhidao.baidu.com/link?url=lapkBNBGIUz_mo6603CQgi_2 ...
- iOS开发之 -- 判断tableview/scrollview的滑动方法,及导航栏渐变的实现代码
开发的过程中,肯定会用到在视图想上滑动的时候,在导航处做一些操作,比如向上滑动的时候,做个动画,出现一个搜索框,或者其他的操作,那么我们怎么来判断它的滑动方向呢? 首先我们应该知道tableview继 ...
- JS制作一个通用的商城版历史浏览记录
正在开发一个b2c的国外商城,昨天做了一个历史浏览记录发出来跟大家分享一下. JS: //cookie相关函数 function getCookieVal(offset) { var endst ...