ROI Align 是在Mask-RCNN这篇论文里提出的一种区域特征聚集方式, 很好地解决了ROI Pooling操作中两次量化造成的区域不匹配(mis-alignment)的问题。实验显示,在检测测任务中将 ROI Pooling 替换为 ROI Align 可以提升检测模型的准确性。

ROI Pooling 的局限性分析

在常见的两级检测框架(比如Fast-RCNN,Faster-RCNN,RFCN)中,ROI Pooling 的作用是根据预选框的位置坐标在特征图中将相应区域池化为固定尺寸的特征图,以便进行后续的分类和包围框回归操作。由于预选框的位置通常是由模型回归得到的,一般来讲是浮点数,而池化后的特征图要求尺寸固定。故ROI Pooling这一操作存在两次量化的过程。

将候选框边界量化为整数点坐标值。
将量化后的边界区域平均分割成 k x k 个单元(bin),对每一个单元的边界进行量化。
事实上,经过上述两次量化,此时的候选框已经和最开始回归出来的位置有一定的偏差,这个偏差会影响检测或者分割的准确度。在论文里,作者把它总结为“不匹配问题(misalignment)。

下面我们用直观的例子具体分析一下上述区域不匹配问题。如 图1 所示,这是一个Faster-RCNN检测框架。输入一张800 * 800的图片,图片上有一个665 * 665的包围框(框着一只狗)。图片经过主干网络提取特征后,特征图缩放步长(stride)为32。因此,图像和包围框的边长都是输入时的1/32。800正好可以被32整除变为25。但665除以32以后得到20.78,带有小数,于是ROI Pooling 直接将它量化成20。接下来需要把框内的特征池化7 * 7的大小,因此将上述包围框平均分割成7 * 7个矩形区域。显然,每个矩形区域的边长为2.86,又含有小数。于是ROI Pooling 再次把它量化到2。经过这两次量化,候选区域已经出现了较明显的偏差(如图中绿色部分所示)。更重要的是,该层特征图上0.1个像素的偏差,缩放到原图就是3.2个像素。那么0.8的偏差,在原图上就是接近30个像素点的差别,这一差别不容小觑。

图 1

ROI Align 的主要思想和具体方法

为了解决ROI Pooling的上述缺点,作者提出了ROI Align这一改进的方法(如图2)。ROI Align的思路很简单:取消量化操作,使用双线性内插的方法获得坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作,。值得注意的是,在具体的算法操作上,ROI Align并不是简单地补充出候选区域边界上的坐标点,然后将这些坐标点进行池化,而是重新设计了一套比较优雅的流程,如 图3 所示:

  • 遍历每一个候选区域,保持浮点数边界不做量化。
  • 将候选区域分割成k x k个单元,每个单元的边界也不做量化。
  • 在每个单元中计算固定四个坐标位置,用双线性内插的方法计算出这四个位置的值,然后进行最大池化操作。

这里对上述步骤的第三点作一些说明:这个固定位置是指在每一个矩形单元(bin)中按照固定规则确定的位置。比如,如果采样点数是1,那么就是这个单元的中心点。如果采样点数是4,那么就是把这个单元平均分割成四个小方块以后它们分别的中心点。显然这些采样点的坐标通常是浮点数,所以需要使用插值的方法得到它的像素值。在相关实验中,作者发现将采样点设为4会获得最佳性能,甚至直接设为1在性能上也相差无几。事实上,ROI Align 在遍历取样点的数量上没有ROIPooling那么多,但却可以获得更好的性能,这主要归功于解决了misalignment的问题。值得一提的是,我在实验时发现,ROI Align在VOC2007数据集上的提升效果并不如在COCO上明显。经过分析,造成这种区别的原因是COCO上小目标的数量更多,而小目标受misalignment问题的影响更大(比如,同样是0.5个像素点的偏差,对于较大的目标而言显得微不足道,但是对于小目标,误差的影响就要高很多)。

图 2

图 3

ROI Align 的反向传播

常规的ROI Pooling的反向传播公式如下:


这里,xi代表池化前特征图上的像素点;yrj代表池化后的第r个候选区域的第j个点;i*(r,j)代表点yrj像素值的来源(最大池化的时候选出的最大像素值所在点的坐标)。由上式可以看出,只有当池化后某一个点的像素值在池化过程中采用了当前点Xi的像素值(即满足i=i*(r,j)),才在xi处回传梯度。

类比于ROIPooling,ROIAlign的反向传播需要作出稍许修改:首先,在ROIAlign中,xi*(r,j)是一个浮点数的坐标位置(前向传播时计算出来的采样点),在池化前的特征图中,每一个与 xi*(r,j) 横纵坐标均小于1的点都应该接受与此对应的点yrj回传的梯度,故ROI Align 的反向传播公式如下:

上式中,d(.)表示两点之间的距离,Δh和Δw表示 xi 与 xi * (r,j) 横纵坐标的差值,这里作为双线性内插的系数乘在原始的梯度上。

ROI pooling 和 ROI Align详解相关推荐

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

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

  2. RoI Pooling 和 RoI Align

    RoI Pooling 和 RoI Align 一.背景和基本概念 1.背景 2.基本概念 二.RoI Pooling原理 1.目的 2.步骤(以输出RoI feature大小为2×2×5为例) St ...

  3. 【深度学习】ROI Pooling 和 ROI Align 计算机视觉 目标检测

    文章目录 ROI Pooling和ROI Align: 一篇好的文章 ROI Pooling 如何计算? AdaptiveMaxPool2d 在做啥 Fast RCNN或者Faster RCNN中都使 ...

  4. 【深度学习小知识】ROI到ROI pooling 再到ROI Align

    ROI!RoI Pooling! ROI详解 RoI Pooling详解 Pooling操作 ROI pooling ROI Align详解 ROI详解 Region of interest(ROI) ...

  5. RoI Pooling 系列方法介绍(文末附源码)

    作者简介 CW,广东深圳人,毕业于中山大学(SYSU)数据科学与计算机学院,毕业后就业于腾讯计算机系统有限公司技术工程与事业群(TEG)从事Devops工作,期间在AI LAB实习过,实操过道路交通元 ...

  6. ROI Pooling的作用及意义

    什么是ROI pooling? ROI pooling 是对(Region of Interest)进行Pooling操作,广泛应用在物体检测的研究领域. 该操作的目的是对输入feature map中 ...

  7. [深度学习概念]·实例分割模型Mask R-CNN详解

    实例分割模型Mask R-CNN详解 基础深度学习的目标检测技术演进解析 本文转载地址 Mask R-CNN是ICCV 2017的best paper,彰显了机器学习计算机视觉领域在2017年的最新成 ...

  8. Mask RCNN算法详解(总结)

    Mask RCNN:目标检测+实例分割 作用:可以完成目标分类,目标检测,语义分割,实例分割,人体姿态识别等多种任务. 1.实例分割与语义分割的区别和关系? 通常的目标分割是指语义分割,实例分割是从目 ...

  9. 转:FRCNN之RPN结构详解

    图没了,大家可以移步原文网址,之前放在最后的... https://www.jianshu.com/p/ab1ebddf58b1 一.资源提供: 论文链接 Faster R-CNN Towards R ...

最新文章

  1. 深度学习和目标检测系列教程 21-300:deepsorts测试小车经过的时间和速度
  2. 2021云栖大会开源引力峰会重磅发布的战略合作,Grafana服务到底是什么?
  3. 加班最狠的城市竟然不是北京!
  4. java注解的反射_Java注解与反射
  5. 什么是压缩感知?[简单概括]
  6. 第1章第1节练习题10 查找中位数
  7. c++中的模板_C ++中的模板
  8. python3 open函数_Python3 open函数
  9. java环境配置:安装jdk和集成开发环境
  10. Git 分支 - 分支的新建
  11. 智能优化算法:学生心理学优化算法 -附代码
  12. 安卓boot.img文件详细介绍-解包,编辑,打包
  13. Windows 下载安装 SonarQube和使用
  14. python语言程序设计西安电子科技大学答案-中国科学技术大学2019自命题科目覆盖范围及参考书目...
  15. 错误码 0x8007007b 解决
  16. C语言程序 输出杨辉三角,C语言打印输出杨辉三角
  17. unit04-JavaScript
  18. 每月缴的个税,你知道怎么算的吗?
  19. 手机换IP的方法--手机PPTP
  20. 关于软件测试你必须知道的名词

热门文章

  1. 函数柯里化的意义_详解JS函数柯里化
  2. @2021SC@SDUSC 源码分析: core/lib/encoding
  3. mysql mgr vip_MySQL 8.0 MGR(组复制)高可用VIP切换脚本
  4. python统计图片的纹理信息_python实现LBP方法提取图像纹理特征实现分类
  5. Spark的临时数据不自动清理
  6. 数据有限时人工智能如何使用深度学习
  7. (二)DDD——在我梦里,我还能让你把我给欺负了?
  8. Eclipse注释汉字开始的文字是方框问题
  9. 华为鸿蒙系统铃声,安卓再见!华为鸿蒙系统手机铃声变了:来听一下
  10. 弘辽科技:淘宝新店先补单还是先引流?