笔记分享 : 一文读懂3个概念 : RoI, RoI pooling, RoI Align | 您所在的位置:网站首页 › region中文意思是什么 › 笔记分享 : 一文读懂3个概念 : RoI, RoI pooling, RoI Align |
哈喽,大家好,今天我们一起学习一下三个重要的概念: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 |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |