66.物体检测算法:区域卷积神经网络(R-CNN)系列

news2024/11/25 14:48:09

1. R-CNN

在这里插入图片描述
ps:在计算机视觉中,深度学习之前,分类器用的是SVM

2. 兴趣区域(RoI)池化层

在这里插入图片描述
在这里插入图片描述
目的是为了让每个锚框都可以变成一个自己想要的形状。

3. Fast RCNN

在这里插入图片描述
具体步骤如下:

  1. 对整张图片用CNN抽特征(ps:不是对锚框抽特征),并且抽特征不需要头,就得到7 x 7或者14 x 14的feature map
  2. 再用选择性搜索在原始图片中搜索到锚框,再把它映射到CNN的输出,CNN的输出是一个feature map,把原图的锚框在feature map中按比例映射。
  3. 再用RoI Pooling对每个锚框抽取特征,假设如图中所示,抽取之后变成两个长为4的向量。图中黄色框框区域可以把一张图片(100个锚框)变成一个100 x 4的向量,这里先不管通道数。
  4. 之后再进入全连接层,(注意这里100是100个样本),做分类预测和锚框预测

比之前R-CNN快的原因:不再是对每一个锚框抽取特征,是对整个图片进行特征抽取。

4. Faster R-CNN

使用一个区域提议网络(Region proposal network)来替代之前的启发式搜索来获得更好的锚框。

在这里插入图片描述

具体来说,区域提议网络的计算步骤如下:

  1. 使用填充为1的的3 x 3卷积层变换卷积神经网络的输出,并将输出通道数记为c。这样,卷积神经网络为图像抽取的特征图中的每个单元均得到一个长度为c的新特征。

  2. 以特征图的每个像素为中心,生成多个不同大小和宽高比的锚框并标注它们。

  3. 使用锚框中心单元长度为c的特征,分别预测该锚框的二元类别(含目标还是背景)和边界框。

  4. 使用非极大值抑制,从预测类别为目标的预测边界框中移除相似的结果。最终输出的预测边界框即是兴趣区域汇聚层所需的提议区域。

5. Mask R-CNN

如果有像素级别的标号,使用FCN来利用这些信息

在这里插入图片描述
Mask R-CNN是基于Faster R-CNN修改而来的。 具体来说,Mask R-CNN将兴趣区域汇聚层替换为了 兴趣区域对齐层,使用双线性插值(bilinear interpolation)来保留特征图上的空间信息,从而更适于像素级预测。 兴趣区域对齐层的输出包含了所有与兴趣区域的形状相同的特征图。 它们不仅被用于预测每个兴趣区域的类别和边界框,还通过额外的全卷积网络预测目标的像素级位置

RoI Pooling改成了RoI align,因为RoI Pooling对于像素级别不适用,会可能生成像素级的偏移,会导致在边界的地方是预测不准标号的。

RoI align 则是不像之前分割成4、2、2、1,而是直接在中间切开,沿着左右对称的对称轴切开,和上下对称的对称轴切开,这样会存在把一个像素分割的可能,然后再取出一个像素的一小部分。

6. 模型精度比较

在这里插入图片描述

从图中可以看出,Faster RCNN精度很高,但是处理很慢。

7. 总结

  • R-CNN是最早、也是最有名的一类基于锚框和CNN的目标检测算法
  • Faster/Faster R-CNN持续提升性能
  • Faster R-CNN和Mask R-CNN是在最求最高精度场景下的常用算法(Mask R-CNN在无人机中应用比较多)

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

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

相关文章

IT服务管理(ITSM)是什么?ITSM工具哪个好用

什么是IT服务管理(ITSM) IT 服务管理 (ITSM) 包含一组策略和实践,这些策略和实践可用于为最终用户实施、交付和管理 IT 服务,以满足最终用户的既定需求和企业的既定目标。 在此定义中,最终用户可以包含员工、客户或业…

一网打尽链表的经典OJ题!链表必考笔试题第一弹

目录 0.前言 1. 移除链表元素 2. 反转链表 2.1 方法一(遍历反转链接关系) 2.2 方法二(节点头插构造新链表) 3.链表的中间节点 4. 链表中倒数第k个节点 5. 总结 0.前言 本文所有代码都已传入gitee,可自取 3链表OJ题p1 onlookerzy123456qwq/data_structu…

使用Electron创建桌面程序,从创建到打包

在桌面程序中,使用C#语言可以创建winform和WPF程序,他们2个在Windows中都非常的优秀,还有就是使用QT开发桌面,可以跨平台开发,这三种都是比较“正规”的,而Electron是使用框架开发桌面程序的,还…

JDBC核心技术_第9章:Apache-DBUtils实现CRUD操作

目录9.1 Apache-DBUtils简介9.2 主要API的使用9.2.1 DbUtils9.2.2 QueryRunner类9.2.3 ResultSetHandler接口及实现类9.1 Apache-DBUtils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低&#xff0…

硬件设备上也能安全运行小程序

当前,在百度、支付宝、今日头条等各大巨头都把持小程序技术尚未开放的情况下,市面上可商用的小程序技术选择面非常狭窄。与此同时,企业仍希望实现 “一次开发,多端运行”,从而真正达到降本增效。今天为大家分享一下&am…

【c++复习梳理】--基础入门语法

目录 1.函数重载 1.1 函数重载概念 1.2C支持函数重载的原理--名字修饰(name Mangling) 2.引用 2.1 引用概念 2.2 引用特性 2.3 常引用 2.4 使用场景 2.4.1 做参数 2.4.2 做返回值 2.5 传值、传引用效率比较 2.5.1 传值、传引用效率比较--做参数返回 2.5.2 值和引用…

Linux--进程地址空间在线程方面的补充--页表的操作模式 0109

上一篇有关地址空间的博客 (入门自用)--Linux--程序地址空间--程序的创建--0907-0913_Gosolo!的博客-CSDN博客 很久之前写的,最近会完善。 1. 进程地址空间在线程方面的补充 线程由于资源都是从主进程直接拿来的,所以他们的pcb结构体中的地址…

如何让 Shell 提示符更酷炫

使用远程终端时,默认的命令行提示符格式已经能满足大部分用户需求了,但有时我们希望提示符看起来更直观、优雅、酷炫、美观,可以从中直接得到我们想要的信息,而且清晰分明。本文就详细讲解一下如何让 Shell 提示符更酷炫&#xff…

13_9、Java的IO流之NIO.2中Path、Paths、Files类的使用

一、引入1、Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的…

cinder对接nfs后端存储

1.部署配置流程 1.安装nfs服务端 可以新增一个节点,或直接使用计算节点,因为存储节点上已经有lvm了这里直接使用计算节点来安装 yum install nfs-utils -y2.修改配置 vi /etc/exports # 要共享的目录 允许的网络1(操做权限) 允许的网络2(操做权限) …

Mybatis源码分析(八)MapperMethod的Select分析

目录一 Select1.1 参数的对应解析convertArgsToSqlCommandParam1.2 ID获取对应的MappedStatement1.3 MappedStatement交给执行器执行1.4 根据参数获取BoundSql1.5 SqlNode节点的解析1.5.1 MixedSqlNode1.5.2 IfSqlNode1.5.3 StaticTextSqlNode1.5.4 TextSqlNode1.6 执行器执行查…

Delete `␍`eslint(prettier/prettier) 错误的解决方案

Delete ‘␍’ eslint(prettier/prettier) 错误的解决方案 问题背景 在Windows笔记本上新拉完代码,在执行pre-commit时,出现如下错误: Delete ␍eslint(prettier/prettier)下面是几种个人尝试过的解决方案: 解决方案 一、Crtl…

【自学Python】Python bytes转string

Python bytes转string Python string转bytes教程 在 Python 中,bytes 类型和 字符串 的所有操作、使用和内置方法也都基本一致。因此,我们也可以实现将 bytes 类型转换成 string 类型。 Python bytes转string方法 Python bytes 转 string 方法主要有…

effective c++读书笔记4

设计class犹如设计type新type的对象应该如何被创建和销毁?:这会影响到你的class的构造函数和析构函数以及内存分配函数和释放函数的设计。对象的初始化和对象的赋值有什么样的区别?这答案决定你的构造函数和赋值操作符的行为,以及…

分享一套Springboot个人博客系统源码带本地搭建教程

Springboot个人博客系统源码带本地搭建教程,需要源码学习可私信我获取。 技术架构 前端框架:JQuery SemanticUI Markdown prism animatecss Tocbot zplayer lightbox 后端框架:SpringBoot 2.2.5 Mybatis Thymeleaf PageHelper m…

基于JAVA SSM springboot实现的抗疫物质信息管理系统设计和实现

基于JAVA SSM springboot实现的抗疫物质信息管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 …

记录一次Spring事务线上异常

Spring事务管理配置方式: XML模糊匹配,绑定事务管理注解,可对每个需要进行事务处理的方法单独配置,只需 Transactional,然后添加属性配置 为简便,本文使用注解方式。Spring初始化时,会通过扫描…

C进阶:通讯录(动态版本 + 文件操作)附源码

本文主要讲解通讯录的代码; 需要拥有结构体,动态内存开辟,文件操作的知识; 目录 🐲一.通讯录思路 🕊️二.三个文件的建立 😼三.所需要使用的变量的创建(包含在头文件contact.h中&…

从0到1完成一个Vue后台管理项目(十三、信息列表页面实现:对话框新增、DateTimePicker 日期时间选择器)

往期 从0到1完成一个Vue后台管理项目(一、创建项目) 从0到1完成一个Vue后台管理项目(二、使用element-ui) 从0到1完成一个Vue后台管理项目(三、使用SCSS/LESS,安装图标库) 从0到1完成一个Vu…

JavaScript 事件流

文章目录JavaScript 事件流概述事件冒泡简介onclick() 事件冒泡addEventListener() 事件冒泡stopPropagation() 阻止事件冒泡事件捕获简介addEventListener() 事件捕获W3C标准事件流取消事件默认行为取消使用对象属性绑定的事件的默认行为取消使用addEventListener()绑定的事件…