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

news/2025/11/26 20:32:20/文章来源:https://www.cnblogs.com/Dongmy/p/19274566

原文链接:https://cloud.tencent.com/developer/article/1829792

RoI pooling在fast RCNN算法中得到应用,由于该算法用一个卷积网络对原图进行feature extraction,因而共享feature map(特征图,特征提取后得到的中间表示)。

输入的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所示:

 

每一个feature map上的RoI都有其原始RoI的坐标和尺寸

图上的红框尺寸是: 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上带来了更大的性能提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/977635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

木棍分割-dp,前缀和优化

木棍分割-dp,前缀和优化 P2511 木棍分割 题意 有 \(n\) 根木棍,给出长度,要分成 \(m\) 段,问总长度最大的一段最小长度是多少,并求出其方案数对 \(10007\) 取模的结果。 思路 第一问很容易想到用二分,第二问也比…

yolo入门的一些环境配置记录

anaconda # 查看 Conda 版本:conda --version# 更新 Conda 到最新版本:conda update conda# 设置国内镜像以加速安装: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ con…

LLM提示注入攻击深度解析:从原理到防御的完整应对方案

如果你再维护线上的聊天系统,那么提示注入(Prompt Injection)是绕不开的话题。这不是一个普通漏洞而是OWASP LLM Top 10榜单上的头号风险,它的影响范围覆盖所有部署大语言模型的组织。 本文会详细介绍什么是提示注入…

Go语言的应用场景有哪些?

Go 语言(Golang)凭借其高并发支持、简洁语法、高效编译和部署便捷性,在多个领域展现出强大优势,以下是其主要应用场景及典型案例: 1. 后端服务与微服务架构核心优势:原生并发模型(Goroutine+Channel)、高性能、…

Ceres Solver优化库学习笔记

1. Ceres Solver 1.1 简介定位:一个功能强大、通用的非线性最小二乘问题求解器。 哲学:提供一套丰富的API,让用户能够轻松地定义和构建残差项,并自动或手动指定微分方式,最终求解这些残差的平方和的最小值。它更像…

Flash动画制作总结

对于下周要进行验收的Flash动画大作业,我一开始并没有接触过这个,在进行询问AI和这个项目制作的步骤 从一开始的,AI建议使用HTML,因为现在大部分主流的浏览器已经不适配Flash插件了,导致一开始没有思路 后来在进行…

什么是Go语言

Go 语言(也称为 Golang)是由 Google 公司开发的静态类型、编译型编程语言,于 2009 年正式发布。它由 Robert Griesemer、Rob Pike 和 Ken Thompson(C 语言创始人之一)主导设计,旨在解决大型软件工程中的效率、复…

人工智能之数据分析 Matplotlib:第一章 简介和安装

人工智能之数据分析 Matplotlib:第一章 简介和安装人工智能之数据分析 Matplotlib 第一章 简介和安装@目录人工智能之数据分析 Matplotlib前言一、Matplotlib 简介二、安装 Matplotlib1. 使用 pip 安装(推荐)2. 使…

在C#中操作Word文档时,如何处理表格中的数据?

在 C# 中操作 Word 表格数据时,需结合使用的库(如Microsoft.Office.Interop.Word或DocX)进行数据填充、读取、修改、验证等操作。以下分场景详细说明处理方法: 一、数据填充(写入表格) 1. 使用 Interop.Word 填充…

第四十九篇

今天是11月26号,上了离散,两节马原

如何使用DocX库在C#中创建和格式化Word表格?

使用 DocX 库在 C# 中创建和格式化 Word 表格无需安装 Microsoft Office,且操作轻量、跨平台。以下是详细的实现步骤、示例代码及关键格式化技巧: 一、准备工作:安装 DocX 库 通过 NuGet 包管理器安装 DocX(由 Xce…

feature map是什么

特征图(Feature Map) 是卷积神经网络(CNN)对输入图像进行特征提取后得到的中间表示,可以理解为一组压缩但语义丰富的“特征图像”。在目标检测中,它是连接主干网络与检测头的核心桥梁。 一、直观形象:特征图长什…

10-数据格式转换

WKT数据格式处理 概述 WKT(Well-Known Text)是一种用于表示几何对象的标准文本格式。作为一种通用的几何数据表示方法,WKT可以作为不同GIS数据格式之间转换的桥梁。本章介绍WKT格式的特点、使用方法以及基于WKT进行…

elasticsearch创建用户、角色

我们要创建一个叫xjw的用户,这个用户要有较高的es权限和kibana权限,同时实现多用户下的数据隔离先创建角色 indices下的names属性里配置的是我们能操作的索引、模版等等数据的前缀“xjw-”,如果不带这个前缀会报错4…

09-国土TXT格式

国土TXT格式 概述 国土TXT格式是中国自然资源部门使用的地块坐标文本格式,主要用于土地调查、不动产登记等业务场景。理解并正确处理该格式是从事国土相关GIS开发的必备技能。 文件格式 基本结构 国土TXT文件由多个部…

P30_利用GUP训练(二)

P30_利用GUP训练(二)1.代码实战: (1)调用.to()方法即可。 .to(device) device = torch.device("cpu") torch.device("cuda")点击查看代码 #12.定义训练的设备 # device = torch.device("…

重磅!图灵奖得主 Bengio 领衔 30 + 顶流学者联合发文!首次给 AGI 下量化定义

论文标题:A Definition of AGI 作者团队:人工智能安全中心、加州大学伯克利分校、Morph实验室、密歇根大学等 发布时间:2025年10月21日 👉一键直达论文 👉Lab4AI大模型实验室论文阅读 ✅Lab4AI平台提供AI导读和…

GitHub Actions安全漏洞:GITHUB_TOKEN部分泄露风险分析

本文详细分析了CVE-2025-31479安全漏洞,该漏洞会导致GitHub Actions中的GITHUB_TOKEN在异常输出中部分泄露,可能被攻击者利用进行供应链攻击,影响仓库安全性。CVE-2025-31479:canonical/get-workflow-version-acti…

使用 C# 自动创建和格式化 Word 表格

要在 C# 中自动创建和格式化 Word 表格,可借助Microsoft.Office.Interop.Word库或DocX(更轻量,无需安装 Office)。以下分别介绍两种方案的实现方法: 方案一:使用 Microsoft.Office.Interop.Word(需安装 Office)…