1. 论文简介

论文名:Feature Pyramid Networks for Object Detection

论文地址 :FPN

论文作者:Tsung-Yi Lin, Piotr Dollar, Ross Girshick, Kaiming He, Bharath Hariharan, and Serge Belongie

论文时间:2016年CVPR

说明:FPN可以实现端到端训练;使得模型精度更高;且不增加推理时间。使用了FPN结构的Faster R-CNN在COCO数据集上,mAP提升了2.3个点;在Pascal VOC数据集上,mAP提升了3.8个点。

2.特征图不同的使用方式

卷积网络中,随着网络深度的增加,特征图的尺寸越来越小,语义信息也越来越抽象。浅层特征图的语义信息较少,目标位置相对比较准确,深层特征图的语义信息比较丰富,目标位置则比较粗略,导致小物体容易检测不到。FPN的功能可以说是融合了浅层到深层的特征图 ,从而充分利用各个层次的特征。

(1)特征化图像金字塔 Featurized image pyramids

可以看到,这种方式先是对原始图像进行缩放,获得不同尺寸的图像,然后基于每种尺寸的图像生成不同尺寸的特征图,最后基于多尺寸特征图进行预测。

这种方法需要针对每种尺寸的图片生成特征图,会消耗较多的计算和内存资源,端到端训练几乎不可能实现,所以基本上就用在推理阶段且推理速度较慢。

(2)单一特征图 Single feature map

大家比较熟悉的方式,也就是使用最上层的特征图来进行预测。这种方法难以有效利用浅层特征,小尺寸目标的检测比较困难。

(3)特征图金字塔

我们知道,卷积神经网络天然就会生成不同层次不同分辨率大小的特征图,那就可以直接将这些特征图当作是金字塔状的特征层结构来使用,与第一种方式类似。不过这种方法是在每种特征图上进行预测,因此对于特征图的利用仍然比较单一,难以融合不同层次特征图中的语义信息。

典型的如SSD。

(4)特征金字塔网络 Feature Pyramid Network

特征图金字塔网络,也就是作者在论文中提出的结构。

原文中有一句话总结的特别好:

​也就是:自顶向下地处理特征图并通过横向连接的方式融合底层的具有较少语义信息的特征图和高层的具有丰富语义信息的特征图,同时没有牺牲表达能力、速度和资源的消耗。

3.FPN构建过程

3.1 Bottom-up pathway:自底向上构建不同尺寸的特征图。

也就是通过卷积神经网络的前向传播来得到不同尺寸的特征图从而构建特征图金字塔架构,这些特征图之间的大小是2倍关系。

作者在论文中提出,通常情况下,我们把那些产生同样大小的特征图的层归属到一个stage,因此,每个stage的最后一层输出的特征图才会被用作构建特征图金字塔。

​例如,对于ResNet网络来说,会采用每个stage的最后一个residual block输出的特征图,也就是conv2、conv3、conv4、conv5最后一个residual block输出的特征图,并且将它们定义为{C2, C3, C4, C5},它们相对于原始图片的stride是{4,8,16,32}。需要注意的一点是,考虑到内存原因,conv1的输出特征图并没有被使用。

后面会再画一个图可以看的更清楚一些。

3.2 Top-down pathway and lateral connections:自顶向下处理特征图和横向连接。

如上图所示,在得到{C2, C3, C4, C5}这些特征图之后,首先将C5进行1x1卷积将其channel的值变为256,然后进行2倍上采样(论文中提到为了简单起见采用最近邻插值的方法),此时得到的特征图的宽和高与C4是一样的,但是注意,C4的channel值和上采样得到的特征图的channel值是不一样大的,所以C4也会先进行1x1卷积将channel变为256,然后和该特征图逐元素相加。依次类推。所以特征得以不断融合。

总结来说就是,自顶向下,C5-C4-C3-C2依次进行横向的1x1卷积,再与上一层上采样的结果进行矩阵加法操作。论文中提到,C5-C4-C3-C2横向的1x1卷积不改变其宽高值,主要是将特征图的深度变为256,而且1x1的卷积不需要添加激活函数。

接下来,经过相加之后的多层特征图再分别经过3x3卷积得到最终的特征金字塔,分别为{P2, P3, P4, P5},最后分别基于{P2, P3, P4, P5}进行预测。

4. 一个实例:ResNet50+FPN

图中的P6后文会解释,此处可以忽略。

5. 引入FPN的RPN

一个小回忆:原先RPN部分,在经过backbone得到特征图之后,会接一个3x3的卷积,再并联两个1x1的卷积完成是否包含目标的binary分类和bounding box的回归,我们可以称之为network head(3x3 conv + two sibling 1x1 convs)。

也就是说,原先是在backbone最后输出的特征图上进行的。

那有了FPN结构之后,RPN会发生什么变化呢?其实不难理解。因为FPN会产生多层特征图:{P2, P3, P4, P5},那么在每一层后接上刚刚提到的network head就好了。

实际上,为了获得更大尺寸的Anchor,作者对P5进一步进行了简单的2倍下采样,得到P6,不过P6只在训练RPN的时候用到,后续训练Fast R-CNN的时候并没有被使用。

关于anchor box,作者指出,对于不同层的特征图来说,没有必要采用不同尺寸的anchor box,而是每一层只采用一种尺寸的anchor box即可。于是,{P2, P3, P4, P5, P6}这些层上的anchor box的面积分别为{ , , , , },而对于每种尺寸的anchor来说,会有三种高宽比:{1:2, 1:1, 2:1} ,所以!对于这样一种特征金字塔结构来说,一共会有15个不同样式的anchor box。

6. 引入FPN的Fast R-CNN

一个小回忆:在RPN生成region proposal之后,会将region proposal映射到特征图上,然后再进行ROI Pooling。

引入FPN之后,Fast R-CNN会发生什么变化呢?其实也不难理解。我们只需要将将这些region proposal映射到对应层的特征图上就好了。所以我们就可以把FPN看成是image pyramid。

对于在原图上宽为w高为h的region proposal来说,它的映射公式如下:

其中,

224:经典的ImageNet数据集预训练时的大小

:一个的region proposal映射后所在的层,Resnet-based Faster R-CNN中,=4

w和h:region proposal在原图上的宽和高

例如,对于一个112x112的region proposal来说,它应该被映射到P3进行后续的预测。

7. 补充

虽然FPN会生成多个特征层,但作者指出,不同的特征层会公用RPN和Fast R-CNN的head网络参数。也就是说,P2-P6的RPN权重共享,P2-P5的Fast R-CNN权重共享。

pytorch官方的映射代码:torchvision-ops-poolers.py

FPN:特征图金字塔网络相关推荐

  1. FPN(特征图金字塔网络)理论基础与具体实现

    论文地址:Feature Pyramid Networks for Object Detection 项目地址:FPN_pytorch 0x00 前言 我们在做目标检测和超分辨率重建等问题的时候,我们 ...

  2. 自组织特征图SOFM网络的实现

    这里直接给出Qt代码段和演示结果. 理论部分请移步另一位博主的 自组织特征图(SOFM)详解_datamonday的博客-CSDN博客_sofm算法 算法基于 Martin H. Hagan 的< ...

  3. FPN 特征金字塔网络

    FPN(feature pyramid networks) 特征金字塔是多尺度目标检测系统中的一个基本组成部分.近年来深度学习目标检测却有意回避这一技巧,部分原因是特征金字塔在计算量和用时上很敏感(一 ...

  4. 卷积神经网络特征图可视化及其意义

    文章目录 特征图可视化方法 1. tensor->numpy->plt.save 2. register_forward_pre_hook函数实现特征图获取 3. 反卷积可视化 特征图可视 ...

  5. 卷积神经网络的特征图可视化

    原图: Keras代码: from keras.models import Sequential from keras.layers.convolutional import Convolution2 ...

  6. 性能超FPN!北大、阿里等提多层特征金字塔网络

    作者 | Qijie Zhao等 编译 | 李杰 出品 | AI科技大本营(ID:rgznai100) 特征金字塔网络具有处理不同物体尺度变化的能力,因此被广泛应用到one-stage目标检测网络(如 ...

  7. 计算机视觉FPN: 特征金字塔网络

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx FPN:feature pyramid networks for object detecti ...

  8. 深度学习阅读导航 | 04 FPN:基于特征金字塔网络的目标检测

    写在前面:大家好!我是[AI 菌],一枚爱弹吉他的程序员.我热爱AI.热爱分享.热爱开源! 这博客是我对学习的一点总结与记录.如果您也对 深度学习.机器视觉.算法.Python.C++ 感兴趣,可以关 ...

  9. 关于FPN(特征金字塔网络)层间融合的理解

    FPN层间融合的个人理解 Feature Pyramid Networks for Object Detection 论文链接: https://arxiv.org/abs/1612.03144. 盗 ...

最新文章

  1. Jacoco的原理(各个覆盖率的解释)
  2. c++中空指针访问成员函数
  3. 亚洲食品市场挑战:了解亚洲新消费群体
  4. PAT 1085 PAT单位排行(25)(映射、集合训练)
  5. spring3.0注解定时任务配置及说明
  6. 图卷积网络-《深入浅出图神经网络》读书笔记
  7. mysql 主从延迟
  8. 网易云服务器上传文件,网易云音乐怎么把音乐上传到云盘 网易云音乐把音乐上传到云盘的步骤方法...
  9. 曲奇云盘资源搜索引擎_曲奇云盘下载-曲奇云盘资源共享群组下载_快啦网
  10. linux系统TongLinkQ安装部署手册
  11. 华为AC6605二层组网,配置无线漫游
  12. box-shadow单边阴影设置
  13. 计算方法(数值分析)实验:勒让德多项式求展开的三次平方逼近多项式代码实现 java
  14. C++写入并追加内容到txt中
  15. BUUCTF:[GKCTF2020]Harley Quinn
  16. 深圳市华宇讯科技有限公司(卖座网)打靶归来
  17. 来自北大算法课的Leetcode题解:43. 字符串相乘
  18. 【家庭财务管理系统】
  19. 七年级计算机硬件系统教案,七年级《认识计算机硬件》教案.doc
  20. WebService之WADL和WSDL ING

热门文章

  1. 《道俗即诗》- 夕梦叙
  2. jersey初学者资源
  3. Java学习笔记——实体类(ENTITY,VO,DTO,BO)
  4. 百度文库免费复制word文档的纯文字
  5. ElasticSearch RestHighLevelClient 教程(一)通用操作
  6. docker mysql修改配置文件
  7. EasyExcel的使用和数据字典应用
  8. Servlet | Servlet原理、开发第一个带有Java小程序Servlet
  9. C语言uthash使用指南
  10. Windows10虚拟机上的spark环境搭建