深度学习基础--目标检测常见算法简介(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO)
博主简介:努力学习的22级本科生一枚 🌟;探索AI算法,C++,go语言的世界;在迷茫中寻找光芒🌸
博客主页:羊小猪~~-CSDN博客
内容简介:常见目标检测算法简介😕😕😕😕😕😕😕😕😕
往期内容:深度学习基础–目标检测入门简介-CSDN博客
文章目录
- 1、tow-stage
- R-CNN
- Fast R-CNN
- Faster R-CNN
- Mask R-CNN
- 2、one-stage
- 单发多宽检测(SSD)
- YOLO
- 3、参考资料
1、tow-stage
R-CNN
最早的目标检测模型。
📖 简介:
传统目标检测的思路,采用提取框,对每个提取框进行特征提取、图像分类、非极大值抑制四个步骤进行检测。
对于一张图片来说,R-CNN首先会基于启发式搜索算法生成大约2000个候选区域,然后每个区域固定大小,并且传入一个CNN模型中,最后得到一个特征向量,这个向量会传到一个SVM模型中,进行类别计算,进行分类,并且,最后运用 了一个边界框回归模型,通过边框回归模型对框的准确位置进行修正。
📚 解释一些名词:
- 启发式搜索,这个算很难,也包含很多算法,简单理解他的作用是在图片上选取物体可能出现的区域框(锚框);
- 非极大值抑制:是一种在目标检测中去除冗余边界框的后处理算法,通过保留局部得分最高的检测框并抑制与其重叠度(IoU)超过阈值的低得分框,实现检测结果的唯一性与精确性;这个在上一篇博客中已经简单介绍了(深度学习基础–目标检测入门简介-CSDN博客),就是去除多余的锚框;
🐾 算法步骤:
- 使用启发式搜索来选择锚框;
- 使用预训练模型来对每个锚框抽取特征;
- 训练一个SVM来对类别进行分类;
- 训练一个线性回归模型来预测边缘框的偏移,这一步就是将锚框来预测他真实的位置(边缘框)偏移;
上面简介中提到每个区域固定大小,但是实际上用启发式算法进行搜索的时候,每次选择的锚框大小是不同的,将不同大小的锚框变成一个统一形状的算法就是Rol pooling;
💁♂ Rol pooling,也称感兴趣域池化层,作用是将大小不一的锚框统一形状。
📘 原理:
给定一个锚框,先将其均匀地分割成 n * m 块,然后输出每块里的最大值,这样的话,不管锚框有多大,只要给定了 n 和 m 的值,总是输出 nm 个值,达到统一形状的作用。
缺点:虽然有效提取了特征,但是速度非常慢,因为在第二个步骤用训练好的模型对每个锚框进行特征提取的时候,计算非常大(因为启发式算法大约生成2000个框)。
Fast R-CNN
🐤R-CNN:
- 对每个锚框分别进行特征提取;
- R-CNN是前向传播的,而且比如说对一张图片划分了2000张锚框,那么在进行特征提取的时候通常会有重叠部分,故导致了从重复计算。Fast R-CNN就是解决这个问题的;
🥅 Fast R-CNN网络图:
🚂 原理简介,与R-CNN对比着看:
-
首先由两进行两部计算,分别是锚框生成、图片特征提取,对应着上图中两条分支:
-
锚框生成:和R-CNN一样;
-
特征提取(CNN):对于一张图片,首先使用CNN对整张图片进行特征提取;
-
-
Rol pooling这里有两步:
- 1️⃣映射:锚框(selective search)按照一定比例映射到特征提取(CNN)的输出上;
- 2️⃣ Rol pooing:这一步和R-CNN一样,统一锚框大小。
-
之后采用一个全连接层进行分类(R-CNN用的是SVM),输出类别。
🚅比R-CNN快的原因:最核心的原因就是只需要对整体图片进行一次特征提取就行了,不需要分别对每个锚框进行特征提取。
Faster R-CNN
这个算法的改进是提出来RPN(区域建议网络)来代替selective search;
🔖 RPN简介:
这个网络学习的时候理解起来还是有难度的😢
🎡 作用:生成大量很差的锚框,然后进行预测,最终输出比较好的锚框供后面网络使用(预测效果好的会进入Rol Pooing);
😿 原理简介:
-
CNN特征提取后,再次运用一次卷积操作,然后用启发式算法搜索来初始化锚框;
-
然后判断锚框是否包含物体,这里分为两步:
- 1️⃣ 分类:RPN对每个锚框进行分类,判断他是否包含目标物体,这里输出的是一个概率值;
- 2️⃣ 回归:调整锚框位置和大小;
-
最后采用NMS对锚框进行筛选。
🉐 特点:精度高,但是计算量巨大,慢。
Mask R-CNN
这个算法是对Faster R-CNN基础上修改而来,他的作用是:解决传统目标检测,即只输出边界框无法提供像素级分割信息的问题。
像素级分割:生成每个物体的精确轮廓掩码.
从图像看的话,对比Fast R-CNN,有两个不同:
- 用Rol align代替Rol pooling;
- 在Rol align上新增一个分支;
这个难度我学的时候也很蒙,感觉好难😢
在学这个网络前,先学一下什么叫做二值掩码:
- 二值掩码是一种由0和1(或255)组成的二值图像,用于标记原始图像中需要关注或操作的区域。上图的右下部分图。
🔬 难度大,梳理一下网络:
- 特征提取
- 输入图像通过卷积神经网络生成特征图。
- 区域建议网络(RPN)
- 在特征图上生成锚框,通过分类和回归生成候选区域,这部分和Fast R-CNN一样。
- RoI Align
- 将候选区域映射到特征图上,使用双线性插值提取固定大小的特征(如 7×77×7 或 14×1414×14),与Rol pooling不同的是映射算法不同。
- 分类与回归分支
- 对每个 RoI 进行分类和边界框修正,这部分和Fast R-CNN一样。
- 掩码分支
- 对每个 RoI 生成二值掩码,最终通过阈值化得到像素级分割结果,先理解为对不同物体分别进行不同颜色可视化即可😭,由于是像素级别的,故大概轮廓也能显示出来。
- 全连接层
- 进行图片分类。
2、one-stage
单发多宽检测(SSD)
👀 先看网络结构:
初看网络结构,可以观察到他也是前向传播的,而且在传播的时候一直进行预测。
👀再看
👓 特点:
-
对给定的锚框直接进行预测,不需要进行两个阶段,这也是为什么比Faster R-CNN快的原因;
-
SSD 通过做不同分辨率下的预测来提升最终的效果,越到底层的 feature map,就越大,越往上,feature map 越少,因此底层更加有利于小物体的检测,而上层更有利于大物体的检测)
😢 缺点:
- 速度快,但是精度不好。
YOLO
➿ 用最多的模型。
📚 解释:
-
尽量让锚框不重叠—–》将图片均匀分成S X S个锚框。
-
每个锚框预测B个边缘框,这个意思是一个锚框可能有多个物体,故在他身边预测多个锚框进行特征提取、分类,如上图中的蓝色圆圈。
YOLO有很多版本,也非常值得学习的。
3、参考资料
- 【44 物体检测算法:R-CNN,SSD,YOLO【动手学深度学习v2】】https://www.bilibili.com/video/BV1Db4y1C71g?vd_source=1fd424333dd77a7d3e2e741f7d6fd4ee
- R-CNN_百度百科
- 李沐动手学深度学习V2-目标检测SSD_深度学习与目标检测 第2版第二版-CSDN博客
相关文章:

深度学习基础--目标检测常见算法简介(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO)
博主简介:努力学习的22级本科生一枚 🌟;探索AI算法,C,go语言的世界;在迷茫中寻找光芒🌸 博客主页:羊小猪~~-CSDN博客 内容简介:常见目标检测算法简介…...
【Python 元组】
Python 中的元组(Tuple)是一种不可变的有序数据集合,用于存储多个元素的序列。与列表(List)类似,但元组一旦创建后无法修改,这种特性使其在特定场景下具有独特优势。 一、核心特性 不可变性&am…...

LINUX CFS算法解析
文章目录 1. Linux调度器的发展历程2. CFS设计思想3. CFS核心数据结构3.1 调度实体(sched_entity)3.2 CFS运行队列(cfs_rq)3.3 任务结构体中的调度相关字段 4. 优先级与权重4.1 优先级范围4.2 权重映射表 (prio_to_weight[])优先级计算4.3.1. static_prio (静态优先级)4.3.2. n…...
智能指针笔记
智能指针,利用class类对象销毁的时候自动调用析构函数,去把delete ptr的操作放在析构函数里,去实现自动释放指针里的资源 RAII是ResourceAcquisition Is Initialization的缩写,他是⼀种管理资源的类的设计思想,本质是 …...

软考-软件设计师中级备考 14、刷题 算法
一、考点归纳 1)排序 2、查找 3、复杂度 4、经典问题 0 - 1 背包动态规划0 - 1 背包问题具有最优子结构性质和重叠子问题性质。通过动态规划可以利用一个二维数组来记录子问题的解,避免重复计算,从而高效地求解出背包能装下的最大价值。分…...
Vue3 中 ref 与 reactive 的区别及底层原理详解
一、核心区别 1. 数据类型与使用场景 • ref 可定义基本类型(字符串、数字、布尔值)和对象类型的响应式数据。对于对象类型,ref 内部会自动调用 reactive 将其转换为响应式对象。 语法特点:需通过 .value 访问或修改数据&#…...
豆包:基于多模态交互的智能心理咨询机器人系统设计与效果评估——情感计算框架下的对话机制创新
豆包:基于多模态交互的智能心理咨询机器人系统设计与效果评估——情感计算框架下的对话机制创新 摘要 随着人工智能在心理健康领域的应用深化,本文提出一种融合情感计算与动态对话管理的智能心理咨询机器人系统架构。通过构建“用户状态-情感响应-策略生成”三层模型,结合…...

Baklib实战企业内容与中台管理差异解析
企业内容管理中台本质差异 企业内容管理系统(CMS)与内容中台的核心差异在于战略定位与技术路径的本质性区隔。传统CMS聚焦于内容存储与审批流程的线性管理,而内容中台则构建起全域数据服务中枢,通过API接口实现跨系统内容资产调用…...

通用外设驱动模型(四步法)
举例:GPIO配置步骤 1、使能时钟 __HAL_RCC_GPIOx_CLK_ENABLE()2、设置工作模式 HAL_GPIO_Init()3、设置输出状态(可选) HAL_GPIO_WritePin() HAL_GPIO_TogglePin()4、读取输入状态(可选) HAL_GPIO_ReadPin()模块…...

IoT无线组网模块,万物互联的底层通信基石
随着物联网(IoT)技术在“快车道”上持续飞驰,一场“交互革命”正在人们的日常出行与工作学习等生活场景中加速爆发。从智能家居到智慧城市,从智慧交通到工业自动化,物联网(IoT)技术凭借着万物互…...
Xterminal(或 X Terminal)通常指一类现代化的终端工具 工具介绍
Xterminal(或 X Terminal)通常指一类现代化的终端工具,旨在为开发者、运维人员提供更高效、更智能的命令行操作体验。 📢提示:文章排版原因,资源链接地址放在文章结尾👇👇ÿ…...
OpenCV 中用于支持 华为昇腾(Ascend)AI 芯片后端 的模块CANN
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cannops 是 OpenCV 中用于支持 华为昇腾(Ascend)AI 芯片后端 的模块,全称为 CANN Operations (CANN Operator…...

learning ray之ray强化学习/超参调优和数据处理
之前我们掌握了Ray Core的基本编程,我们已经学会了如何使用Ray API。现在,让我们将这些知识应用到一个更实际的场景中——构建一个强化学习项目,并且利用Ray来加速它。 我们的目标是,通过Ray的任务和Actor,将一个简单…...

【Linux】深入拆解Ext文件系统:从磁盘物理结构到Linux文件管理
目录 1、理解硬件 (1)磁盘 (2)磁盘的物理结构 (3)磁盘的存储结构 (4)磁盘的逻辑结构 (5)CHS && LBA地址 2、引入文件系统 (1&…...

基于 Ubuntu 24.04 部署 WebDAV
无域名,HTTP 1. 简介 WebDAV(Web Distributed Authoring and Versioning)是一种基于 HTTP 的协议,允许用户通过网络直接编辑和管理服务器上的文件。本教程介绍如何在 Ubuntu 24.04 上使用 Apache2 搭建 WebDAV 服务,无…...
人工智能基础知识笔记八:数据预处理
1、简介 在进行数据分析之前,数据预处理是一个至关重要的步骤。它包括了数据清洗、转换和特征工程等过程,以确保数据的质量并提高模型的性能。数据预处理是机器学习和数据分析中至关重要的步骤,其中分类变量的编码是核心任务之一。本文…...

tauri-plugin-store 这个插件将数据存在本地电脑哪个位置
tauri-plugin-store 插件用于在 Tauri 应用中以键值对形式持久化存储数据。它将数据存储在用户本地电脑的一个 JSON 文件中,具体路径取决于操作系统,并且通常位于操作系统的应用数据目录中。 默认存储位置 以默认配置为例(使用 default sto…...

一场陟遐自迩的 SwiftUI + CoreData 性能优化之旅(下)
概述 自从 SwiftUI 诞生那天起,我们秃头码农们就仿佛打开了一个全新的撸码世界,再辅以 CoreData 框架的鼎力相助,打造一款持久存储支持的 App 就像探囊取物般的 Easy。 话虽如此,不过 CoreData 虽好,稍不留神也可能会…...

数字人驱动/动画方向最新顶会期刊论文收集整理 | AAAI 2025
会议官方论文列表:https://ojs.aaai.org/index.php/AAAI/issue/view/624 以下论文部分会开源代码,若开源,会在论文原文的摘要下方给出链接。 语音驱动头部动画/其他 EchoMimic: Lifelike Audio-Driven Portrait Animations through Editabl…...
Java+Selenium+快代理实现高效爬虫
目录 一、前言二、Selenium简介三、环境准备四、代码实现4.1 创建WebDriver工厂类4.2 创建爬虫主类4.3 配置代理的注意事项 六、总结与展望 一、前言 在Web爬虫技术中,Selenium作为一款强大的浏览器自动化工具,能够模拟真实用户操作,有效应对…...

数据结构 集合类与复杂度
文章目录 📕1. 集合类📕2. 时间复杂度✏️2.1 时间复杂度✏️2.2 大O渐进表示法✏️2.3 常见的时间复杂度量级✏️2.4 常见时间复杂度计算举例 📕3. 空间复杂度 📕1. 集合类 Java 集合框架(Java Collection Framework…...

Python学习笔记--Django的安装和简单使用(一)
一.简介 Django 是一个用于构建 Web 应用程序的高级 Python Web 框架。Django 提供了一套强大的工具和约定,使得开发者能够快速构建功能齐全且易于维护的网站。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1…...

SecureCRT网络穿透/代理
场景 公司的办公VPN软件只有Windows系统版本,没有Macos系统版本,而日常开发过程中需要先登录VPN后,然后才能登录应用服务器。 目的:Macos系统在使用SecureCRT时,登录服务器,需要走Parallels Desktop进行网络…...

视频添加字幕脚本分享
脚本简介 这是一个给视频添加字幕的脚本,可以方便的在指定的位置给视频添加不同大小、字体、颜色的文本字幕,添加方式可以直接修改脚本中的文本信息,或者可以提前编辑好.srt字幕文件。脚本执行环境:windowsmingwffmpeg。本方法仅…...

OrangePi Zero 3学习笔记(Android篇)4 - eudev编译(获取libudev.so)
目录 1. Ubuntu中编译 2. NDK环境配置 3. 编译 4. 安装 这部分主要是为了得到libudev(因为原来的libudev已经不更新了),eudev的下载地址如下: https://github.com/gentoo/eudev 相应的代码最好是在Ubuntu中先编译通过&#…...
JavaSE核心知识点02面向对象编程02-04(包和导入)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点02面向对象编程02-04&#…...
【Git】查看tag
文章目录 1. 查看当前提交是否有tag2. 查看最近的tag3. 查看所有tag 有时候需要基于某个tag拉分支,记录下怎么查看tag。 1. 查看当前提交是否有tag git tag --points-at HEAD该命令可直接检查当前提交(HEAD)是否关联了任何tag。 若当前提交…...

华为昇腾910B通过vllm部署InternVL3-8B教程
前言 本文主要借鉴:VLLM部署deepseek,结合自身进行整理 下载模型 from modelscope import snapshot_download model_dir snapshot_download(OpenGVLab/InternVL3-8B, local_dir"xxx/OpenGVLab/InternVL2_5-1B")环境配置 auto-dl上选择单卡…...

upload-labs靶场通关详解:第三关
一、分析源代码 代码注释如下: <?php // 初始化上传状态和消息变量 $is_upload false; $msg null;// 检查是否通过POST方式提交了表单 if (isset($_POST[submit])) {// 检查上传目录是否存在if (file_exists(UPLOAD_PATH)) {// 定义禁止上传的文件扩展名列表…...

星光云720全景VR系统升级版,720全景,360全景,vr全景,720vr全景
星光云720全景VR系统升级版,720全景,360全景,vr全景,720vr全景 星光云全景系统 系统体验地址 https://720.ailemon.cc 星光云全景新版体验地址 全景系统功能简介 基础设置:作品信息,加载样式ÿ…...