R-CNN,Fast R-CNN详解

news2025/8/3 13:08:46

R-CNN

R-CNN可以说是利用深度学习进行目标检测的开山之作。作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,曾在2010年带领团队获得终身成就奖。

R-CNN流程

R-CNN流程可以分为4个步骤:
1.一张图像生成1k~2k个候选区域(使用Selective Search方法);
2.对每个候选区域,使用深度网络提取特征;
3.特征送入每一类的SVM分类器,判断是否属于该类;
4.使用回归器精细修正候选框位置。

在这里插入图片描述

在这里插入图片描述

1.Selective Search算法生成候选区域

Selective Search算法用于为物体检测算法提供候选区域,它速度快,召回率高。Selective Search算法需要先使用《Efficient Graph-Based Image Segmentation》论文里的方法产生初始的分割区域,然后使用相似度计算方法合并一些小的区域。简单介绍一下算法流程:

在这里插入图片描述

算法描述如下
* 输入:彩色图片
* 输出:物体可能的位置,实际上是很多的矩形坐标

1. 首先,使用论文中的方法将图片初始化为很多小区域 R = {r1, r2, ..., rn}2. 初始化一个相似集合为空集:S = {}
3. 计算所有相邻区域之间的相似度,放入集合 S 中,集合 S 保存的其实是一个区域对以及它们之间的相似度

   for each 邻居区域对(ri, rj) do
       计算相似度 s(ri, rj)
       放入集合 SS = Ss(ri, rj)
       
4. 找出 S 中相似度最高的区域对,将它们合并,并从 S 中删除与它们相关的所有相似度和区域对。
   重新计算这个新区域与周围区域的相似度,放入集合 S 中,并将这个新合并的区域放入集合 R 中,重复这个步骤直到 **S** 为空。
   
   while S 不为空 doS 中取得最大相似度区域对 s(ri, rj) = max(S)
       将取得的区域对合并,产生新的区域:rt = ri ∪ rj
       移除 ri 对应的所有相似度:S = S\s(ri, r*)
       移除 rj 对应的所有相似度:S = S\s(r*, rj)
       计算新的区域 rt 与周围区域的相似度集合 St
       将 St 放入相似度集合 SS = S ∪ St
       将 新的区域 rt 放入集合 RR = R ∪ rt
       
5.R 中找出所有区域的 bounding box (即包围该区域的最小矩形框),
   这些 box 就是物体可能的区域。
2.对候选区域使用深度网络提取特征

将生成的候选区域缩放到227x227,接着将候选区域输入事先训练好的AlexNet CNN网络(这里的AlexNet网络去掉最后的全连接层)获取4096维的特征得到2000×4096维矩阵。

3.特征送入每一类的SVM分类器,判断是否属于该类

将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,获得2000x20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。

在这里插入图片描述

4.使用回归器精细修正候选框位置

对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box。
如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G表示Region Proposal进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题。

在这里插入图片描述

R-CNN存在的问题

1.测试速度慢:测试一张图片约53s(CPU)。用Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余。
2.训练速度慢:过程及其繁琐。
3.训练所需空间大:对于SVM和bbox回归训练,需要从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,从VOC07训练集上的5k图像上提取的特征需要数百GB的存储空间。

Fast R-CNN

Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66%(再Pascal VOC数据集上)。

Fast R-CNN流程

1.一张图像生成1K~2K个候选区域(使用Selective Search方法) ;
2.将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到
特征图上获得相应的特征矩阵;
3.将每个特征矩阵通过ROI(Region of Interest) pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。

在这里插入图片描述

在这里插入图片描述

1.一张图像生成1K~2K个候选区域(同R-CNN第一步)
2.将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵;

与R-CNN相比,从第二步开始就完全不同了。Fast-RCNN将整张图像送入网络,紧接着从特征图像上提取相应的候选区域。这些候选区域的特征不需要再重复计算。
在这里插入图片描述

3.将每个特征矩阵通过ROI(Region of Interest) pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。

关于ROI(Region of Interest) pooling层缩放到7x7大小的特征图,假设我们左边这张图为候选框对应特征图的特征矩阵,将其划分为7x7等份,对每一份进行maxpooling池化。无论你的特征矩阵多大,都能缩放成7x7大小。

请添加图片描述
关于分类器和边界框回归器,分类器输出N+1个类别的概率(N为检测目标的种类,1为背景)共N+1个节点,这里取N=20。

在这里插入图片描述

边界回归器输出对应N+1个类别的候选边界框回归参数(dx,dy,dw,dh),共(N+1)x4个节点,这里取N=20。

请添加图片描述

根据边界回归器的输出调整候选框的位置:

在这里插入图片描述

Px,Py,Pw,Ph分别为候选框的中心x,y坐标,以及宽高;
G x ^ \widehat{Gx} Gx G y ^ \widehat{Gy} Gy G w ^ \widehat{Gw} Gw G h ^ \widehat{Gh} Gh 分别为最终预测的边界框中心x,y坐标,以及宽高。

在这里插入图片描述

Fast R-CNN的损失函数包括两部分,分类损失和边界框回归损失:

在这里插入图片描述

p是分类器预测的softmax概率分布p=(p0……pk);
u对应目标真实类别标签;
tu对应边界框回归器预测的对应类别u的回归参数(txu,tyu,twu,thu);
v对应真实目标的边界框回归参数(vx,vy,vw,vh);
其中,vx = (Gx - Px)/Pw;vy = (Gy - Py)/Ph;vw=In(Gw/Pw);vh=In(Gh/Ph);
λ是一个平衡系数,用于平衡分类损失和边界框回归损失;
[u≥1]是一个艾弗森括号,当u≥1时,该项等于1;小于则该项等于0。当u≥1时,表示候选区域属于我们检测的某个类别,属于正样本,这时才有边界回归损失;等于0时表示候选区域是背景,是负样本,没有边界损失这一项;

请添加图片描述

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

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

相关文章

【算法基础】P问题、NP问题、NP-Hard问题、NP-Complete问题

P问题、NP问题、NP-Hard问题、NP-Complete问题前提1. 时间复杂度:2. 约化(Reducibility)P问题NP问题NPHard问题NP-Complete问题其它:前提 1. 时间复杂度: 2. 约化(Reducibility) 如果能找到一个变化法则,对任意一个A程序的输入&…

【华为OD机试真题 python】 转骰子【2022 Q4 | 200分】

■ 题目描述 【转骰子】 骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置在平面上, 可以向左翻转(用L表示向左翻转1次), 可以向右翻转(用R表示向右翻转1次), 可以向前翻转(用F表示向前翻转1次), 可以…

力扣(LeetCode)71. 简化路径(C++)

模拟 对于路径 pathpathpath ,遇到 ′/′/′/′ 则操作,遇到其他字符则保存名字。操作有如下几种: 1.名字是 "."".""." 或 """""" 不操作,前者表示在当前目录,后者…

代码管理工具知多少?来看看Git怎么用吧

一. 代码管理工具简介 说到代码工具,许多工作了的小伙伴一定很有发言权。因为我们在实际开发环境中,就代码的复杂度和逻辑度,对于开发工程师来说,都是极具挑战性的。如果单靠个人来完成单个项目的整体开发,那无疑是难…

baostock均线数据怎么描出图形表示?

baostock主要是用量化交易者的一个开放数据的源头系统,其功能可以提供大量准确、完整的证券历史行情数据、上市公司财务数据等服务。利用python API获取证券数据信息,满足量化交易投资者、数量金融爱好者、计量经济从业者数据需求等,同样&…

重点,一文掌握ReentrantLock加解锁原理!|原创

本文详细讲解了 ReentrantLock 加锁和释放锁的原理,以及和 Synchronized 的对比。本文较长,建议收藏!点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达简要总结 ReentrantLock实现原理:volati…

Arduino ESP32使用U3115S芯片控制H桥驱动有刷直流电机

Arduino ESP32实现互补PWM输出 问题提出半桥驱动电路必须是PWM互补输入才能工作Arduino ESP32的互补PWM控制问题提出 直流有刷电机控制使用U3115S芯片。芯片是电压高达300V的半H桥驱动电路,管脚说明: NumberSymbolDescription1VCC低侧固定逻辑电源输入…

牛客网——verilog练习题思路汇总

目录 基础语法 VL1 四选一多路器 VL2 异步复位的串联T触发器 VL3 奇偶校验 VL4 移位运算与乘法 VL5 位拆分与运算 VL6 多功能数据处理器 VL7 求两个数的差值 VL8 使用generate…for语句简化代码 VL9 使用子模块实现三输入数的大小比较 VL10 使用函数实现数据大小端转…

智慧城市建设的原则及规划目标

一、建设原则 智慧城市建设过程中必须把握以下原则: (一) 遵循市信息化建设总体规划与发展框架。遵循 “十二五” 信息化规划确定的“紧紧围绕国家西部大开发战略目标,强化信息技术和信息化在我市加快推进新型工业化进程中的战略…

数据库周期表整体设计方案

这是学习笔记的第 2442篇文章数据库周期表是我们自定义的名称,从数据视角来说,通常会有三类数据表:字典表,状态表,日志表,其中周期表从定位上更侧重于日志表。为什么叫周期表,主要是因为日志数据…

看着2022年世界杯,我无比怀念98世界杯

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 断断续续看了2022年世界杯部分比赛,我无比怀念1998年世界杯!该文权当本人的一点回忆文字,没有经过严谨认证&#xff0…

2023年第三届智能制造与自动化前沿国际会议(CFIMA 2023)

2023年第三届智能制造与自动化前沿国际会议(CFIMA 2023) 重要信息 会议网址:www.cfima.org 会议时间:2023年6月9-11日 召开地点:中国大理 截稿时间:2023年4月20日 录用通知:投稿后2周内 收录检索:EI,…

IDEA创建父子项目

一、搭建父项目 创建第一个maven项目作为父项目 创建完之后建议删掉src文件夹 pom.xml <packaging>POM</packaging><!--依赖版本的锁定--><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</pr…

Linux-Nginx前端项目部署

目录 一、Nginx简介 负载均衡 动静分离 二、Nginx安装 Tomcat负载均衡 准备2个tomcat 修改此三处 修改后保存 启动两个Tomcat 修改Tomcat主界面​编辑 Nginx配置 查看nginx.conf配置 添加/更改配置​编辑 重启Nginx服务&#xff0c;让配置生效 出现权限问题 测试N…

计算机组成原理4小时速成:I/O系统,IO指令,编址方式,串行并行,程序查询传送,中断程序传送,DMA传送,接口组成

计算机组成原理4小时速成&#xff1a;I/O系统&#xff0c;IO指令&#xff0c;编址方式&#xff0c;串行并行&#xff0c;程序查询传送&#xff0c;中断程序传送&#xff0c;DMA传送&#xff0c;接口组成 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#x…

verilog generate

Verilog 生成块generate块允许乘以模块实例或执行任何模块的条件实例化。它提供了基于 Verilog 参数构建设计的能力。当需要多次重复相同的操作或模块实例&#xff0c;或者必须根据给定的 Verilog 参数有条件地包含某些代码时&#xff0c;这些语句特别方便。generate块不能包含…

centos7 clamav 杀毒软件安装

壹&#xff1a;编译安装 1&#xff0c;官网获取源码包 clamav官网地址 2&#xff0c;创建clamav 用户和存放病毒库目录 a, 创建clamav 用户和用户组 groupadd clamav && useradd -g clamav clamav && id clamavb,日志存放目录 mkdir -p /henan/clamav/lo…

Spring中的ApplicationContext所体现出来的工厂模式

Spring初体验 通常我们写代码时&#xff0c;先定义一个Class&#xff0c;然后再别的地方实例化&#xff0c;再进行调用&#xff0c;比如下边的Hello World的例子&#xff0c;类Hello有一个say()方法&#xff0c;用于打印出“Hello World”的字符串&#xff0c;另一个类App&…

python和R绘制箱线图+抖动点

python和R绘制箱线图抖动点 散点箱线图 IPCC AR6 https://www.ipcc.ch/ 通过散点展示数据的直观分布 x轴刻度标签如果是“连续”数据&#xff0c;可添加渐变背景。通过渐变来体现升温幅度&#xff0c;美观形象。 python版本&#xff1a; 先手搓数据&#xff1a; import pan…

【构建ML驱动的应用程序】第 11 章 :监控和更新模型

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…