前言

原论文名称为《Feature Pyramid Networks for Object Detection》,是一篇多尺度目标检测的经典论文。之前在SSD的论文解读中提到,SSD使用了不同卷积层的feature map来进行多尺度检测。这个方法其实非常巧妙,因为不同层的输出结果中其实就隐含了不同尺度的信息,而且这种方式不会增加额外的计算量,相比之前对图像做多尺度的变换(图像金字塔)之后再分别进行检测计算量和内存开销都要小很多。FPN就是受到了SSD的启发诞生的一种对于多尺度检测更加完备、更加高效的方法,而且这个方法可以很轻松的加到很多主流的目标检测框架中,有很好的泛用性。

总体思路

论文中有一张图涵盖了已有的多尺度目标检测的方法:

图(a)方法就是最早的多尺度检测方法,也就是先做图像金字塔,再分别对每张图片做目标检测。所谓图像金字塔,可以理解为对原始图片不断做下采样和滤波生成一组不同尺度的图像,然后后续对这一组图像进行操作,这模拟了人眼由近及远看物体的过程。这种方法在早期的目标检测中非常常见,大名鼎鼎的SIFT特征就是基于这个思想进行操作的。但是图(a)方法有一个显而易见的缺陷:计算量和内存开销太大了,即便SIFT检测已经提出了DOG金字塔结构来减少计算量。

图(b)方法则是应用最广也是前几年最为主流的目标检测方法,这种方法就是直接利用自底向上卷积输出的最后一层feature map进行目标检测。这种方法比较简单粗暴,也就是仅仅利用神经网络最后一层的强语义特征做检测,甚至于我们可以说,这种方法基本上没考虑多尺度目标检测的事。现在一些主流目标检测模型的原始模型比如R-CNN、YOLO v1都属于这种模式。而对于这种模式的模型,一般加上多尺度检测的方法是和图(a)相结合,也就是对图像金字塔中的图像分别应用图(b)方法,这种方式对内存和计算的开销的可想而知,这样就导致推断时间大大提升,不利于实时性。这种方式还导致了由于内存限制,我们只能在训练时采取单尺度,而在测试时加上多尺度的模块,这样就使得训练和测试时的推断不一致,影响效果。

图©方法就是我们在前言中说的那个巧妙的思路,由于网络每层的输出中隐含有尺度信息,因此我们可以从网络不同层抽取不同尺度的特征做预测,这种思路的好处是不会增加额外的计算量,因为我们在做神经网络的时候就已经获得了多尺度特征信息。但是这也不是说所有的层都可以选取出来做特征金字塔,因为高层与低层之间所含的语义信息是不同的,且很多低层特征所含的语义信息来做目标检测是不够的,因此实际上选择的特征图也都是较高层的。比如我们之前学习过的SSD。这样有一个缺陷,那就是这种方法不能充分使用高分辨率的低层特征图,也就是说没法充分利用低层特征图中固有的空间信息。而高分辨率特征图中所蕴含的空间信息对于小目标检测十分有用,因此图(c)的方法还是不能很好的进行小目标检测。

图(d)方法就是本文所使用的FPN方法。为了解决图©方法没有很好利用低层特征图的弊端,图(d)将高层的语义强的特征图上采样后与低层的分辨率高的特征图相结合起来进行检测,这样一方面保证了语义信息的充足,另一方面又能保证空间信息的不浪费。其实在FPN之前,也有人提出过类似的思路,但是前人的思路是选择一张既具有高分辨率又具有较强语义信息的特征图进行预测;而FPN是则是在特征金字塔的基础结构上,对每一层级的特征图分别进行预测,对比如下图所示:

我们用一句话来概括FPN:
FPN主要解决物体检测中的多尺度问题,通过简单的网络连接改变,将高层的语义信息与低层的空间信息结合,并对每个层级分别进行预测,在基本不增加原有模型计算量的情况下,提升了小物体检测的性能。

接下来看看FPN的网络是如何设计的。

网络结构

论文中对FPN网络结构给出了下图作为解释:

由上图,FPN方法可以概括为三个词:自下而上、自顶向下、横向连接

展开概括描述为:先由一条自下而上的路径生成各级特征图,再由一条自顶向下的路径生成特征金字塔。特征金字塔的每一层是由高一级的新特征图上采样2倍所得特征图以及统计原始特征图做1×1卷积所得特征图两部分合并而来。

网上有大佬对上面的过程进行了很好的总结,如下图所示(图源知乎@Hans):

下面以上图为例解释FPN网络,以更好理解。

自下而上部分:
上图采用第二级到第五级参与预测(推测第一级语义还是太弱了所以不用),{C2,C3,C4,C5}表示conv2,conv3,conv4和conv5的输出层作为FPN的特征,对应输入图片的下采样倍数为{4,8,16,32}。

自顶向下部分和横向连接部分:
C5层先经过1 x 1卷积,改变特征图的通道数。M5通过上采样,再加上C4经过1 x 1卷积后的特征图,得到M4。重复这个过程,分别得到M3,M2。M层特征图再经过3 x 3卷积,得到最终的P2,P3,P4,P5层特征。
下面对上述部分做几点说明:
(1)上采样采用最邻近插值法,即以某个元素为正方形左上角的的四个个元素的值都和该元素一致。
(2)文章中通道数设置为d=256。
(3)横向连接的中相加指的是对应元素直接相加
(4)对M层特征图再做3×3卷积是为了减轻最近邻近插值带来的混叠影响,因为最近邻插值让周围的元素都相同。

应用

文章将FPN方法做了两个应用尝试:一是应用在了RPN中进行边界框提议生成,二是应用在了Fast R-CNN中进行目标检测。
1.RPN中的FPN方法
原来的RPN网络是以主网络的某个卷积层输出的特征图作为输入,也就是只用了一个尺度的特征图。本文将FPN嵌在RPN网络中,生成不同尺度特征并融合作为RPN网络的输入,也就是用多尺度特征图代替了原来的单尺度特征图
在每一个scale层,都定义了不同大小的anchor,对于P2,P3,P4,P5,P6这些层,定义anchor的大小为322,642,1282,2562,5122,另外每个scale层都有3个长宽对比度:1:2,1:1,2:1。所以整个特征金字塔有15种anchor。
对正负样本的界定,如果某个anchor和给定的ground truth有最高的IOU或者和任意一个ground truth的IOU都大于0.7,则是正样本。如果一个anchor和任意一个ground truth的IOU都小于0.3,则为负样本。
进行改进后的结果如表所示:

从(a)(b)(c)的对比可以看出FPN的作用很明显。

(d)表示只有横向连接,而没有自顶向下的过程,也就是仅仅对自底向上(bottom-up)的每一层结果做一个1×1的横向连接和3×3的卷积得到最终的结果,这个方法有点像我们总体思路部分第一张图中的(c)所示方法(类似于SSD)。
(e)表示有自顶向下的过程,但是没有横向连接,即向下过程没有融合原来的特征。
(f)采用finest level层做预测,即经过多次特征上采样和融合到最后一步生成的特征用于预测,仅仅取融合后最下面一层的特征做了预测,也就是总体思路部分第二张图的上半部分所示的思路。

将(c)(d)(e)(f)对比更能发现FPN方法的优越性,FPN的三个关键步骤缺一不可,分级分别预测的思想也不能弃之不用。

2.Fast R-CNN中的FPN方法
Fast R-CNN是一个基于区域推荐的目标检测器,利用感兴趣区域(RoI)来提取特征。Fast R-CNN通常在单尺度特征映射上执行。要将其与我们的FPN一起使用,我们需要为金字塔等级分配不同尺度的RoI
作者通过通过以下公式将宽度为w和高度为h的RoI分配到特征金字塔的级别:

这里224是ImageNet预训练的大小,k0则是w×h=2242的RoI应该被映射到的目标级别,在原视单尺度Fast R-CNN中取4。从上述公式可以看出,如果RoI的尺寸(w×h)变小了(小于2242),那么k值就会比k0要小,该RoI就被映射到一个更精细的分辨率级别。
进行改进后的结果如表所示:

相比于baseline,FPN还是取得了一定程度的进步,说明FPN比单尺度检测更有效。
这里我们也发现FPN(表中(c))和finest level(表中(f))检测的效果差别不大,作者认为原因是ROI pooling对于region的尺度并不敏感。

总结

我们来看看FPN与COCO上排名靠前的算法的对比:

这个结果是很惊人的,因为作者强调这篇论文的方法并没有采用其他的提升方法(比如增加数据集、迭代回归、难例挖掘等等),仅靠一个原始的模型就达到了如此好的效果。

学习了这么多目标检测的方法,我们不难发现,目标检测的发展趋势一是从非实时到实时的发展,在这背后主要是对阶段的简化、对网络的改进,代表的作品有YOLO v1,SSD;二则是从单尺度检测到多尺度检测,也就是能跟好的检测小目标,这背后主要就是对多尺度特征的提取,代表作品如YOLO的改进、SSD、FPN等等。在发展的道路上,有的人开创新的思路(YOLO v1、SSD),有的人集百家之大成(YOLO v2和v3、FPN),但是他们都为后来者提供了宝贵的经验。

最后的最后我们再来简单总结一下FPN:
FPN复用卷积神经网络中各层输出的特征图,解决了多尺度目标检测的内存开销过大问题,通过自下而上、自顶向下、横向连接的方法构造特征金字塔,并对每一层级分别进行预测,提升了目标检测尤其是小目标检测的性能。

读论文(4)——FPN相关推荐

  1. 我的读论文经验总结!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:胡来,Datawhale成员 从入门到精通一个领域,绕不开文献阅读 ...

  2. 记录理解程度、一篇至少读3遍,吴恩达建议这样读论文!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale推荐 作者:Richmond Alake,来源:机器之心 在科研领域中,读论文 ...

  3. 沈向洋:读论文的三个层次

    Datawhale干货 来源:AI科技评论,沈向洋博士 作者 | 蒋宝尚 编辑  | 丛  末 5月14日,沈向洋博士在全球创新学院(GIX)课程上曾做了一场线上公开课<You are how ...

  4. 如何高效读论文?剑桥CS教授亲授“三遍论”:论文最多读三遍,有的放矢,步步深入...

    鱼羊 编译整理 量子位 报道 | 公众号 QbitAI 嗑盐之始,在于读论文. 一方面,把握最前沿的研究动态,激发自身研究灵感.另一方面,不做好文献调研,自己的绝妙想法变成了重复造轮子,这种体验可不太 ...

  5. 读论文七步走!CV老司机万字长文:一篇论文需要读4遍

      视学算法报道   编辑:LRS [新智元导读]读论文对于AI新手和工程师来说可能是一件比较难的事.最近一位从业超5年的CV老司机发布了一篇万字长文,讲述了读论文七步法,从找论文到总结,每篇论文由浅 ...

  6. 覆盖近2亿篇论文还免费!沈向洋旗下团队「读论文神器」登B站热搜

      视学算法报道   编辑:小咸鱼 好困 [新智元导读]无意中发现B站上有个叫ReadPaper的在线论文阅读笔记神器冲上了热榜!ReadPaper由沈向洋博士创办的IDEA旗下团队研发,其收录了近2 ...

  7. 记录理解程度、一篇至少读3遍,吴恩达建议这样读论文

    选自Medium 作者:Richmond Alake 机器之心编译 参与:杜伟.小舟.魔王 在科研领域中,读论文大概是大家的日常基本操作了.但如何读论文,才能实现效率最大化呢?斯坦福大学教授吴恩达在斯 ...

  8. 吴恩达教你如何读论文:绘制进度表格,论文至少看三遍,还要问自己问题

    来源:量子位 本文约1478字,建议阅读4分钟. 本文介绍如何研究一篇论文. 吴恩达教你如何读论文,高效了解新领域. 就算是博士,也很难对所有的关键技术都参透了解.那么如何有效了解一个新领域,是研究者 ...

  9. 吴恩达教你读论文:持续而缓慢的学习,才是正道

    来源:AI科技评论 本文约1800字,建议阅读5分钟. 本文将教你如何有效阅读论文,包括系统阅读论文集的方法,以及阅读单篇论文的方法. 在人工智能和机器学习领域中,了解前沿学者的最新研究的能力是每位严 ...

  10. 如何学会读论文?送你滑铁卢大学S. Keshav的三轮阅读法

    来源:专知 本文约3100字,建议阅读6分钟 本文为你介绍三轮阅读法,教你如何高效读论文. [ 导读 ] 读论文是从事科学研究与工程等必不可少环节,但是如何高效读论文却有一番讲究.滑铁卢大学S. Ke ...

最新文章

  1. Apache Spark源码走读之6 -- 存储子系统分析
  2. 并发基础知识 — 线程安全性
  3. 【uniapp】 class表达式
  4. matlab指定间隔符,在matlab中为.dat文件指定小数分隔符[复制]
  5. 201506230818_《JavaScript权威指南(第六版)——callee和caller、对象属性用作实参、自定义函数属性》(P175-180)...
  6. 在ie6下remove包含iframe的table所在的容器,会导致页面控件的焦点诡异丢失。
  7. python OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized
  8. 话唠黄金机器人_用了接吻教学机器人以后......哈哈哈哈不能我一个人瞎!
  9. docker容器启动与停止命令
  10. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_5_同步技术的原理...
  11. sublime text3 炫酷主题
  12. 【渝粤题库】国家开放大学2021春4990电子商务概论(农)题目
  13. 静态库和动态库的区别
  14. Makefile中的CFLAGS、$^、$< 、$@
  15. 读书笔记-数据库系统概念-chapter3SQL
  16. airtest常用按键
  17. 外显子和基因组基本概念(二)
  18. 安装php详细步骤,PHP开发:安装PHP详细步骤
  19. 我的人工智能之旅——偏斜类问题
  20. ACdream1735 输油管道

热门文章

  1. Java_笛卡尔积计算
  2. 人工智能于交通系统而言
  3. 论文阅读——TR-GAN: Topology Ranking GAN with Triplet Loss for Retinal Artery/Vein Classification
  4. 苹果appstore新推出了抽成收益降到15%的计划,正在申请中...
  5. win10系统如何看服务器地址,win10查看电脑DNS服务器地址具体步骤
  6. 史上最猛“员工”,疯狂吐槽亿万富翁老板小扎:那么有钱,还总穿着同样的衣服!...
  7. 3小时做完3天工作,她是用了什么办法做到的?
  8. 怎么使用漫画脸制作软件
  9. 洛谷P1149(NOIP2008) 火柴棒等式 (C语言 + 详细注释)
  10. 我能使用这台计算机吗英语,使用电脑的英语怎么说