Paper Reading:FPN
FPN
论文:Feature Pyramid Networks for Object Detection
发表时间:2017
发表作者:(Facebook AI Research)Tsung-Yi Lin, Piotr Dollar, Ross Girshick, Kaiming He, Bharath Hariharan, and Serge Belongie
发表刊物/会议:CVPR
论文链接:论文链接
论文代码:点击此处
Feature Pyramid Networks (FPN) 是比较早提出利用多尺度特征和 Top-Down 结构做目标检测的网络结构之一,虽然论文中整个网络是基于 Faster R-CNN 检测算法构建,但其整体思想可以广泛适用于目前常见的大部分目标检测算法甚至分类等的其他任务中。
整体来讲, FPN 解决的问题如下:只用网络高层特征去做检测,虽然语义信息比较丰富,但是经过层层pooling等操作,特征丢失太多细节信息,对于小目标检测这些信息往往是比较重要的。所以,作者想要将语义信息充分的高层特征映射回分辨率较大、细节信息充分的底层特征,将二者以合适的方式融合来提升小目标的检测效果。
特征金字塔
FPN算法为了解决多尺度检测的问题,引入了特征金字塔网络。FPN的结构设计了top-down结构和横向连接,以此融合具有高分辨率的浅层layer和具有丰富语义信息的深层layer。这样就实现了从单尺度的单张输入图像,快速构建在所有尺度上都具有强语义信息的特征金字塔,同时不产生明显的代价。
上图中作者首先介绍了四种常见的特征利用的方式,这里我们一一说明。图中a部分展示了利用图像特征金字塔的方式做预测的方法,即通过将预测图片变换为不同尺寸的图片输入网络,得到不同尺寸的特征进行预测。这种方法行之有效,可以提升对各个尺寸目标的检测效果。但应用于类似于 Faster R-CNN 这样的网络,迫于速度和显存的压力,端对端的训练难以实现。通常这种方法只应用于网络预测的阶段。
图中 b 部分展示的方法为利用单一尺度图片的最高层信息进行预测的方法,是平时最广泛被使用的一种方法,简单高效。但是缺点是由于尺度单一,应对多尺度的目标效果受限。
图中 c 部分展示了利用特征金字塔来做预测的方法。即采用不同尺寸不同深度的特征层分别进行预测,每层的感受野和特征信息的丰富程度都不一样,对不同尺寸的目标响应也有所区别。其中高层特征更适合用于检测大目标,而低层特征细节信息更加丰富,感受野也偏小,更适合用于检测小目标。我们经常使用的 SSD 检测算法即使用了这种思路。该方法的缺点是低层的特征信息因为层数较浅,语义信息不太丰富,所以小目标的检测效果仍然不尽如人意。
图中 d 部分即为 FPN 的解决方案,利用 Top-Down 结构,融合了高层和底层的特征信息,使得底层的语义信息仍然很丰富的同时保持较大的分辨率,提升小物体的检测效果。
总结
- 特征图片金字塔:产生了多尺度特征表示,但是花费大量的时间,不适合实际应用
- 单一特征映射:只有高层的特征信息,会导致小尺寸的目标物被忽视,从而会造成检测小物体的性能急剧下降。
- 金字塔特征分层:让不同深度的特征图去学习同样的语义信息,同样会忽略掉底层网络中的细节特征。
- 特征金字塔:FPN主要解决的是物体检测中的多尺度问题,通过简单的网络连接改变,在基本不增加原有模型计算量的情况下,大幅度提升了小物体检测的性能
上图 展示了 FPN 网络的特征融合方式,其中高层特征通过最近邻差值的方式增大两倍的尺寸,而底层的特征经过一个 $11$ 的卷积做降维操作,这两层特征分别作像素级的相加完成融合。融合之后的特征可以经过一个 $33$ 的卷积层之后输入用来预测,也可以再重复上面的操作,和更低层的特征进行融合。
把更抽象,语义更强的高层特征图进行上取样,然后把该特征横向连接(lateral connections )至前一层特征,因此高层特征得到加强。值得注意的是,横向连接的两层特征在空间尺寸上要相同。这样做应该主要是为了利用底层的定位细节信息。
把高层特征做2倍上采样(最邻近上采样法,可以参考反卷积),然后将其和对应的前一层特征结合(前一层要经过1 * 1的卷积核才能用,目的是改变channels,应该是要和后一层的channels相同),结合方式就是做像素间的加法。重复迭代该过程,直至生成最精细的特征图。迭代开始阶段,作者在C5层后面加了一个1 * 1的卷积核来产生最粗略的特征图,最后,作者用3 * 3的卷积核去处理已经融合的特征图(为了消除上采样的混叠效应),以生成最后需要的特征图。为了后面的应用能够在所有层级共享分类层,这里坐着固定了3*3卷积后的输出通道为d,这里设为256.因此所有额外的卷积层(比如P2)具有256通道输出。这些额外层没有用非线性。
应用
本文方法在理论上在CNN中是通用的,作者将其首先应用到了RPN和Fast R-CNN中,应用中尽量做小幅度的修改。
在 RPN 中,区别于原论文直接在最后的 feature map 上设置不同尺度和比例的 anchor,由于头部在所有金字塔等级的所有位置上密集滑动,因此没有必要在每个特征级别上设置多尺度anchor。 本文的尺度信息对应于相应的 feature map(分别设置面积为 32×32,64×64, 128×128, 256×256, 512×512),比例用类似于原来的方式设置 {1:2, 1:1, 2:1} 三种,所以在金字塔上总共有15个anchor。与 RPN 一样,FPN 每层 feature map 加入 3x3 的卷积及两个相邻的 1x1 卷积分别做分类和回归的预测。在 RPN 中,实验对比了 FPN 不同层 feature map 卷积参数共享与否,发现共享仍然能达到很好性能,说明特征金字塔使得不同层学到了相同层次的语义特征。
训练中,把重叠率(IoU)高于0.7的作为正样本,低于0.3的作为负样本。特征金字塔网路之间有参数共享,其优秀表现使得所有层级具有相似的语义信息。具体性能在实验中评估。
在 Fast R-CNN 中, 要将它与FPN一起使用,需要将不同比例的RoI分配给金字塔等级。 将特征金字塔视为从图像金字塔生成,可以调整基于区域的检测器的分配策略,以便在图像金字塔上运行。在形式上,通过以下方式将宽度为w且高度为h(在图像网络上)的RoI分配到特征金字塔的等级$P_k$上:
算法结构如下:
- 首先,选择一张需要处理的图片,然后对该图片进行预处理操作;
- 然后,将处理过的图片送入预训练的特征网络中(如ResNet等),即构建所谓的bottom-up网络;
- 接着,如图所示,构建对应的top-down网络(即对层4进行上采样操作,先用1x1的卷积对层2进行降维处理,然后将两者相加(对应元素相加),最后进行3x3的卷积操作,最后);
- 接着,在图中的4、5、6层上面分别进行RPN操作,即一个3x3的卷积后面分两路,分别连接一个1x1的卷积用来进行分类和回归操作;
- 接着,将上一步获得的候选ROI分别输入到4、5、6层上面分别进行ROI Pool操作(固定为7x7的特征);
- 最后,在上一步的基础上面连接两个1024层的全连接网络层,然后分两个支路,连接对应的分类层和回归层;
下图展示了各个算法在 COCO 数据集上的对比。
参考:
FPN
Paper Reading:FPN的更多相关文章
- Paper Reading: Stereo DSO
开篇第一篇就写一个paper reading吧,用markdown+vim写东西切换中英文挺麻烦的,有些就偷懒都用英文写了. Stereo DSO: Large-Scale Direct Sparse ...
- [Paper Reading]--Exploiting Relevance Feedback in Knowledge Graph
<Exploiting Relevance Feedback in Knowledge Graph> Publication: KDD 2015 Authors: Yu Su, Sheng ...
- Paper Reading: Perceptual Generative Adversarial Networks for Small Object Detection
Perceptual Generative Adversarial Networks for Small Object Detection 2017-07-11 19:47:46 CVPR 20 ...
- Paper Reading: In Defense of the Triplet Loss for Person Re-Identification
In Defense of the Triplet Loss for Person Re-Identification 2017-07-02 14:04:20 This blog comes ...
- Paper Reading - Attention Is All You Need ( NIPS 2017 ) ★
Link of the Paper: https://arxiv.org/abs/1706.03762 Motivation: The inherently sequential nature of ...
- Paper Reading - Convolutional Sequence to Sequence Learning ( CoRR 2017 ) ★
Link of the Paper: https://arxiv.org/abs/1705.03122 Motivation: Compared to recurrent layers, convol ...
- Paper Reading - Deep Captioning with Multimodal Recurrent Neural Networks ( m-RNN ) ( ICLR 2015 ) ★
Link of the Paper: https://arxiv.org/pdf/1412.6632.pdf Main Points: The authors propose a multimodal ...
- Paper Reading - Deep Visual-Semantic Alignments for Generating Image Descriptions ( CVPR 2015 )
Link of the Paper: https://arxiv.org/abs/1412.2306 Main Points: An Alignment Model: Convolutional Ne ...
- Paper Reading - Mind’s Eye: A Recurrent Visual Representation for Image Caption Generation ( CVPR 2015 )
Link of the Paper: https://ieeexplore.ieee.org/document/7298856/ A Correlative Paper: Learning a Rec ...
随机推荐
- linux服务器常用密令
1. 什么是linux服务器load average? Load是用来度量服务器工作量的大小,即计算机cpu任务执行队列的长度,值越大,表明包括正在运行和待运行的进程数越多.参考资料:http://e ...
- ios客户端浏览器样式加载失效问题
最近线上测试中出现一个奇怪的问题,ios客户端浏览器样式加载失效. 从表象来看,同样的css,安卓手机上可以正常展示,但是到ios手机上首次进入页面就不能正常显示 这时候,我们首先会考虑是不是ios设 ...
- python map函数(23)
截至到目前为止,其实我们已经接触了不少的python内置函数,而map函数也是其中之一,map函数是根据指定函数对指定序列做映射,在开发中使用map函数也是有效提高程序运行效率的办法之一. 一.语法定 ...
- 自定义Hive函数
7. 函数 7.1 系统内置函数 查看系统自带的函数:show functions; 显示自带的函数的用法:desc function upper(函数名); 详细显示自带的函数的用法:desc fu ...
- TypeScript 高级类型
⒈交叉类型(Intersection Types) 交叉类型是将多个类型合并为一个类型. 这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性. 例如, Person &a ...
- ARTS 第十周打卡
Algorithm : 做一个 leetcode 的算法题 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: [&quo ...
- VMware安装windows2003
一.安装vm 这一项大家应该都会,网上也有很多教程. 二.搭建Windows server 2003 1.镜像下载- 2.虚拟机安装 首先是新建虚拟机,我选的是自定义,也可以选典型 第一步默认下一步, ...
- python笔记005-字符串-列表-元组
目录 1 上次作业补充拓展... 1 1.1 进制转换... 1 1.2 类型判断... 1 2 今日学习内容... 2 2.1 格式化输出... 2 2.2 基本运算符... 2 2.2.1 算术运 ...
- Python开发【第七章】:异常处理
一.异常处理 1.异常基础 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! #异常处理 list = [&qu ...
- Qt中容器类应该如何存储对象(最好使用对象指针类型,如:QList<TestObj*>,而不要使用 QList<TestObj> 这样的定义,建议采用 智能指针QSharedPointer)
Qt提供了丰富的容器类型,如:QList.QVector.QMap等等.详细的使用方法可以参考官方文档,网上也有很多示例文章,不过大部分文章的举例都是使用基础类型:如int.QString等.如果我们 ...