44物体检测算法:R-CNN,SSD,YOLO【动手学深度学习v2】

news2024/9/28 23:30:30

44物体检测算法:R-CNN,SSD,YOLO【动手学深度学习v2】

深度学习学习笔记
学习视频:https://www.bilibili.com/video/BV1if4y147hS/?spm_id_from=333.337.search-card.all.click&vd_source=75dce036dc8244310435eaf03de4e330

目标检测中的常用算法,首先是区域卷积神经网络,最早的模型是R-CNN(居于区域的CNN)。

R-CNN

启发式搜索算法来选择锚框:选出很多锚框之后,对每个锚框当做一张图片,使用训练好的模型来抽feature,训练一个SVM来对类别进行分类。使用线性回归来预测锚框与真实框的偏移。
在这里插入图片描述
锚框选择后,怎么保证锚框能变成一个batch,使用办法为兴趣区域池化(RoI 池化): 将一个锚框均匀切分成 nm 块,输出每块中的最大值,做 RoI Pooling,输出nm个值,这样不同的锚框会输出同样大小的batch。
在这里插入图片描述

之后出现的模型是 Fast RCNN

Fast RCNN

改进:一张图片抽1000个锚框的话,要用1000次CNN抽取feature,那么计算量就太大了,Fast RCNN 首先对图片抽feature,对整张图片抽,而不是对一个锚框,然后再在图片上搜锚框,将锚框映射到CNN上面,再得到更小的锚框,之后用RoI pooling上对每个锚框抽取特征,最后到全连接层,在上面对每个锚框做预测和与真实边缘框的偏移。

主要地方是不是对每个锚框做抽取,而是对整个图片做抽取。再在抽取的特征上面再找锚框抽feature,之后就做预测了。
在这里插入图片描述

Faster RCNN

用神经网络替代之前的选择性抽取算法。

图片输入进CNN,把CNN的输出(再做一次卷积,然后生成很多的锚框,进行一次二分类训练,来预测这个锚框到底有没有框住物体和计算真实边界框之间的差别,输出一些好的锚框)送到RoI pooling ,最后对锚框中的物体预测和真实边框差别计算。(做了两次预测,一次糙一点的,一次精确一点的预测)。
在这里插入图片描述
Faster RCNN 精度很高,主要应用在对精度关注特别高时。工业界大多数更关心速度。
在这里插入图片描述

Mask RCNN

跟fast RCNN 没有太大区别,新变化为:如果有像素级标号,对每个像素做预测。 对RoI出来的东西,进行FCN和Mask预测。
RoI align
在这里插入图片描述
在这里插入图片描述

单发多框检测(SSD)

核心思想:RCNN主要是做了两个预测,SSD就只做一次预测。
SSD现在用的不多。

主要思想:对每个像素,以每个像素为中心生成多个锚框(与锚框那节生成方式一样)。
在这里插入图片描述
SSD模型:对给定的那些锚框,直接做预测。输入图片,先CNN抽取特征,每个像素生成多个锚框,每个锚框变成一个样本,进行预测类,判断是圈出了背景还是类并且计算与真实锚框之间的差别。SSD通过在多个分辨率下抽取特征,下层拿到比较大的输出,越到上层越小,在底层检测一些小的物体,在上面就检测 到大的物体。

在这里插入图片描述
SSD 相对来说速度比较快,但精度不太高。
在这里插入图片描述
在这里插入图片描述

YOLO (你只看一次)

YOLO 追求的是快,也是一个单神经网络的算法。
尽量让锚框不重叠,将一张图片均匀成多块,每一块就是一个锚框。
在这里插入图片描述
如绿色部分,一个块就是一个锚框。
每个锚框会去b个边缘框(也就是b个物体都和这个锚框很近)(最原始的做法,后面v2 v3 等等有些改进)。
在这里插入图片描述
Yolo v3 使用很多别的trick性能会提高, 比faster RCNN 要快很多。
在这里插入图片描述

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

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

相关文章

使用Springboot 2.7+Websocket+js实现服务端消息实时推送

文章目录诉求相关技术相关步骤项目创建编写相关配置消息逻辑处理使用JavaScript实现Websocket的前端功能功能测试诉求 模拟服务端主动推送消息给客户端,同时展示客户端发送给客户端的消息以及服务端推送给客户的消息。 相关技术 Springboot(2.7.0)Websocketjavascr…

Elasticsearch7.8.0版本入门——JavaAPI操作(文档操作)

目录一、pom文件依赖二、创建实体对象类三、文档操作代码示例3.1、创建文档代码示例3.2、修改文档代码示例3.3、查询文档代码示例3.4、删除文档代码示例一、pom文件依赖 引入相关依赖 <!-- elasticsearch 依赖 --> <dependency><groupId>org.elasticsearch&l…

【Pytorch】自定义autograd函数,使用graphviz画出计算图

使用pytorch.autograd.Function构建一个自动求导层1. 手工设计一个线性运算层2. 使用pytorch.autograd.Function编码实现3. graphviz进行可视化1. 手工设计一个线性运算层 设输入为x\bold{x}x&#xff0c;参数为w\bold{w}w和b\bold{b}b&#xff0c;运算如下&#xff1a; yw⊙x…

Tips for Confluence Administrators: Part 3

上一篇Part 2中&#xff0c;我们谈到了Confluence的一些已知Bug&#xff0c;例如&#xff1a;从垃圾桶中恢复同名页面不应覆盖现有页面复制/粘贴表格单元格无法按预期工作无法复制表头嵌套表格无法调整大小请不要吝惜你的投票&#xff0c;这有助于提高Atlassian修复它们的优先级…

四、Maven详细教程

本教程相关资料&#xff1a;https://www.aliyundrive.com/s/wMiqbd4Zws6 Maven是专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构 提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xf…

MacOs安装Redis并设置为开机、后台启动

前言 最近闲来无事&#xff0c;将自己的MBP系统重装里&#xff0c;导致里面原来安装的软件都需要重新安装&#xff0c;今天记录一下MacOs安装Redis并设置为开机启动、后台启动的步骤&#xff0c;安装过程略有波折&#xff0c;参考里几篇文章才搞定。 一、安装Redis 两种方式…

【JavaEE】线程池

目录 线程池概念 线程池优点 使用线程池 Executor接口&#xff1a; ThreadPoolExecutor类&#xff1a; 构造方法 Executors工厂类&#xff1a; 工厂方法 线程池中的常用方法 线程池的工作流程 线程池的状态 RUNNING SHUTDOWN STOP TIDYING TERMINATED 简单实现…

Android10 开机向导流程

最近在弄开机向导&#xff0c;网上查了查&#xff0c;基本都是参照系统的​​​​​​Provision应用来做的&#xff0c;而且还要将apk打包到系统目录下的pri-app目录下&#xff0c;打包到其他目录下不行&#xff0c;参照着做是没问题&#xff0c;但是好奇为什么要这么做&#x…

esp32连接阿里云物联网平台进行MQTT通信

前提&#xff1a;IDE是采用arduino IDE&#xff0c;arduino使用的库是pubsubclient 开发板可以使用esp32&#xff08;esp8266也是一样的&#xff09; 已经学会pubsubclient库的基本使用 使用pubsubclient 库连接阿里云物联网平台 const char* ssid "........"; c…

java ssm校园勤工俭学助学志愿者兼职系统 idea maven

本论文主要论述了如何使用JSP技术开发一个校园勤工俭学兼职系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述校园勤工俭学兼职系统的当前背景以及系统开发的…

使用CCProxy+Proxifier实现代理

目录1.使用场景2.什么是网络代理&#xff1f;3.CCProxy3.1 说明3.2 下载安装3.3 使用说明4.Proxifier4.1 说明4.2 下载安装4.3 使用说明4.4 Proxifier CPU占用率高问题解决1.使用场景 很多时候当我们访问某个网络&#xff08;例如&#xff1a;校园网、企业网&#xff09;&#…

射频识别技术|期末考试知识点|重点题目|第1讲_RFID

课堂笔记 1.RFID技术 标签(芯片、天线、封装) 读写器 中间件和系统软件 公共服务体系 2.IC&ID

使用原始命令编译打包部署springboot-demo项目

目录简介源文件介绍编译编译restful-common编译manual-springboot打包&部署&执行jar命令介绍不打包直接运行打普通jar包&#xff0c;通过java -jar运行打fat jar通过java -jar打war&#xff0c;通过部署至tomcat运行纯手工命令开发打包部署的缺点参考简介 本文将使用j…

CUDA编程笔记(7)

文章目录前言共享内存的合理使用数组归约计算使用全局内存的计算引入线程块中的同步函数使用共享内存计算静态共享内存使用动态共享内存性能比较避免共享内存的bank冲突使用共享内存进行数组转置bank概念性能比较总结前言 cuda共享内存的合理使用。 共享内存的合理使用 共享…

TF-A移植

1.对tf-a源码进行解压 $> tar xfz tf-a-stm32mp-2.2.r2-r0.tar.gz 2.打补丁 $> for p in ls -1 ../*.patch; do patch -p1 < $p; done 3.配置交叉编译工具链 将Makefile.sdk中EXTRA_OEMAKE修改为 EXTRA_OEMAKECROSS_COMPILEarm-linux-gnueabihf- 4.复制设备树…

linux 部署jmeter

一、linux 安装jdk Java Downloads | Oracle 二、 linux上传jmeter 2.1 上传jmeter jmeter 下载地址&#xff1a; Apache JMeter - Download Apache JMeter 注意&#xff1a; 我先在我本地调试脚本&#xff08;mac环境&#xff09;&#xff0c;调试完成后&#xff0c;再在…

前端首屏优化

一. 打包分析 在 package.json 中添加命令 “report”: “vue-cli-service build --report” 然后命令行执行 npm run report&#xff0c;就会在dist目录下生成一个 report.html 文件&#xff0c;右键浏览器中打开即可看到打包分析报告。 二. 路由懒加载 component: () >…

MacOS - steam 蒸汽平台安装教程,带你躲避高仿网站的陷阱

MacOS - steam 蒸汽平台安装教程 MacOS 其实也是可以安装 Steam 平台的&#xff0c;虽然 steam 上的大多游戏暂时都不支持 MacOS&#xff0c;但还是有一些游戏可以玩的&#xff0c;而且近几年支持 MacOS 的游戏也是越来越多了。另外现在高仿网站特别多&#xff0c;所以才有了这…

transformer库使用

Transformer库简介 是一个开源库&#xff0c;其提供所有的预测训练模型&#xff0c;都是基于transformer模型结构的。 Transformer库 我们可以使用 Transformers 库提供的 API 轻松下载和训练最先进的预训练模型。使用预训练模型可以降低计算成本&#xff0c;以及节省从头开…

Grafana 系列文章(三):Tempo-使用 HTTP 推送 Spans

&#x1f449;️URL: https://grafana.com/docs/tempo/latest/api_docs/pushing-spans-with-http/ &#x1f4dd;Description: 有时&#xff0c;使用追踪系统是令人生畏的&#xff0c;因为它似乎需要复杂的应用程序仪器或 span 摄取管道&#xff0c;以便 ... 有时&#xff0c;使…