Faster-RCNN·代码解读系列01:Selective Search 和 R-CNN、Fast-CNN 简介

news2025/6/7 12:53:42

Selective Search 和 R-CNN、Fast-CNN 简介

  • 1 目标检测算法简介
  • 1.0滑窗法的思路
  • 1.1 Selective Search 和 R-CNN 简介
    • 1.2.1 Selective Search简介
    • 1.1.1 Selective Search的思路
    • 1.1.2 Selective Search图解
  • 1.2 Selective Search 和 Fast-CNN简介
    • 1.2.1 SPP和ROI Pooling简介
    • 1.2.2 FastR-CNN简介

1 目标检测算法简介

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.0滑窗法的思路

首先需要一个已经训练好的分类器,然后把图像按照一定间隔和不同的大小分成若干窗口,在这些窗口上执行分类器,如果得到较高的分类分数,就认为是检测到了物体。把每个窗口都用分类器执行一遍之后,再对得到的分数做一些后处理如非极大值抑制(Non-Maximum Suppression, NMS)等,最后就得到了物体类别和对应区域,其方法示意图如图所示。

在这里插入图片描述

1.1 Selective Search 和 R-CNN 简介

1.2.1 Selective Search简介

滑窗法相当于对一张图像上的子区域进行类似穷举式的搜索, 一般情况下这种低效率搜索到的区域里大部分都是没有任何物体的。所以一个很自然的想法就是只对图像中最有可能包含物体的区域进行搜索,进而提升物体检测的效率。在这种思路的方法中,最为熟
知的是 Selective Search。

1.1.1 Selective Search的思路

Selective Search的思路是,可能存在物体的区域都应该是有某种相似性的或连续的区域。针对这两个特点,Selective Search采用的是超像素合并的思路,**首先用分割算法在图像上产生很多的小区域,这些区域就是最基础的子区域,或者可以看作是超像素。然后根据这些区域之间的相似性进行区域合并,成为大一点的区域。**衡量相似性的标准可以是颜色、纹理和大小等。不断迭加这种小区域合并为大区域的过程,最后整张图会合并成为一个区域。

1.1.2 Selective Search图解

这个过程中,**给每个区域做一个外切的矩形,就得到了许许多多的可能是物体的区域方框。**其实无论是滑窗还是Selective Search,这种找出可能包含物体的区域的方法,统称为Region Proposal。算法执行过程的示意图如图11-3所示。
在这里插入图片描述

可以看到Selective Search和滑窗法相比第一个优点就是高效,因为不再是漫无目的的穷举式搜索。另外,在 Selective Search中,一开始的区域是小区域,合并过程中不断产生大区域,所以天然能够包含各种大小不同的疑似物体框。另外计算相似度采用了多样的指标,提升了找到物体的可靠性。至于算法本身当然也不能太慢,否则和滑窗法相比的优势就体现不出来了

有了Selective Search高效地寻找到可能包含物体的方框(实际中常进行一定像素的外 扩包含一定背景),那么接下来只要接个CNN提取特征,然后做个分类不就相当于检测吗?这正是于深度学习做物体检测的开山之作R-CNN ( Region-based Convolutional Neural Networks) , 当然直接用Selective Search选出的框未必精确,所以还加入了一些改进,如和物体标注框单位置的回归来修正Selective Search提出的原始物体框。R-CNN就像Alexnet,让物体检测的指标跃上了新台阶(PASCAL VOC, mAP从40.1%提升53.3%)

1.2 Selective Search 和 Fast-CNN简介

R-CNN虽然比起滑窗法已经快了很多,但可用性还是很差,因为一个稍微“靠谱”的识别任务需要用Selective Search提出上千个框(R-CNN中是2000个 )。这上千个图像区域都需要单独过一遍卷积神经网络进行前向计算,速度自然快不了。

1.2.1 SPP和ROI Pooling简介

由于卷积的同变性质(equivariance) ,通过每类别对应物体的激活响应图的例子,定性理解了物体通过卷积网络之后,会在语义层的响应图上的对应位置有特别的响应。

因此产生思路:对整张图片执行一次卷积神经网络的前向计算,到了最后一层的激活响应图的时候,通过某种方式把目标物体所在区域部分的响应图拿出来作为特征给分类器。这样做对画面内所有可能物体的检测就可以共享一次卷积神经网络的前向计算,大大节省了时间。

第一个在物体检测中实现这个思路的就是SPP,全称为空间金字塔池化(Spatial Pyramid Pooling),

在这里插入图片描述

如图11-4所示,假设输入图片中框住小马和摄影师的两个框是Selective Search选出来的框,那么经过了(没有全连接层的)卷积神经网络,到了最后一层输出的n个通道的响应图时,原图像上的两个框也会对应两个区域。这样的区域称为感兴趣区域(Region Of Interest, ROI)。一般常用的分类器,无论是SVM还是称浅层神经网络,都需要输入固定的维度。所以如果可以有一种方式把ROI的信息都转化成固定维度的向量,那么就能把每个ROI都给分类器去计算获得结果,并且在进入分类器之前,只需要运行一次卷积神经网络的前向计算,所有的ROI都共享同样的响应图。

思路①:SPP就是这样一种方法,对于每一个ROI,如图11-4中所示,SPP分层将指定区域划分为不同数目,图中分为3个层次,最底层划分为4x4=16个子区域,中间层是2x2=4个子区域,最顶层则直接整个区域进行池化,对于每个通道,每个ROI变成了一个21维的向量,因为有n个通道,所以每个ROI都生成了一个21×n维的向量。因为越是底层划分的数目越多,SPP是通过像金字塔一样的结构来获得感兴趣区域不同尺度的信息,所以叫空间金字塔池化。

SPP不仅**实现了对ROI的分类,而且对于整张图像只需要进行一次卷积神经网络的前向计算,大幅降低了算法执行的时间。**另外需要提的是,SPP把任意大小的向量转化为固定大小的向量的方法还有另一个意义,就是让输入神经网络的图像大小不再固定,在执行分类任务的时候,这种做法的优点是不需要再对图像进行裁剪或者缩放。

SPP的论文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》发表在 2014 的 ECCV 上,有兴趣的读者可以自行搜索原文参考。

思路②【FastR-CNN】:在SPP中,包含信息最多的其实就是最底层,所以另一个思路是直接把ROI划分为固定的大小,并不分层。如把所有ROI区域池化到7x7的大小,再送入分类器,这就是ROI Pooling,如图11-4的右下部分所示。

1.2.2 FastR-CNN简介

SPP用于物体检测相比R-CNN获得了速度上的巨大提升,但仍然继承了一些R-CNN的缺点。最明显的是分阶段训练,不仅麻烦,而且物体框回归训练过程和卷积神经网络的训练过程是割裂的,整个参数优化的过程不是一体的,限制了达到更高精度的可能性。

针对SPP的缺点,R-CNN的作者Ross B. Girshick再度发力,在 SPP检测的基础上提出了两个主要的改进/变化:

第一点是ROI提取特征后,把物体框的回归和分类这两个任务的loss融合一起训练,相当于端到端的多任务训练( end-to-end with a multi-task loss) 这让整个训练过程不再是多个步骤分别进行,训练效率也更高;

第二点是把SPP换成了 ROI Pooling,这就是Fast R-CNN。在计算预测的框和标注框的loss时,采用了一种叫做Smooth-L1的loss计算方法:
在这里插入图片描述

就是把L2和L1拼一块了,其中小的偏差利用L2计算,大的偏差利用L1计算。而Smooth-L1对偏差很大的值没有那么敏感,好处是提高 loss计算的稳定性。

在这种框架下,因为卷积神经网络计算对每张图像只执行了一次,所以重复计算大都在ROI Pooling之后,于是**提出用SVD分解然后忽略次要成分,把全连接层的计算量减小,达到精度损失极其微小的情况下,获得较大幅度的计算速度提高,**这也是算是论文中的一个小的优点。

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

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

相关文章

MySQL/SqlServer 跨服务器 增删改查(CRUD) 的一种方法

前言:主要是利用SqlServer 的链接服务器功能 1.准备一台 SqlServer Server,服务如下图: 这台服务器专门用于 链接服务器 IP:10.x.x.3 和数据源服务器(10.x.x.5) 在一个局域网 1.1 版本 是 2017 2.在 10.…

监控平台zabbix对接grafana

目录 1.安装grafana并启动 2.浏览器访问 3.导入zabbix数据,对接grafana 4.如何导入模板 5.使用zabbix监控nginx并发量连接数 5.1 修改nginx配置 5.2 编写监控数据脚本 5.3 设置键值 5.4 在zabbix web端完成自定义监控项 5.5 连接到grafana 以上一篇博客&l…

前端面试题7(单点登录)

如何实现单点登录 单点登录(Single Sign-On,简称SSO)是一种允许用户在多个应用系统中只需登录一次,就可以访问所有相互信任的应用系统的认证技术。实现前端单点登录主要依赖于后端的支持和一些特定的协议,如OAuth、Ope…

使用Github Actions自建Docker镜像仓库

使用Github Actions自建Docker镜像仓库 背景使用Github Actions自建Docker镜像仓库fork项目[docker_image_sync](https://github.com/xqxyxchy/docker_image_sync)获取云厂商容器镜像服务信息配置github secrets运行github action配置需要同步的镜像同步后效果华为云配置 背景 …

一.1.(3)半导体二极管基本电路的分析方法及常见应用电路

1.二极管基本电路的分析方法 先标正负极,再看是否理想二极管 将二极管视为断路,求两端电压 两端电压均大于导通电压,压差大的先导通(由于电源不是完全的阶跃,而是有一个电压爬升的过程) 2.常见应用电路 1.求…

V3.76 ViVaCut高级版本!已经开启永久订阅!一款专业视频剪辑软件

在短视频和社交媒体盛行的今天,视频内容的创作和分享已经成为人们日常生活的一部分。为了满足广大视频创作者的需求,一款专业视频剪辑软件应运而生,以其强大的功能和用户友好的界面,为用户提供了全新的视频编辑体验。他提供了众多…

网易游戏员工怒怼丁磊上热搜:每天员工陪你演戏点赞有意思吗

【头部财经】近日,网易游戏一员工在内部群怒怼丁磊的聊天记录曝光,引发网友关注。据头部财经了解,该员工名叫石佳煊,是网易游戏的游戏开发工程师,毕业于华盛顿大学,已在网易工作四年多。 截图显示&#xf…

Debezium报错处理系列之第109篇:解决升级日志解析jar包重启集群出现的字段类型和值不匹配的错误

Debezium报错处理系列之第109篇:解决升级日志解析jar包重启集群出现的字段类型和值不匹配的错误 一、完整报错二、错误原因三、解决方法Debezium从入门到精通系列之:研究Debezium技术遇到的各种错误解决方法汇总: Debezium从入门到精通系列之:百篇系列文章汇总之研究Debezi…

微信小程序的农产品商城-计算机毕业设计源码46732

摘 要 随着社会经济的发展和人们消费观念的升级,农产品电商行业逐渐壮大。但传统的农产品销售模式存在信息不透明、中间环节复杂等问题,而微信小程序作为一种便捷的移动应用平台,为农产品商城的建设提供了新的可能性。通过微信小程序的设计与…

2.5 C#视觉程序开发实例1----IO_Manager实现脉冲输出控制

2.5 C#视觉程序开发实例1----IO_Manager实现脉冲输出控制 1 目标效果视频 目标效果展示 IO_Manager 2 信号输出流程说明 为了防止线程不同步导致输出信号没有被输出, 尽量使用一个输出队列来进行输出的管理 3 IO_Manager中添加内容 3.0 添加两个类 1 Out_Sta…

【SpringBoot】SpringBoot内置Servlet容器源码分析-Tomcat

自动装配加载 ServletWebServerFactoryAutoConfiguration 在自动装配的时候,会加载spring.factories,并且添加到IOC容器中。这里包含web自动配置类ServletWebServerFactoryAutoConfiguration ,其中本类中注入三个bean,分别是Embed…

vue2 data内对象引用另一个data对象无法使用this的解决办法

背景:data内有一复杂对象,并且内部一属性经常修改,每次修改的话属性.属性会很长,所以希望引用另一简单对象,但data内this用不了。(集合数组是地址引用,基本数据类型这么操作没意义) 如: 解决办法…

【人工智能】-- 智能机器人

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉机器人介绍 🍈机器人硬件 🍍机械结构 🍍传感器 🍍控…

2024年江苏省研究生数学建模科研创新实践大赛C题气象数据高精度融合技术研究论文和代码分析

经过不懈的努力, 2024年江苏省研究生数学建模科研创新实践大赛C题气象数据高精度融合技术研究论文和代码已完成,代码为C题全部问题的代码,论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解(问题1模型的建…

高效管理个人日程,智慧校园行政办公全指南

在智慧校园的行政办公体系里,个人日程管理功能担当起协调与优化每位教职员工日常安排的角色,它像一位贴心的时间助理,确保工作与私人生活的和谐并进。这一功能设计得既直观又灵活,让使用者能以自己偏好的视角审视时间规划&#xf…

Gradient Descent

在整个maching learning的第三个步骤要找一个最好的function。在第二步是定义了一个 Loss function L,这个L是一个function的fuction 求完偏微分之后得到的向量就是Gradient(黄色部分) 随机找一个起始点0,它的等高线的法线方向就…

绝区壹--LLM的构建模块

前言 语言是人类交流的本质,大型语言模型 (LLM) 凭借其出色的理解和生成类似人类的文本的能力,彻底改变了我们与语言互动和利用语言的方式。深入研究 LLM 的构建块(向量、标记和嵌入),揭示了使这些模型能够以前所未有…

Nginx的安装与配置 —— Linux系统

一、Nginx 简介 1.1 什么是 Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务…

layui-表单(输入框)

1.基本使用方法 先写一个表单元素块 form 加上layui-form 里面写行区块结构,如下: 2.输入框选项 placeholder默认文本 autocomplete自动填充 lay-verify required必填

如何监控和分析 PostgreSQL 中的查询执行计划?

文章目录 一、为什么监控和分析查询执行计划很重要二、PostgreSQL 中用于获取查询执行计划的方法三、理解查询执行计划的关键元素四、通过示例分析查询执行计划五、优化查询执行计划的常见策略六、使用工具辅助分析七、结合实际案例的详细分析八、总结 在 PostgreSQL 数据库中&…