IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 目标检测1——RoI Pooling和RoI Align -> 正文阅读

[人工智能]目标检测1——RoI Pooling和RoI Align


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


1 ROI

首先,何为ROIROIRegion of Interest的缩写,即感兴趣区域。在不同的情况下用户关心的图像区域是不同的,因此ROI所指含义也不同。对于物体检测的目标ROIROI就是要找到对象在图像中Bounding Box区域。如

在这里插入图片描述

对于物体检测的目标,我们关心的是对象是人,则上图中红色的框中人的框选区域就是ROI

而在Fast RCNN中,ROI Pooling作用在backbone和检测头之间,其关心的是物体检测框的候选框proposal boxes,而非真正的target boxes,对proposal boxes经过置信度评分过滤和极大值抑制后才能生成target boxes。因此,此时的ROI指的是候选框proposal boxes所指的区域。如下图,目标框是准确框出图中的两只狗狗,但通过selective searchRPN网络生成的proposal boxes如图中花花绿绿的框所时,ROI PoolingROI Align正是作用在这些proposal boxes所指的ROI上。

图片来源于https://d2l.ai/chapter_computer-vision/anchor.html
在这里插入图片描述

2.ROI Pooling

将深度学习用于目标检测,网络架构一般是分成Backbone基干网络用于提取图像特征,和检测头用来实现分类和检测框位置回归。2015年4月份微软的Ross Girshick发表的Fast RCNN论文中提出了ROI Pooling, 解决了模型固定大小输入的问题,提升了检测的性能,一起来看ROI Pooling到底是怎么回事。

ROI Pooling顾名思意,就是池化操作的一种,只不过这个池化操作是作用在ROI上面,而非整个图像区域。先看fast RCNN的整体架构,

图片来自fast RCNN 论文
在这里插入图片描述

图中Deep ConvNet是深度卷积网络,也就是backbone是用来提取特征得到feature map的,feature map就是对输入的图像经过层层卷积后得到的shape为NCHW的张量,其中feature map的宽高大小通常等于输入图像宽高除以stride,stride是输入图像经过卷积池化得到的feature map的缩放倍数,ROI Pooling正是紧跟在feature map后面,作用在feature map的池化操作。输入图像中红色的框是一个proposal box,这个proposal boxselective searchregion proposal network算法自动生成的ROI区域,还不是物体检测框bounding boxproposal boxes的尺度是相对于输入图像的,因此可根据stride参数,将其映射到feature map尺度上,也就是图中的ROI Projection。得到feature map和经过stride缩放投射到feature map上的proposal box后,就可以开始进行池化操作了。

在这里插入图片描述

从上图中可以看到ROI Pooling的全过程,绿色虚线框以外的部分是得到proposals并变换到feature map上的过程,绿色虚线框内是在1个通道上进行ROI Pooling的过程。ROI Pooling空间金字塔池化Spatial Pyramid Pooling一样,都是无论输出的WH大小,指定池化后输入结果的WH,据此自适应计算池化核的大小,然后在划分后的池化核范围内进行最大值池化或均值池化,如图中绿色框中所示。空间金字塔池化Spatial Pyramid Pooling是何凯明于2014年06月份在微软亚洲研究院时发表的论文Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition中提出的。ROI Pooling是作用在每一个proposal上的,假如是batch size=B, proposals的数量为N, 则ROI Pooling后的张量大小为, B × N × C × H r o i p o o l × W r o i p o o l B\times N \times C \times H_{roi pool} \times W_{roi pool} B×N×C×Hroipool?×Wroipool?在将proposals投射到feature map上时,计算结果很有可能是不能整除的,如图中21/32=0.625,这时选择近似取整的方法选定proposal对应的feature map对应的区域,如上图中将红色的框近似到蓝色框上,这里做了第一次量化取整,引入了误差。在计算自适应池化核大小时,遇到非整除的情况,这里对计算结果进行了向上取整和向下取整的近似,如8/3通过近似得到池化核区域的大小为3,3,2,这里做了第二次量化,引入了误差。

通过以上的说明,有可能依然没有说清除,说明白,最能描述一个算法本身的应该是代码实现,ROI Pooling的具体代码实现可以参考 github ROI Pooling

3.ROI Align

从上面介绍中可知ROI Pooling中有两处对计算结果取了近似,一次是在将proposal投射到feature map上时,对浮点数进行了近似取整,另外一次是在进行池化操作计算池化核的大小时也进行了近似取整。这对于分类问题影响不大,但对于检测问题因对检测框进行了近似,会影响检测的定位精度ROI Align也是一种池化操作,只不过其不对proposals映射和池化核大小做近似,而是使用浮点数计算,然后使用双线性插值再近似浮点数位置的值来做池化,比直接近似取整更加准确。ROI AlignHe KaiMingFast RCNN的原作者Ross Girshick一起在201703月份发表的论文Mask RCNN中的提出的,用于目标检测和实例分割。有个小插曲,2015年Ross Girshick发表Fast RCNN时,其署名单位是微软,2017年署名单位已经是FacebookFAIR了。

还以上图中狗的检测为例,这次直接使用feature map红色的框进行计算,而不再将其取整近似到蓝色框上。且在绿色框中的池化操作,池化核的大小也采用均分,而非近似的方法。其实现过程如下图:

在这里插入图片描述

ROI Align主要涉及到的是如何求浮点位置的feature map上的值,其确定是通过双线性插值来实现的,比ROI Pooling中的取整近似要更准确。关于双线性插值的介绍可参考(五)线性插值,ROI Align的代码实现可参考:

roi_align_cpu.cpp

其中计算线性插值的函数使用的方式是按邻近4个像素点对当前点贡献多少来决定的,也就是面积加权平均,可参考上面的线性插值介绍的文章。在计算坐标时

// 公式是(src+0.5)/(dst+0.5) = srcWidth/dstWidth,即中心点对齐
const T yy = start_y + ph * b_size_h + static_cast<T>(iy + 0.5f) * b_size_h / static_cast<T>(b_grid_h);
for (int ix = 0; ix < b_grid_w; ++ix) {
const T xx = start_x + pw * b_size_w + static_cast<T>(ix + 0.5f) * b_size_w / static_cast<T>(b_grid_w);
     T x = xx, y = yy;
     // situation 1: out of range
     if (y < -1.0 || y > h || x < -1.0 || x > w) {
          PreCalc<T> pc{0, 0, 0, 0, 0, 0, 0, 0};
          pre_calc[idx] = pc;
          idx += 1;
          continue;
     }
}

通过ROI PoolingROI Align后得到的张量的宽高同SPPNet,是固定的,因此其后可以跟全连接层用来实现,检测框类别的判断和更好的位置回归。


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


参考资料

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:04:57  更:2022-08-19 19:08:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:51:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码