Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >笔记分享 : 一文读懂3个概念 : RoI, RoI pooling, RoI Align

笔记分享 : 一文读懂3个概念 : RoI, RoI pooling, RoI Align

作者头像
唐国梁Tommy
发布于 2021-05-28 09:01:54
发布于 2021-05-28 09:01:54
17.6K2
举报
文章被收录于专栏:唐国梁Tommy唐国梁Tommy

哈喽,大家好,今天我们一起学习一下三个重要的概念:RoI,RoI pooling 和 RoI Align

相信学习CV(Computer Vision)的同学对此并不陌生,完全理解这三个概念有助于我们掌握深度学习目标检测与识别算法:RCNN系列(RCNN, SPPNet,fast RCNN,faster RCNN,Mask RCNN)。

接下来,我们一起开启“RoI探险之旅” :

第一部分:RoI

1. 上帝之问:RoI是个什么鬼??

英文全称是: Region of Interest (感兴趣区域),RoI是针对原始图片的提议区域(proposed region)。

【注意:后续长文中有很多专业性术语,希望各位同学提前做好心理准备。如果暂时不理解这些词,也没有关系,后续很多文章、案例、视频课程中,我都会反复提及。相信终有一天,你会完全理解这些术语。】

这里我举个栗子,比如下图中的这些矩形框(bounding box)就是RoI。可以理解为从这张图片中,模型寻找自己感兴趣的区域。

图-01

RoI pooling在fast RCNN算法中得到应用,由于该算法用一个卷积网络对原图进行feature extraction,因而共享feature map。我们看一下图示:

图-02

输入的size是: 512 x 512 x 3 (width x height x RGB),经过VGG16进行特征提取后,得到16x16x512的feature map。

这个feature map的宽和高分别是16和16,正好是输入图像512x512缩小了32倍。512 / 32 = 16,所以这里的缩小因子factor=32。记住这个值,后续所有的RoI在缩小时,都需要除以32,得到缩小后的尺寸。

【注意:不同的案例,feature map和factor的大小都不同,我们这里只是举例说明。】

2. 那如何从feature map上获取RoI呢?

将原图上的RoI映射到VGG16输出的feature map上即可,如图-03所示

每一个feature map上的RoI都有其原始RoI的坐标和尺寸,如图-04所示:

图上的红框尺寸是: 145 x 200,高=145,宽=200,左上角的坐标值=(192, 296)。

之前给各位同学提到过缩放因子factor=32,那么,这些原图上的RoI映射到feature map上,其尺寸需要缩小32倍,左上角坐标值需要缩小32倍。即:

width : 200 / 32 = 6.25 , height : 145 / 32 ~= 4.53 (宽和高)

x : 296 / 32 = 9.25 , y : 192 / 32 = 6 (左上角坐标)

我们来看一下最终的结果图,如图-05所示:

3. 在feature map上的坐标值量化(quantization of coordinates)

首先,我们需要理解“量化”的概念,量化是一个将输入从一个大的值集(如实数)限制为离散的值集(如整数)的过程。(定义有些烧脑,待会儿我们看栗子就能理解)

天之问:为啥需要量化呢?

我们再看一下feature map上的这个RoI,如图-06所示:

有没有发现一个问题?我们不能够直接在这个RoI上应用RoI pooling 操作,观察一下这个图,有些cell并没有与网格线对齐,要么多了一点,要么少了一点。解决措施就是用量化操作,说白了,就是向下取整,例如:9.25改为9,4.53改为4.

如图-07所示,量化后的RoI :

观察一下上图,深蓝色区域为丢弃的区域,左边的红色区域为新增的区域。我们再看一下量化后的RoI完整的示意图(绿色部分即为新的RoI区域),如图-08所示:

第二部分:RoI pooling

当我们将原图上的RoI映射到feature map上之后,我们可以应用pooling。其实,这里也有一个问题:为什么要用RoI pooling ?

因为在RoI pooling层之后,有固定尺寸的全连接层(Fully Connected Layer)。由于成百上千的RoI有不同的尺寸,因而需要将它们pooling到相同的尺寸,例如:3x3x512。

我们刚刚计算了量化后的RoI,尺寸=4x6x512,512是通道数量。这里的4无法被3整除,因此,需要再次量化(说白了,就是去掉小数点)。

我们分别计算一下:4 / 3 ~= 1.33 , 6 / 3 = 2 , 向下取整后,得到 1 x 2 的向量表示。如图-09所示:

观察一下上图,量化之后,左图的最后一行数据就被丢弃了。如图-10所示:

最后一行蓝色部分数据全部丢失了。

接下来,我们看一下整个操作过程的动态图演示,图-11所示:

【注意:每两个数值,选取其中最大值作为最终值】

整个RoI pooling层的输出如图-12所示:

【注意:同样的操作会作用到原始图片上的每个RoI,因此,最后会输出成百上千个3x3x512的矩阵】

每一个RoI matrix都会被输入进FC层,然后,模型会分别生成bbox和calss。

总结:RoI pooling最大的问题就是操作会导致数据丢失,影响整个模型分类和定位的准确性,解决方式就是引入了RoI Align。

第三部分:RoI Align

1. 什么是RoI Align ?

RoI Align 首先在mask RCNN中引入,后续我会详细讲解该篇论文,今天我们聚焦于RoI Align。

如图-13所示:

RoI Align 解决了 RoI pooling中的数据丢失问题,这里使得数据能够保全,没有丢失。它们之间的区别在于量化,RoI Align在data pooling中没有使用量化。

2. RoI Align 原理

① 首先将feature map上的RoI切分成9个相等尺寸的boxes,如图-14所示:

box的宽:4.53 / 3 = 1.51

box的高:6.25 / 3 = 2.08

你可以会疑惑,为什么要除以3?这是个好问题!其实,这个3主要根据你的pooling层的size有关。例如,你的pooling layer size

为3x3,那么,这里就是4.53/3 和 6.25/3。也就是说:每个box的size都取决于feature map上的RoI的大小和pooling层的大小。

如图-15所示,我们将RoI切分为9个boxes:

观察一下图中最左上角的box,它包含6个cell,如图-16所示:

下一步,我们需要从box中提取值,输入到pooling层。在这之前,需要进行数据采样。首先,需要在box中创建4个采样点,如图-17所示:

观察一下这张图,左上角中box里的4个采样点,分别是:(9.94, 6.50), (10.64, 6.50), (9.94, 7.01), (10.64, 7.01)

那么,这些点的值怎么计算出来的呢?

我们先看一下图-18,左上角起点的坐标是:(9.25, 6),即:x=9.25, y=6,每一个网格的width=2.08,height=1.51

接下来,我们分别计算网格中的四个坐标点的值,顺序是先第一列的2个点,然后再计算第二列的2个点。

第一个点的坐标计算:

X1 : 9.25 + (2.08 / 3) ~= 9.94

Y1 : 6 + ( 1.51 / 3) ~= 6.50

第二个点的坐标计算:

X2 : 9.25 + (2.08 / 3) ~= 9.94

Y2 : 6 + ( 1.51 / 3) * 2 ~= 7.01

第三个点的坐标计算:

X3 : 9.25 + (2.08 /3) * 2 ~= 10.64

Y3 : 6 + ( 1.51 / 3) ~= 6.50

第四个点的坐标计算:

X4 : 9.25 + (2.08 /3) * 2 ~= 10.64

Y4 : 6 + ( 1.51 / 3) * 2 ~= 7.01

② 计算完4个点坐标之后,我们将利用双线性差值公式计算差值,我们不需要知道这个公式怎么来的,随时网上找这个公式即可。公式如图-19所示:

根据这个公式,我们先计算第一个点的双线性差值,如图-20所示:

第一个点的双线性差值为:0.14

按照同样的方式计算出第二个点的差值,如图-21所示:

第二个点的双线性差值为:0.21

按照同样的方式计算出第三个点的差值,如图-22所示:

第三个点的双线性差值为:0.51

按照同样的方式计算出第四个点的差值,如图-23所示:

第四个点的双线性差值为:0.43

计算完一个网格中四个双线性插值后,可以利用max pooling获取四个值中的最大值当做最终值。如图-24所示:

下面的动态图演示了通过max pooling获取每个网格中的最大值,如图-25所示:

同样的计算方法会应用到所有层(512层),如图-26所示:

RoI Align 与 RoI Pooling的区别在于前者在计算过程中会用到所有数据,而后者则会丢失数据。如图-27所示:

我们对比一下这两者的性能的区别:如图-28所示:

总结来看,RoIAlign在precision上带来了更大的性能提升。

本篇学习笔记主要参考文章:

https://towardsdatascience.com/understanding-region-of-interest-part-2-roi-align-and-roi-warp-f795196fc193

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 唐国梁Tommy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
2 条评论
热度
最新
写的真不错,看懂了,点个赞,之前一直困惑roialign怎么取浮点数坐标范围内的点的,原来是1.确定浮点数坐标的范围,2.确定被分割成几分,resnet50最后是7x7,3.分成7x7分,在每份的小格子里安装采样点(一般2x2,四个采样点由周边的四个已知点的数值,双线性采样得到),3.最后按照到maxpool取四个值里的最大值。
写的真不错,看懂了,点个赞,之前一直困惑roialign怎么取浮点数坐标范围内的点的,原来是1.确定浮点数坐标的范围,2.确定被分割成几分,resnet50最后是7x7,3.分成7x7分,在每份的小格子里安装采样点(一般2x2,四个采样点由周边的四个已知点的数值,双线性采样得到),3.最后按照到maxpool取四个值里的最大值。
回复回复1举报
写的太太太太太好了!!!!!!!!!!写的好清楚啊唐老师,为了给你评论特意注册一个账号。写的真的很好很好!!!!!!!!!!!向您学习
写的太太太太太好了!!!!!!!!!!写的好清楚啊唐老师,为了给你评论特意注册一个账号。写的真的很好很好!!!!!!!!!!!向您学习
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
如何使用MaskRCNN模型进行图像实体分割
目标检测是计算机视觉和模式识别的重要研究方向,主要是确定图像中是否有感兴趣的目标存在,并对其进行探测和精确定位。传统的目标检测流程采用滑动窗口进行区域选择,然后采用 SIFT、HOG 等方法进行特征提取,最后采用 SVM、Adaboost 进行类别判断。但是传统的目标检测方法面临的主要问题有:特征提取鲁棒性差,不能反应光照变化、背景多样等情况;区域选择没有针对性,时间复杂度高,窗口冗余。基于深度学习的目标检测模型有 Faster RCNN,Yolo 和 Yolo2,SSD 等,对图片中的物体进行目标检测的应用示例如下所示:
啦啦啦
2018/11/20
3K0
如何使用MaskRCNN模型进行图像实体分割
faster-RCNN原理及相应概念解释
(2)利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal;
机器学习AI算法工程
2019/10/29
9750
faster-RCNN原理及相应概念解释
一文读懂 RoIPooling、RoIAlign 和 RoIWarp
1 导读 本文详细讲解了 RoIPooling 、RoIAlign 和 RoIWarp ,用非常的图来帮助理解,相信通过本文阅读能让你对这三者有更加深刻的理解 如果对你有所帮助请点个在看、点或分享,鼓励一下小编
AI算法与图像处理
2020/08/28
5.9K0
一文读懂 RoIPooling、RoIAlign 和 RoIWarp
Mask-RCNN最详细解读
最近在做一个目标检测项目,用到了Mask RCNN。我仅仅用了50张训练照片,训练了1000步之后进行测试,发现效果好得令人称奇。就这个任务,很久之前用yolo v1训练则很难收敛。不过把它们拿来比当然不公平,但我更想说的是,mask RCNN效果真的很好。
小草AI
2019/06/02
10.4K1
R-FCN、Mask RCNN、YoLo、SSD、FPN、RetinaNet…你都掌握了吗?一文总结目标识别必备经典模型(二)
 机器之心专栏 本专栏由机器之心SOTA!模型资源站出品,每周日于机器之心公众号持续更新。 本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。 本文将分 3 期进行连载,共介绍 17 个在目标检测任务上曾取得 SOTA 的经典模型。 第 1 期:R-CNN、SPP-Net、Fast R-CNN、Faster R-C
机器之心
2023/03/29
1.2K0
R-FCN、Mask RCNN、YoLo、SSD、FPN、RetinaNet…你都掌握了吗?一文总结目标识别必备经典模型(二)
深度学习500问——Chapter08:目标检测(2)
ResNet-101 + R-FCN:83.6% in PASCAL VOC 2007 test datasets
JOYCE_Leo16
2024/04/25
1170
深度学习500问——Chapter08:目标检测(2)
实例分割–Mask RCNN详解(ROI Align / Loss Fun)
实例分割是一种在像素层面识别目标轮廓的任务,相比其他相关任务,实例分割是较难解决的计算机视觉任务之一:
全栈程序员站长
2022/09/23
2.4K0
RoiPooling, RoiAlign 和 RoIWarp
**RoI(Region of Interest)**是从原始图像或特征中提取的区域。
为为为什么
2022/09/22
4600
RoiPooling, RoiAlign 和 RoIWarp
笔记分享 : Mask RCNN,何凯明大神的经典论文之一
哈喽,大家好,今天我们一起来研读一篇CV(计算机视觉)领域的重量级论文《Mask RCNN》,这篇论文由大神RGB和何凯明于2018年发表。距今已有3年之久,虽然CV领域的技术日新月异,但是,这篇论文中的很多创新之处仍然是后续理论发展的基石,我们有必要阅读、理解、掌握。
唐国梁Tommy
2021/05/28
2.9K0
笔记分享 : Mask RCNN,何凯明大神的经典论文之一
RoI Pooling 与 RoI Align 有什么区别?
RoI(Region of Interest)是通过不同区域选择方法,从原始图像(original image)得到的候选区域(proposal region)。
小白学视觉
2022/02/14
9350
RoI Pooling 与 RoI Align 有什么区别?
一文读懂目标检测中的anchor free 和anchor base
作者丨龙场悟道 来源丨知乎https://zhuanlan.zhihu.com/p/273646465 编辑丨AiCharm
AiCharm
2023/06/07
8.9K0
一文读懂目标检测中的anchor free 和anchor base
RoI Pooling与RoIWrap Pooling与RoIAlign Pooling与Precise RoI Pooling
文章标题给出了四种Pooling的方法,这feature pooling方法是我在看论文的时候看到的,从最开的PoI Pooling到目前最新的Precise RoI Pooling由Pooling操作带来的检测精度影响越来越小。这篇文章目的是想梳理一下它们之间的区别与联系。
狼啸风云
2021/02/04
1.1K0
RoI Pooling与RoIWrap Pooling与RoIAlign Pooling与Precise RoI Pooling
ROI操作:ROIPooling和ROIAlign
目标:为了使得检测网络可以输入任意size的图片,使用ROIPooling在网络中某一个阶段将不同尺度的图片ROI pooling成相同的尺度,使得fc的存在也无法写死输入图片的size。
AI深度学习求索
2018/12/11
4.3K0
[Extensive Reading]目标检测(object detection)系列(十五) Mask R-CNN:检测与分割结合
Mask R-CNN 是在2017年提出,是FAIR团队的Kaiming大神和RBG大神的强强联手之作。paper的名字非常简洁,就叫Mask R-CNN,R-CNN系列确实可以独树一帜。 Mask R-CNN无论是在方法创新上还是工程实现上,都非常具有影响力,首先是ICCV2017的best paper,其次FAIR团队的maskrcnn-benchmark项目也被很多人使用和改进,并作为其它工作的codebase model,现在,一方面由于maskrcnn-benchmark不再更新,以及detectron2和mm-detection的出现,maskrcnn-benchmark的被使用程度才逐渐下滑。
chaibubble
2021/07/19
5470
[Extensive Reading]目标检测(object detection)系列(十五) Mask R-CNN:检测与分割结合
最全综述 | 图像目标检测
图片分类任务我们已经熟悉了,就是算法对其中的对象进行分类。而今天我们要了解构建神经网络的另一个问题,即目标检测问题。这意味着,我们不仅要用算法判断图片中是不是一辆汽车, 还要在图片中标记出它的位置, 用边框或红色方框把汽车圈起来, 这就是目标检测问题。其中“定位”的意思是判断汽车在图片中的具体位置。
AI算法与图像处理
2019/07/11
1.3K0
最全综述 | 图像目标检测
目标检测(Object Detection)-Faster RCNN中的ROI Pooling Layer
ROI(Region Of Interest)是从目标图像中识别出的候选识别区域。在Faster RCNN中,候选识别区域(ROIs)是把从RPN(Region Proposal Network)产生的候选识别框映射到Feature Map上得到的。 ROI Pooling的作用就是把大小形状各不相同的候选识别区域归一化为固定尺寸的目标识别区域。
YoungTimes
2022/04/28
1.5K0
目标检测(Object Detection)-Faster RCNN中的ROI Pooling Layer
一文读懂Faster RCNN
来源:信息网络工程研究中心 本文约7500字,建议阅读10+分钟 本文从四个切入点为你介绍Faster R-CNN网络。 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方
数据派THU
2023/03/29
1K0
一文读懂Faster RCNN
ECCV 2018 目标检测 | IoU-Net:将IoU的作用发挥到极致
论文: Acquisition of Localization Confidence for Accurate Object Detection
VincentLee
2020/01/24
9540
ECCV 2018 目标检测 | IoU-Net:将IoU的作用发挥到极致
Mask-RCNN论文解读
Mask R-CNN是基于Faster R-CNN的基于上演进改良而来,FasterR-CNN并不是为了输入输出之间进行像素对齐的目标而设计的,为了弥补这个不足,我们提出了一个简洁非量化的层,名叫RoIAlign,RoIAlign可以保留大致的空间位置,除了这个改进之外,RoIAlign还有一个重大的影响:那就是它能够相对提高10%到50%的掩码精确度(Mask Accuracy),这种改进可以在更严格的定位度量指标下得到更好的度量结果。第二,我们发现分割掩码和类别预测很重要:为此,我们为每个类别分别预测了一个二元掩码。基于以上的改进,我们最后的模型Mask R-CNN的表现超过了之前所有COCO实例分割任务的单个模型,本模型可以在GPU的框架上以200ms的速度运行,在COCO的8-GPU机器上训练需要1到2天的时间。
小白学视觉
2022/02/14
6000
Mask-RCNN论文解读
深度学习Pytorch检测实战 - Notes - 第4章 两阶经典检测器:Faster RCNN
RCNN全称为Regions with CNN Features,是将深度学习应用到物体检测领域的经典之作,并凭借卷积网络出色的特征提取能力,大幅度提升了物体检测的效果。而随后基于RCNN的Fast RCNN及Faster RCNN将物体检测问题进一步优化,在实现方式、速度、精度上均有了大幅度提升。
肉松
2020/07/27
1.1K0
深度学习Pytorch检测实战 - Notes - 第4章 两阶经典检测器:Faster RCNN
推荐阅读
相关推荐
如何使用MaskRCNN模型进行图像实体分割
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档