一口气拿下Faster-RCnn三部曲系列01:Selective Search 和 R-CNN、Fast-CNN 简介

news2024/10/6 8:16:54

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/1900378.html

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

相关文章

招聘一个1-3年经验的Java工程师:企业视角的技能与素质要求

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

es6新语法

es6新语法 1 什么是ES6 JS语法分三块 ECMAScript : 基础语法BOM 浏览器对象 history location windowDOM 文档对象 document 编程语言JavaScript是ECMAScript的实现和扩展 。ECMAScript是由ECMA(一个类似W3C的标准组织)参与进行标准化的语法规范。ECMAS…

python 实现docx指定语言翻译(不丢失格式)

我这边有个需求需要把一份docx翻译成指定语言的文档并且保存,研究了下,记录。 首先先安装依赖 pip install python-docx1.1.2 googletrans4.0.0rc1 python-docx是用来读取docx的,googletrans使用来翻译的。 googletrans PyPI 这个是官方文…

MATLAB 2024b 更新了些什么?

MATLAB 2024b版本已经推出了预览版,本期介绍一些MATLAB部分的主要的更新内容。 帮助浏览器被移除 在此前的版本,当我们从MATLAB中访问帮助文档时,默认会通过MATLAB的帮助浏览器(Help browser)。 2024b版本开始&…

uniapp 去掉小数末尾多余的0

文章目录 在uniapp或者一般的JavaScript环境中,要去掉小数末尾的0,可以使用以下几种方法: 使用parseFloat()函数 let num 123.4500; let result parseFloat(num); console.log(result); // 输出: 123.45字符串处理 将数字转换为字符串&am…

js的作用域链

function test(){} 运行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是 独一无二的,所以多次调用一个函数对导致创建多个执行上下…

在pycharm里如何使用Jetbrains AI Assistant

ai assistant激活成功后,如图 ai assistant渠道:https://web.52shizhan.cn/activity/ai-assistant 在去年五月份的 Google I/O 2023 上,Google 为 Android Studio 推出了 Studio Bot 功能,使用了谷歌编码基础模型 Codey,Codey 是…

云联壹云 FinOps:赋能某车企公有云成本管理与精细化运营

背景 某车企,世界 500 强企业,使用了大量的公有云资源,分布于多家公有云,月消费在千万级别。 业务线多且分散,相关的云消耗由一个核心团队进行管理,本次案例的内容将围绕这些云成本的管理展开的。 需求 …

Google重大更新--解读Android Auto认证4.3

Google在今年五月更新了Android Auto 4.2.2版本,而在2024年7月他们推出了Android Auto 4.3版本,这是自2023年9月以来对Android Auto 4.2版本的一次重大更新。 为了确保合规性和顺利认证,OEM和Tire1必须确保PDK组件版本与正在认证的主机的Rece…

如何魔改vnstat-docker项目使其支持每1分钟采样?

文章目录 一、概述二、官网参考1. 官网地址2. 查看打包过程3.打包命令 三、修改过的文件四、部署运行1. 编排文件2. 运行效果 一、概述 接前文 网络流量监控神器vnStat初探 我们已经了解了vnStat的作用、使用和docker部署。 同时也了解到官方版本支持的采样统计间隔最小为5分…

Mysql数据库索引、事务相关知识

索引 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现 查看索引 show index from 表名;创建索引对于非主键、非唯一约束、非外键的字段&#…

制作Ai 数字人和数字人带货全面拆解复盘

看了后不用再花高价钱去买怎么制作数字人 .数字人带货的相关教程了 市面上基本都是通过这几个方法制作的数字人 超级详细 值得注意的是 拆解的太详细 仅供正规个人用途哦 请勿用于任何非法操作 否则 就不用接着往下看了 点击获取完整版资料

Python基础小知识问答系列-高效遍历多个不同类型元素的迭代器

1. 问题: 当需要对多个迭代器进行相同遍历操作时,如何避免因为迭代器之间的类型或者迭代器元素 数量过大引发的问题? 2. 解决方法: 使用itertools模块中的chain函数。 示例: from itertools import chainlist_a [2,…

炫云云渲染平台:解锁设计师无限创意的魔法钥匙

在数字创意的浩瀚宇宙中,设计师们如同星辰般璀璨,他们以无尽的想象力和精湛的技能,绘制出一幅幅令人叹为观止的视觉盛宴。然而,在追求完美的道路上,复杂的渲染过程往往成为制约创意飞跃的瓶颈。这时,炫云云…

2024菜鸟春招笔试

第一题 解题思路: 签到题,把帖子按好评度降序排列,再将人按升序排列。 第二题 解题思路 从左到右遍历,如果当前元素没有错排,将其与后一个交换,这样两个元素一定都错排。 第三题 、 解题思路 这题当时暴力…

前端面试题21(js排序方法)

JavaScript 中有多种内置和自定义的排序方法。内置的 .sort() 方法是最直接的排序方式,而自定义排序算法如冒泡排序、选择排序、插入排序、希尔排序、快速排序等则提供了更深层次的学习和应用价值。下面我将详细介绍这些排序方法,并给出相应的示例代码。…

大学生电子设计大赛超全资料分享

超全大学生电子设计大赛项目合集免费分享 电赛竞赛资料大全,新增竞赛空间电子设计资料。包含嵌入式硬件和软件开发的学习资料,包括PCB教程,单片机例程, 单片机课程设计毕业设计参考资料、项目设计方案,源码和开发文档…

观察矩阵(View Matrix)、投影矩阵(Projection Matrix)、视口矩阵(Window Matrix)及VPM矩阵及它们之间的关系

V表示摄像机的观察矩阵(View Matrix),它的作用是把对象从世界坐标系变换到摄像机坐标系。因此,对于世界坐标系下的坐标值worldCoord(x0, y0, z0),如果希望使用观察矩阵VM将其变换为摄像机坐标系下的坐标值localCoord(x…

基于java+springboot+vue实现的流浪动物管理系统(文末源码+Lw)277

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对流浪动物信息管理的提升&…

【Linux】:进程创建与终止

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux程序地址空间的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从…