Region Proposal Network (RPN) 架构详解

news2024/11/25 1:08:27

动动发财的小手,点个赞吧!

简介

如果您正在阅读这篇文章[1],那么我假设您一定听说过用于目标检测的 RCNN 系列,如果是的话,那么您一定遇到过 RPN,即区域提议网络。如果您不了解 RCNN 系列,那么我强烈建议您在深入研究 RPN 之前单击此处阅读这篇文章。

因此我们知道,在目标检测算法中,目标是生成候选框,可能包含我们目标的框,这些框将通过边界框回归方法进行定位,并由分类器分类到各自的类别。

在早期版本的物体检测算法中,这些候选框曾经是通过传统的计算机视觉技术生成的。其中一种方法是“选择性搜索”,但这种方法的缺点是它是离线的,而且计算量很大。

这就是 RPN(区域提议网络)方法通过在非常短的时间内生成候选框和最重要的地方,这个网络可以插入任何对象检测网络,这使得它对任何对象检测模型都更有用。

RPN

CNN 从特征图学习分类的方式,RPN 也学习从特征图生成这些候选框。可以使用下图演示典型的区域提议网络

alt

让我们逐步了解上面的框图

Step 1

因此,在第一步中,我们的输入图像通过卷积神经网络,最后一层将特征映射作为输出。

Step 2

在这一步中,一个滑动窗口运行在上一步获得的特征图上。滑动窗口的大小是 n*n(这里是 3×3)。对于每个滑动窗口,都会生成一组特定的锚点,但具有 3 种不同的纵横比(1:1、1:2、2:1)和 3 种不同的比例(128、256 和 512),如下所示。

因此,对于 3 种不同的纵横比和 3 种不同的比例,每个像素总共可能有 9 个建议。特征图大小为 WxH 的锚框总数和特征图每个位置的锚点数量 K 可以表示为 WxHxK 。

下图显示了在大小为 (600, 900) 的图像的位置 (450, 350) 处的 9 个锚点。

alt

上图中,三种颜色代表三种尺度或尺寸:128×128、256×256、512×512。

让我们挑出棕色的盒子/锚点(上图中最里面的盒子)。三个盒子的高宽比分别为1:1、1:2和2:1。

现在我们有 9 个锚框用于特征图的每个位置。但是可能有很多盒子里面没有任何物体。因此模型需要了解哪个锚框可能包含我们的对象。带有我们对象的锚框可以被归类为前景,其余的将是背景。同时模型需要学习前景框的偏移量以调整以适合对象。这将我们带到下一步。

Step 3

锚框的定位和分类是由 Bounding box Regressor layer 和 Bounding box Classifier layer 完成的。

Bounding Box Classifier 计算 Ground Truth Box 与 anchor boxes 的 IoU 分数,并以一定的概率将 Anchor box 分类为前景或背景。

Bounding box Regressor 层学习 x,y,w,h 值相对于被分类为前景的 Anchor Box 的 Ground truth Box 的偏移量(或差异),其中 (x,y) 是框的中心, w 和 h 是宽度和高度。

由于 RPN 是一个模型,并且每个模型都有一个要训练的成本函数,因此 RPN 也是如此。 RPN 的损失或成本函数可以写成

alt
alt

注意:- PN 不关心对象的最终类(例如猫、狗、汽车或人等)是什么。它只关心它是前景对象还是背景。

示例

让我们用一个例子来描述 RPN 的整个概念

因此,如果我们有一个大小为 600×800 的图像,在通过卷积神经网络 (CNN) 块后,该输入图像将缩小为一个 38×56 的特征图,每个特征图位置有 9 个锚框。那么我们将有 38569=1192 个提案或 Anchor Boxes 来考虑。每个锚框都有两个可能的标签(前景或背景)。如果我们将特征图的深度设置为 18(9 个锚点 x 2 个标签),我们将使每个锚点都有一个向量,该向量具有表示前景和背景的两个值(称为 logit 的法线)。如果我们将 logit 输入 softmax/logistic 回归激活函数,它将预测标签。

假设 600×800 的图像在应用 CNN 后缩小 16 倍为 39×51 的特征图。 feature map 中的每个位置都有 9 个 anchors,每个 anchor 都有两个可能的标签(background,foreground)。如果我们将特征图的深度设置为 18(9 个锚点 x 2 个标签),我们将使每个锚点都有一个向量,该向量具有表示前景和背景的两个值(通常称为 logit)。如果我们将 logit 输入 softmax/logistic 回归激活函数,它将预测标签。现在,训练数据已包含特征和标签。模型将进一步训练它。

总结

区域提议网络 (RPN) 的输出是一堆框/提议,它们将被传递给分类器和回归器以最终检查对象的出现。简而言之,RPN 预测一个锚点是背景还是前景的可能性,并对锚点进行细化。

Reference

[1]

Source: https://towardsmachinelearning.org/region-proposal-network/

本文由 mdnice 多平台发布

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

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

相关文章

Github copilot的详细介绍,竞品比对分析,效率使用方法总结。

Copilot介绍,与竞品对比 Copilot是GitHub和OpenAI合作开发的一款人工智能代码助手,它可以根据用户输入的注释和代码片段,自动生成高质量的代码。Copilot使用了OpenAI的GPT模型,可以学习和理解大量的代码库和文档,从而…

javascript基础十三:说说 typeof 与 instanceof 区别?

一、typeof typeof 操作符返回一个字符串,表示未经计算的操作数的类型 举个粟子: typeof 1 number typeof 2 string typeof undefined undefined typeof false boolean typeof Symbol() symbol typeof null object typeof [] object typeof {} object…

TCP传输性能的关键因素除了流量控制,还有这些!

TCP网络通信基本原理 文章目录 TCP网络通信基本原理TCP效率(滑动窗口)流量控制拥塞控制延时应答捎带应答 面向字节流异常情况分析总结UDP/TCP特性与不同应用场景 TCP效率(滑动窗口) 滑动窗口:在TCP通信协议下&#xf…

【UnityShader入门精要】【总结记录】【第二章-2】

☀️博客主页:CSDN博客主页 💨本文由 萌萌的小木屋 原创,首发于 CSDN💢 🔥学习专栏推荐:面试汇总 ❗️游戏框架专栏推荐:游戏实用框架专栏 ⛅️点赞 👍 收藏 ⭐留言 📝&a…

1901-2021年1km分辨率逐月最高气温栅格数据(全国/分省)

气温数据是我们最常用的气象指标之一,之前我们给大家分享过来源于国家青藏高原科学数据中心提供的1901-2021年1km分辨率逐月平均气温栅格数据(可查看之前的文章获悉详情)! 本次我们分享的同样是来自国家青藏高原科学数据中心的高…

【探索】在 JavaScript 中使用 C 程序

JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑。当需要传输通信时,我们大多选择 JSON 或 XML 格式。 但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进制格式。 去年的今天,在折腾…

Redis中的整数集合(IntSet)

Redis节省内存的两个优秀设计思想:一个是使用连续的内存空间,避免内存碎片开销;二个是针对不同长度的数据,采用不同大小的元数据,以避免使用统一大小的元数据,造成内存空间的浪费。IntSet便具备以上两个设计…

160套小程序源码

源码列表如下: AppleMusic (知乎日报) 微信小程序 d artand 今日更新求职招聘类 医药网 口碑外卖点餐 城市天气 外卖小程序 定位天气 家居在线 微信小程序-大好商城,wechat-weapp 微信小程序的掘金信息流 微信跳一跳小游戏源码 微票源码-demo 急救应急处…

MyBatis- plus

实战总结 1.批量插入性能 1.批量插入性能差的原因 使用saveBatch()方法时, MySQL JDBC驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入&a…

2023企业真实性能测试常见面试题分析

简述性能测试流程? 1.分析性能需求。挑选用户使用最频繁的场景来测试,比如:登陆,搜索,下单等等。确定性能指标,比如:事务通过率为100%,TOP99%是5秒,最大并发用户为1000人…

Three.js——八、坐标、更改模型原点、移除、显示隐藏模型对象

世界坐标.getWorldPosition() 基础坐标也就是模型的.position属性 世界坐标:就是模型资深.position和所有父对象.position累加的坐标 用.getWorldPosition()属性需要用三维向量表示摸个坐标后方可读取 例如: const geometry new THREE.BoxGeometry(10…

【Qt】createEditor进不去【2023.05.07】

摘要 妈卖批,因为这个函数进不去,emo了一下午。实际上就是因为函数声明和定义的地方漏了个const关键字。 1.正确✔: QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) cons…

Rocketmq面试(三)消息积压,增加消费者有用么?

目录 一.广播模式和集群模式的不同 二.延迟拉取 三.消费者延迟拉取消息的原因 四.增加消费者后是如何分配MessageQueue(引出负载策略) 一.广播模式和集群模式的不同 首先我们要强调一下。在广播模式(每条消息需要被消费者组中的每个消费者处理,也就是…

QT/PyQT/PySide 通过富文本形式实现关键词高亮

因为本质上都是QT,所以我标题带了QT,这个思路是没问题的,就是用C得换个语言。 最开始想根据之前一篇博客的思路进行高亮 PyQT/PySide 文本浏览器跳转到指定行,并高亮指定行_qt 指定行高亮_Toblerone_Wind的博客-CSDN博客https:/…

Linux 设备树文件手动编译的 Makefile

前言 通过了解 Linux 设备树的编译方法,手动写了一个可以把 dts、dtsi、设备树依赖头文件等编译为设备树 dtb 的 Makefile Makefile 如下 mkfile_path : $(abspath $(lastword $(MAKEFILE_LIST))) cur_makefile_path : $(dir $(mkfile_path))DIR_ROOT : $(cur_ma…

十三届蓝桥杯国赛2022

会得噶 A 2022B 钟表C 卡牌D 最大数字dfsF 费用报销&#xff08;不是根据收据个数&#xff0c;而是根据日期dp)H 机房&#xff08;最近公共祖先lca&#xff09;I 齿轮J 搬砖&#xff08;贪心01背包&#xff09; A 2022 #include <bits/stdc.h> using namespace std; int …

Openlayers如何设置米作为作为圆形的真实半径,解决圆形半径跟随地图缩放同时缩放的失真问题

专栏目录: OpenLayers入门教程汇总目录 前言 相信找到这篇文章的同学肯定遇到了Openlayers直接设置圆形半径( radius)单位不准确的问题,而且失真严重。这是因为默认圆形半径设置的是浏览器像素大小,而不是真实地理信息中的半径长度。那么怎么进行转换成我们现实中的“米…

python+vue校园快递代取系统的设计与实现3i0v9

开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 本系统名为“基于vue快递代取系统”&#xff0c;系统主要适用于毕业设计&#xff0c;不…

【数据分享】1929-2022年全球站点的逐日最高气温(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2022年全球气象站…

高通滤波学习(opencv)

以下代码参考视频解析 这段代码使用了二维FFT变换对输入图像进行频域处理&#xff0c;并设计了一个简单的高通滤波器。 前两行使用了numpy库中的fft2函数对输入图像image进行二维傅里叶变换&#xff08;FFT&#xff09;。接着&#xff0c;fft_shift函数将转化后的频谱数据fft…