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

article/2025/9/22 7:00:32

文章目录

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

ROI Pooling和ROI Align:

(1)ROI Pooling 是为了让特征图输出等尺寸大小的特征图而发明的粗暴Pooling 方法,在Pooling 过程中取整数个数像素点进行操作,导致在Mask RCNN实例分割的时候效果不好,所以凯明大神在Mask RCNN中提出ROI Align。
(2)ROI Align 采用双线性插值方式,获取原特征图中一个插值的像素结果。
(3)Faster-RCNN 中使用ROI Pooling ,存在2次取整量化 操作,一是SS的bbox是原理里的,射影到特征图的时候取整量化;二是做了如同AdaptiveMaxPool2d 的ROI Pooling 的时候。2次取整量化 导致在原图中像素差距很大,这样小目标将受到极大影响。Mask RCNN作者把它总结为“不匹配问题(misalignment)。

一篇好的文章

https://zhuanlan.zhihu.com/p/73113289

ROI Pooling 如何计算?

pytorch也有实现:https://pytorch.org/vision/main/generated/torchvision.ops.RoIPool.html

下面程序截取了Fast RCNN中的代码:

import numpy as np
import torch
from torch import nnclass SlowROIPool(nn.Module):def __init__(self, output_size):super().__init__()self.maxpool = nn.AdaptiveMaxPool2d(output_size)self.size = output_sizedef forward(self, images, rois, roi_idx):""":param images: shape is (n, C, H, W,):param rois: exam [[0.00078125, 0.00138889, 0.39140624, 0.6958333 ]]:param roi_idx: [0]:return:"""n = rois.shape[0]h = images.size(2)w = images.size(3)x1 = rois[:, 0]  # list, top lefty1 = rois[:, 1]  # list, top leftx2 = rois[:, 2]  # list, bottom righty2 = rois[:, 3]  # list, bottom right# scalex1 = np.floor(x1 * w).astype(int)x2 = np.ceil(x2 * w).astype(int)y1 = np.floor(y1 * h).astype(int)y2 = np.ceil(y2 * h).astype(int)res = []for i in range(n):img = images[roi_idx[i]].unsqueeze(0)  # 取出第idx张图,然后unsqueeze加个维度img = img[:, :, y1[i]:y2[i], x1[i]:x2[i]]  # (n, C, H, W,) , 利用labels中的bbox去crop出原始图img = self.maxpool(img)  # AdaptiveMaxPool2dres.append(img)res = torch.cat(res, dim=0)  # 所有特征图concat起来return resroipool = SlowROIPool(output_size=(7, 7))print(roipool(images=torch.Tensor(np.random.randn(2, 3, 720, 1280)),rois=np.asarray([[0.00078125, 0.00138889, 0.39140624, 0.6958333],[0.00078125, 0.00138889, 0.39140624, 0.6958333]]),roi_idx=[0, 1]).size())

输出 torch.Size([2, 3, 7, 7])。 # n C H W
程序中定义了ROI Pooling层,输出固定7*7的宽高特征图。
重点是AdaptiveMaxPool2d 。

AdaptiveMaxPool2d 在做啥

举例输入:
在这里插入图片描述
想输出2*2固定尺寸:
在这里插入图片描述
除了最大池化,还有平均池化。
有趣的是,原特征图宽高(10,10),想要输出(20,20),AdaptiveMaxPool2d 也可以,是一种映射查找。

Fast RCNN或者Faster RCNN中都使用了ROI Pooling

Fast RCNN或者Faster RCNN中都使用了ROI Pooling,如下是Fast RCNN的过程:
在这里插入图片描述
回顾Fast RCNN或者Faster RCNN:
(1)Fast RCNN采用Selective Search 方法生成1K~2K个候选区域,
Faster RCNN采用RPN 方法生成1K~2K个候选区域。
(2)两者都只需要做一次特征提取,bbox做projection映射提取特征图中的对应子特征图(ConV feature map),然后将子特征图用ROI Pooling形成固定大小输出,再然后经过FC网络去做分类和回归。
(3)RCNN中是Selective Search 方法出来的每个区域,都从原图中crop出区域,然后直接resize后给入VGG网络提取特征。

ROI Align

利用双线性插值就能取到想要的“浮点数像素点坐标位置”的对应值,就能正常pooling操作。
很好的一个视频:https://www.bilibili.com/video/BV1ZY411774T?spm_id_from=333.999.0.0

下图表示:
(1)原理图和特征图比例是32,原图里bbox左上角是[10 10],右下角是[124 124] ;
(2)ROI Pooling 就会两次取整,第一次算bbox映射是[0 0 ],[3 3],第二次是做AdaptiveMaxPool2d,如果是奇数就会遇到不均分取整;
(3)ROI Align 在下图中,第一次求bbox映射是[0.3125 0.3125 ],[3.875 3.875],不会取整。 对应到特征图后,如果想要22的特征图输出,直接把[0.3125 0.3125 ],[3.875 3.875]这个对应框直接均分,不会取整。
(4)ROI Align 在下图中,对于想要2
2的特征图输出,每一块输出数值取决于sampling ratio的数值。比如在下图中取sampling ratio=1,也就是只用取一个点,这个点的数值是利用双线性插值由它最近的四个像素点共同决定得到的。原Mask RCNN是sampling ratio=2,也就是取4个点,但作者也说采样位置和采样数量对于结果并不是由很大影响。

在这里插入图片描述
(5)双线性插值如何计算:
在这里插入图片描述
(6)原论文的 ROI Align是取sampling ratio=2,也就是4个采样点,每个采样点数值都是靠双线性插值计算得到:
在这里插入图片描述

参考:
https://blog.csdn.net/x1131230123/article/details/123660382
https://zhuanlan.zhihu.com/p/73138740
https://github.com/gary1346aa/Fast-RCNN-Object-Detection-Pytorch/blob/master/README.ipynb
https://www.bilibili.com/video/BV1ZY411774T?spm_id_from=333.999.0.0
https://arxiv.org/pdf/1703.06870.pdf


http://chatgpt.dhexx.cn/article/92DvFjEU.shtml

相关文章

ROI Pooling

RCNN ref 1 步骤: 1.使用Selective Search方法生成候选区域 2.对每一个候选区域使用CNN进行特征提取 3.对提取到的特征送入到每一类的SVM分类器 判断该区域是否属于该类特征 4.使用回归器精修候选框的位置 候选框搜索阶段: 使用selective search方法生成候选框,由于CNN提取…

ROI 详解

SPPNet、roi pooling 和 average pooling之间的区别,都是起到对任意大小的输入产生固定的输出的作用。其中SPPNet、roi pooling是一样的。 下面对ROI Pooling 进行详解: ROI是Region of Interest的简写,指的是在“特征图上的框”&#xff1…

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

ROI!RoI Pooling! ROI详解RoI Pooling详解Pooling操作ROI pooling ROI Align详解 ROI详解 Region of interest(ROI),中文译为感兴趣区域。在计算机视觉领域,从输入的图像中框选处理待处理的区域就是ROI。 ROI / Region proposals大致过程&am…

MD5密钥

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

漫画戏说:如何破解MD5加密算法

本文将通过漫画的形式来解释:如何破解MD5加密算法。其中包括了暴力枚举法、字典法、彩虹表法三种破解MD5加密算法的方法。MD5破解原理都是利用了,被加密的数据与MD5加密算法所生成的哈希值并不是一一对应的关系,而是多对一,也就是…

基于量子计算的md5密码哈希破解方法

基于量子计算的md5密码哈希破解方法 背景 Md5密文破解(解密)可以说是网络攻击中的一个必不可少的环节,是黑客工具中的一个重要“辅助工具”。md5解密主要用于网络攻击,在对网站等进行入侵过程,有可能获得管理员或者其…

MD5与SHA

不管是MD5还是SHA,这一切的根本都是哈希算法,即单向函数 MD5 全称为 消息摘要算法版本5 (Message Digest Algorithm 5) 首先我要强调的是,MD5并不是加密算法,它是一种哈希散列算法。 但是其往往可以应用…

使用rainbowcrack破解md5密文

文章目录 1、rainbowcrack下载2、文件说明3、使用流程3.1 生成彩虹表3.2 排序彩虹表3.3 使用刚生成的彩虹表破解密文 4、实例4.1 生成彩虹表4.2 彩虹表排序4.3 破解密文 1、rainbowcrack下载 下载链接 2、文件说明 3、使用流程 环境:windows 前提:进入…

MD5算法破解思路

https://blog.csdn.net/wufaliang003/article/details/79794982 小明:老师,上次您讲了MD5算法。用它生成的信息摘要,真的可以被破解吗? 老师:有很多种方法可以破解,不过需要明确一点,这里所谓的…

MD5密文破解实验

实验目的与要求 1、 了解MD5加密的基本原理 2、 使用MD5Crack工具进行MD5解密 3、 使用网络资源对密文进行在线破解 4、 认真阅读并掌握本实验相关的知识点 5、上机实现实验所提到的工具和操作,得到实验结果,并填写实验报告 预备知识 MD5介绍 199…

破解MD5加密

本文摘自漫画戏说:如何破解MD5加密算法TOMORROW星辰 前言 这里所谓的破解并非是要把摘要还原成原文。因为MD5算法是用有穷的128位表示无穷的原文。对于MD5的破解,实际上都属于碰撞,比如原文A可以 通过MD5生成摘要M,我们只要找到…

MD5摘要算法的几种破解方法!

你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 推荐:https://www.xttblog.com/?p5259 MD5 算法暴力…

比起高性能计算,高端存储才更亟待国产化

科技云报道原创。 上周末,2019全国高性能计算学术年会在内蒙古开幕,对于行业内的人来说,这是一个每年不能再熟悉的代表高性能领域的峰会了,CCF如今已经成为世界三大高性能计算学术年会之一。 ​ 值得注意的是,2019年的…

评测|HPE Nimble AF全闪存系列,诠释真正的高端存储

【IT168 评测】导语:随着AI、互联网、大数据等技术快速发展,企业对存储设备的需求已踏上一个更高的级别,高性能、低延时、大容量等多种需求的应用场景愈发常见,在这种情况下,寻求能够满足相应工作负载能力的存储设备已…

高端存储下一个爆款凭什么是它?

高端存储是企业级存储领域最令人淡定的市场,淡定在于这个市场门槛高,真正赢得了用户认可之后,基本上都可以淡定地稳步发展,但是想要取得绝对的优势,那还是需要下一番功夫不可。只是功夫非一日练成,更需耐力…

再获最佳推荐,华为高端存储凭什么征服DCIG?

近日,全球著名技术分析机构DCIG发布《DCIG 2023-24高端存储阵列TOP5》报告,华为OceanStor Dorado 18000凭借可靠性、易用性和安全性等诸多优势,在DELL EMC、IBM、HPE、PureStorage等一众国际厂商中脱颖而出,荣获最佳推荐榜首。 一…

【业界新闻】浪潮高端存储系统技术发展及展望(上篇)

转自:http://news.watchstor.com/corp-147547.htm [导读]从“9.11事件”之后大量的企业因为数据丢失而宣告破产可以看出数据的重要地位。随着计算机技术的发展,实现了数据计算和数据存储的分离,而数据存储由存储系统完成。存储系统的出现&…

HDS不玩了,高端存储还能玩多久?

据悉,“日立公司高级管理系统与服务业务副总裁Keiichi Shiotsuka的表述。他指出,日立公司正"着手冻结存储业务之内高端机型的投资,且在对低营收硬件开发业务进行结构化调整,旨在于2019年3月31日之前将系统与服务业务运营利润…

【观察】Hitachi Vantara:高端存储再“升级”,数字化转型再“升维”

我们知道,“数字经济”自2017年政府工作报告首次提及至今,已多次被写入政府工作报告,这也意味着数字经济已对中国的经济运行方式产生深远影响,成为经济发展中的核心主线。 同样,作为数字经济中的关键生产要素&#xff…

HDS VSP/VM高端存储更换硬盘

实施磁盘更换时,最好带上防静电手环 一、 故障描述 HDS VM存储有一块硬盘报红色灯 打开机框 拧开前面的螺丝,拉手往外啦,不行去后面推下 二、 SVP管理界面确认故障硬盘 管理口console,接网线,管理地址。将笔记本配置…