介绍

ROI(Region of Interest) Pooling是Pooling的一种。在传统CNN中,Pooling层的作用主要有三个:
1、特征不变性,使模型更加关注是否存在某些特征而不是特征具体的位置,对于一些旋转和平移具有不变性
2、特征降维,使模型可以抽取更广泛围的特征,减小了下一层输入大小,进而减小计算量和参数个数
3、在一定程度防止过拟合,更方便优化

ROI Pooling是针对RoIs的Pooling,其特点是输入特征图尺寸不固定,但是输出特征图尺寸固定。
在Fast RCNN中, RoI是指Selective Search完成后得到的“候选框”在特征图上的映射
在Faster RCNN中,候选框是经过RPN产生的,然后再把各个“候选框”映射到特征图上,得到RoIs

ROI Pooling的思想来自于SPPNet中的Spatial Pyramid Pooling,在Fast RCNN中使用时,将SPPNet中多尺度的池化简化了为单尺度。

SPP(Spatial Pyramid Pooling)

在介绍ROI Pooling之前,先简单介绍一下SPP的过程,两者的目的都是将不同大小的窗口输入得到同样大小的窗口输出。
在卷积的操作中,对输入的尺寸是没有限制的,但是大多数网络结构的卷积操作后会连着全连接层,因此网络的输入也就有了限制,不然最后一层卷积的输出尺寸无法对应全连接层的输入。当输入图片不满足限制的尺寸时,需要进行裁剪(crop)和拉伸(warp),如下图:

这样做总是不好的:图像的纵横比(ratio aspect) 和输入图像的尺寸是被改变的。这样就会扭曲原始的图像。而Kaiming He在这里提出了一个SPP(Spatial Pyramid Pooling)层能很好的解决这样的问题, 根据之前分析,SPP只需连接在最后一层卷积层,以便满足全连接层的输入尺寸,与之前结构对比如下:

SPP的显著特点是:

  1. 不管输入尺寸大小,SPP 可以产生固定尺寸的输出
  2. 使用多个不同大小的pooling窗口
  3. SPP 可以使用同一图像不同尺寸(scale)作为输入, 得到同样长度的池化特征。

因此,SPP带来的好处有:
可以处理不同纵横比和不同尺寸的输入图片,所以提高了图像的尺度不变(scale-invariance)、降低了过拟合
实验表明训练图像尺寸的多样性比单一尺寸的训练图像更容易使得网络收敛(convergence)
SPP 对于特定的CNN网络设计和结构是独立的。(也就是说,只要把SPP放在最后一层卷积层后面,对网络的结构是没有影响的, 它只是替换了原来的pooling层)

空间金字塔池化(spatial pyramid pooling)的原理并不复杂,其网络结构如下图:

假设输入feature map的尺寸为H x W x C,使用一个H x W尺寸的pooling层进行处理,那么每一个通道C变成了一个值,整个输入得到了一个C维的输出;再分别用H/2 x W/2和H/4 x W/4尺寸的pooling层处理,得到了4xC和16xC维的输出,把三个结果concat在一起变成了一个21xC维的输出,其大小和输入的H与W无关。

简而言之,是将任意尺寸的feature map用三个尺度的金字塔层分别池化,再将池化后的结果拼接得到固定长度的特征向量(图中的256为filter的个数),送入全连接层进行后续操作。

ROI Pooling

在RCNN的结构中,候选框通过Selective Search的方法获得,每一个框经过缩放分别送入网络中提取特征,因此非常消耗时间,Fast RCNN借鉴了SPP的思想,通过ROI Pooling的结构解决了这个问题。


通过上图RCNN与Fast RCNN的结构对比,可以看到在Fast RCNN中只需要把原始图片送入网络提取一次特征即可,通过感受野的对应关系,把不同大小的候选框直接映射到最后一层卷积输出的feature map上,而ROI Pooling的作用就是把feature map上对应的不同大小的框,转换为相同大小作为下一层全连接的输入。

ROI Pooling的输入:
网络最后一个卷积层的输出feature map,shape 为(N, W/16, H/16, channels),除以16是因为使用VGG16的话,会经历四次 2 x 2 的 max poolinig,尺寸相比于图片原始W和H缩小了16倍
ROI(Region of Interest)的坐标,一个N x 5的矩阵,其中N表示ROI的数目。第一列表示图像index,其余四列表示每个矩形框的左上角和右下角坐标(在原图而不是feature map上的坐标值);

ROI Pooling的具体操作:
得到最后一个卷积层的输出feature map
根据feature map与原图的比例,将ROI映射到feature map对应位置上(图片的尺寸已经下降了16 倍,那么输入的 ROI 也会相应的就行缩小16倍,在代码中 spatio_scale=1/16);
将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);
对每个sections进行max pooling操作;

ROI Pooling的输出:
不同ROI对应的相同尺寸的特征向量,shape为(num_ROIs, expected_H, expected_W, channels) ,论文中提到如果使用 VGG-16 的话,expected_H=expected_W=7

ROI Pooling实例:
我们有一个8x8大小的feature map,一个ROI,以及输出大小为2x2.

  1. 输入固定大小的feature map
  2. region proposal 投影之后位置(左上角,右下角坐标):(0,3),(7,8)。
  3. 将其划分为(2x2)个sections(指定输出的大小为2x2),可以得到:
  4. 对每个section做max pooling,可以得到:

    完整过程如下:

    如上实例中显示了对一个ROI的处理过程,对于不同大小的ROI,该方法处理可以得到相同尺寸(2 x 2)的输出,在此案例中region proposals 是5 x 7大小的,在pooling之后需要得到2 x 2的,所以在5 x 7的特征图划分成2 x 2的时候不是等分的,行是5/2,第一行得到2,剩下的那一行是3,列是7/2,第一列得到3,剩下那一列是4。

ROI Pooling 与 SPP 的区别:
通过上面的介绍,可以看到两者起到的作用是相同的,把不同尺寸的特征输入转化为相同尺寸的特征输出。SPP针对同一个输入使用了多个不同尺寸的池化操作,把不同尺度的结果拼接作为输出;而ROI Pooling可看作单尺度的SPP,对于一个输入只进行一次池化操作。

Fast RCNN对RCNN的改进:
ROI Pooling的加入,使得Fast RCNN相比于RCNN在两个方面有了较大的改善:
1、由于ROI Pooling可接受任意尺寸的输入,warp操作不再需要,这有效避免了物体的形变扭曲,保证了特征信息的真实性
2、不需要对每个proposal都提取特征,采用映射方式从整张图片的feature map上获取ROI feature区域

除了上述两点,从之前给出的结构图的对比也可以看出还有一个比较明显的改进:
3、RCNN中在获取到最终的特征后先采用SVM进行类别判断,再进行bounding-box的回归得到位置信息。整个过程是个串行的流程,这极大地影响了网络的检测速度。Fast R-CNN中则将Classification和Regression的任务合二为一,变成一个multi-task的模型,实现了特征的共享也进一步提升了速度。

fasterrcnn中ROI Pooling 与 SPP 理解相关推荐

  1. ROI Pooling 与 SPP 理解

    介绍 ROI(Region of Interest) Pooling是Pooling的一种.在传统CNN中,Pooling层的作用主要有三个: 1.特征不变性,使模型更加关注是否存在某些特征而不是特征 ...

  2. Faster R-CNN源码中ROI Pooling的解析

    如图可以看出来ROI Pooling使用RPN产生的Proposal和fearture map,ROIpooling其实使用的是feature map中的Proposal,如下图也可以看出来.Prop ...

  3. faster-rcnn中添加Mask中的RoiAlign层,使回归框更精确( roi_align_layer.cu:240] Check failed: error == cudaSuccess *)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/e01528/article/details/80265118 具体的操作为什么这样做,可参照: 1. ...

  4. 【目标检测】概念理解:region proposal、bounding box、anchor box、ground truth、IoU、NMS、RoI Pooling

    最近刚接触图像识别,理解一些概念十分困难,尤其是动不动就冒出个看不懂的英语,让人抓狂.查了不少资料后做一个总结并加上一些自己的理解,理解若有误,烦请大家指出,相互学习. 本文主要对region pro ...

  5. Faster-RCNN(一)之ROI Pooling层

    Faster-RCNN可看作是在Fast-RCNN的基础上,加了RPN层.其网络结构如下图所示(图片源于网络 https://www.cnblogs.com/zyly/p/9247863.html): ...

  6. Faster-rcnn中Anchor的理解

    文章目录 1,Anchor是如何生成的? 1.1 特征图如何得到 Anchor的生成过程 2,Anchor的作用是什么? 1,Anchor是如何生成的? 1.1 特征图如何得到 假设对于网络输入的图像 ...

  7. 目标检测算法中ROI提取方法比较+源码分析

    本文主要介绍ROI提取结构在目标检测框架中的作用,并结合源码,理解它的实现方式.包含的算法有:ROI-pooling,ROI-align,Deformable-psroi-pooling. 目前,主流 ...

  8. RoI Pooling 与 RoI Align 有什么区别?

    ↑ 点击蓝字 关注视学算法 作者丨AlexChung@知乎 来源丨https://zhuanlan.zhihu.com/p/161540817 编辑丨极市平台 基本概念 RoI RoI(Region ...

  9. ROI Pooling层解析

    ROI Pooling的意义 ROIs Pooling顾名思义,是Pooling层的一种,而且是针对RoIs的Pooling,他的特点是输入特征图尺寸不固定,但是输出特征图尺寸固定: 什么是ROI呢? ...

最新文章

  1. mysql怎么测试事物_mysql事务简单测试
  2. 关于android的4.2的0文件夹的详解
  3. 【区块链基础知识系列】 第9课 一文诠释什么是DAG
  4. 解决rtl8723be网卡故障
  5. 从《黎明杀机》看非对称对抗游戏的魅力
  6. .NET Core中Object Pool的简单使用
  7. 获取内存_如何获取一个进程所占用的内存
  8. [HTML]HTML5实现可编辑表格
  9. Android类参考---Fragment(五)
  10. DSP之时钟与定时器之四看门狗定时器
  11. 某些面向对象的思想--一步步更新
  12. 联网JAVA模拟器_java模拟器
  13. KMeans原理和密度聚类
  14. 【千月二开美化版】畅视福利影院APP源码+畅视影视源码+对接苹果CMS【已测试】
  15. VAX 过期重新安装办法。
  16. 【STM32H7】第30章 ThreadX GUIX炫酷实用的时钟表盘设计,结合硬件RTC实时时钟
  17. arch模型 matlab,ARCH模型(arch模型干嘛的)
  18. android adb 抓取log
  19. 学习笔记(1):零基础掌握 Python 入门到实战-用Python操作SQLite数据库
  20. php手游服务端开发教程,【手游服务端】梦想海贼王 卡牌系列一键端服务端游戏源码+教程...

热门文章

  1. Jmeter接口压力测试(先登录再测接口)
  2. Symentec赛门铁克企业型SSL证书好不好
  3. 四维地球2.0上线,中国四维遥感云平台布局初见端倪
  4. ubuntu16 安装文本对比软件
  5. transformers的beam_search
  6. 白鹭安装node_Mac OS X 系统下安装和部署Egret引擎开发环境
  7. OC代码转Swift代码
  8. Jquery动画2.0
  9. Eclipse SVN文件对比详解
  10. Python网络爬虫数据采集实战(八):Scrapy框架爬取QQ音乐存入MongoDB