YOLOv5基础知识入门(3)— 目标检测相关知识点

前言Hello大家好,我是小哥谈。YOLO算法发展历程和YOLOv5核心基础知识学习完成之后,接下来我们就需要学习目标检测相关知识了。为了让大家后面可以顺利地用YOLOv5进行目标检测实战,本节课就带领大家学习一下目标检测的基础知识点,希望大家学习之后有所收获!🌈

 前期回顾:

            YOLOv5基础知识入门(1)— YOLO算法的发展历程

            YOLOv5基础知识入门(2)— YOLOv5核心基础知识讲解 

            目录

 🚀1.目标检测

 🚀2.目标检测数据集

2.1 PASCAL VOC数据集

2.2 MS COCO数据集

🚀3.目标检测性能指标

3.1 检测精度指标

3.2 检测速度指标

 🚀1.目标检测

目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一。由于各类物体有不同的外观、形状、姿态,再加上成像时的光照、遮挡等因素的干扰,目标检测一直是机器视觉领域最具有挑战性的问题。🍃

计算机视觉中关于图像识别有四大类任务

  • 分类(Classification):解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。
  • 定位(Location):解决“在哪里?”的问题,即定位出这个目标的的位置。
  • 检测(Detection):解决“是什么?在哪里?”的问题,即定位出这个目标的的位置并且知道目标物体是什么。
  • 分割(Segmentation):分为实例的分割(Instance-level)场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。

说明:

百科定义:♨️♨️♨️

目标检测,也叫目标提取,是一种基于目标几何和统计特征的图像分割。它将目标的分割和识别合二为一,其准确性和实时性是整个系统的一项重要能力。尤其是在复杂场景中,需要对多个目标进行实时处理时,目标自动提取和识别就显得特别重要。随着计算机技术的发展和计算机视觉原理的广泛应用,利用计算机图像处理技术对目标进行实时跟踪研究越来越热门,对目标进行动态实时跟踪定位在智能化交通系统、智能监控系统、军事目标检测及医学导航手术中手术器械定位等方面具有广泛的应用价值。    

关于目标检测,具体如下图所示:

用YOLOv5进行目标检测,我们需要解决所检测目标的定位识别问题。💗

定位(Localization):解决的是目标“在哪里?”的问题,即需要获知目标位置(最小外接矩形,Bounding  box)。

识别(Recognition):解决的是目标“是什么?”的问题,即需要获知目标的类别标签(Category label)和置信度得分(Confidence score)。

说明:

置信度:♨️♨️♨️

置信度是介于0-1(或100%)之间的数字,它描述模型认为此预测边界框包含某类别目标的概率。通俗来说,即有多大概率确定所检测的物体是某物体。

同时,除了目标检测,还有分类、定位、实例分割等任务。

定位是找到检测图像中带有一个给定标签的单个目标 。

检测是找到图像中带有给定标签的所有目标


 🚀2.目标检测数据集

目标检测需要使用到数据集,本节课就给大家介绍一下目标检测领域常用的PASCAL VOCMS COCO数据集🍄

2.1 PASCAL VOC数据集

PASCAL VOC挑战赛在2005年至2012年间展开。PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛,PASCAL全称:Pattern Analysis, Statical Modeling and Computational Learning,是一个由欧盟资助的网络组织。很多优秀的计算机视觉模型比如分类、定位、检测、分割、动作识别等模型都是基于PASCAL VOC挑战赛及其数据集上推出的,尤其是一些目标检测模型(比如大名鼎鼎的R-CNN系列,以及后面的YOLO、SSD等)。📚

PASCAL VOC从2005年开始举办挑战赛,每年的内容都有所不同,从最开始的分类,到后面逐渐增加检测、分割、人体布局、动作识别(Object Classification 、Object Detection、Object Segmentation、Human Layout、Action Classification)等内容,数据集的容量以及种类也在不断的增加和改善。该项挑战赛催生出了一大批优秀的计算机视觉模型(尤其是以深度学习技术为主的)。🎏

PASCAL VOC 2007: 9963张图像,24640个标注。

PASCAL VOC 2012: 11530 张图像,27450个标注。

该数据集有20个分类

  • Person: person
  • Animal: bird、cat、cow、dog、horse、sheep
  • Vehicle: aeroplane、bicycle、boat、bus、car、motorbike、train
  • Indoor: bottle、chair、dining table、potted plant、sofa、tv/monitor

说明:

链接: The PASCAL Visual Object Classes Challenge 2012 (VOC2012)

2.2 MS COCO数据集

MS COCO的全称是Microsoft Common Objects in Context,起源于是微软于 2014年出资标注的Microsoft COCO数据集,与ImageNet 竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。在ImageNet竞赛停办后,COCO竞赛就成为是当前目标识别、检测等领域的一个最权威、最重要的标杆,也是目前该领域在国际上唯一能汇集Google、微软、 Facebook以及国内外众多顶尖院校和优秀创新企业共同参与的大赛。🎏

COCO(Common Objects in Context)数据集包含20万个图像:11.5万多张训练集图像, 5千张验证集图像,2万多张测试集图像。80个类别中有超过50万个目标标注,平均每个图像的目标数为7.2。🌷

说明:

链接:COCO - Common Objects in Context (cocodataset.org)


🚀3.目标检测性能指标

目标检测的性能指标包括检测精度(检测效果是否足够好)和检测速度(检测速度是否足够快)。🍉

检测精度指标:

  • Precision, Recall, F1 score
  • IoU (Intersection over Union)
  • P-R curve (Precison-Recall curve)
  • AP (Average Precision)
  • mAP (mean Average Precision)

检测速度指标:

  • 前传耗时
  • 每秒帧数 FPS (Frames Per Second)
  • 浮点运算量(FLOPS)

3.1 检测精度指标

(1)混淆矩阵(confusion matrix)

混淆矩阵(confusion matrix),是对分类问题预测结果的总结。使用计数值汇总正确和不正确预测的数量,并按每个类进行细分,显示了分类模型进行预测时会对哪一部分产生混淆。通过这个矩阵可以方便地看出机器是否将两个不同的类混淆了(即把一个类错认成了另一个)。🐳

混淆矩阵不仅可以让我们直观的了解分类模型所犯的错误,更重要的是可以了解哪些错误类型正在发生,正是这种对结果的分解克服了仅使用分类准确率带来的局限性(总体到细分)。❤️

总结:

精度Precision(查准率)是评估预测的准不准看预测列) 

召回率Recall(查全率)是评估找的全不全看实际行

(2)IoU (Intersection over Union )

IoU(Intersection over Union,IoU),即两个边界框相交面积相并面积的比值,边界框的准确度可以用IoU进行表示;一般约定,在检测中,IOU>0.5,则认为检测正确,IOU<0.5,则认为检测错误。一般阈值设为0.5(需要根据实际情况进行设定)🌱

说明:

IoU与混淆矩阵的关系:♨️♨️♨️

如果阈值设为0.5,那么

如果IOU ≥ 0.5,则认为检测正确,归类为TP

如果IOU<0.5,则认为检测错误,归类为FP

当图像中存在一个真实目标,而未能检测到目标时,将其归类为FN

当没有检测某图像的物体时(即没有对该图像进行检测,该图像其实没有用处),将其归类为TN

(3)P-R curve 

P-R curve (Precison-Recall curve)曲线体现的是精确率召回率的关系。在准确率很高的前提下,尽可能的检测到全部的类别。因此希望我们的曲线接近(1,1),即希望曲线的面积尽可能接近1。🌟

(4)AP和mAP

AP (Average Precision),衡量的是学习出来的模型在每个类别上的好坏。

mAP (mean Average Precision),衡量的是学习出来的模型在所有类别上的好坏。mAP就是取所有类别上AP的平均值。

用一个简单的例子来演示平均精度(AP)的计算。 假设数据集中总共有5个苹果。 我们收集模型为苹果作的所有预测(以10次预测举例),并根据预测的置信水平(从最高到最低)对其进行排名。 第二列表示预测是否正确。 如果它与 ground truth匹配并且IoU≥0.5,则是正确的。🌺

由下图可以看到,Recall随着包含更多预测而增加,但Precision会上下波动。

3.2 检测速度指标

前传耗时(ms):从输入一张图像到输出最终结果所消耗的时间,包括前处理耗时(如图像归一化)、网络前传耗时、后处理耗时(如非极大值抑制)。🌿

说明:

关于非极大值抑制,请参考我的另外一篇文章:♨️♨️♨️

目标检测中NMS(非极大值抑制)原理解析

每秒帧数 FPS(Frames Per Second):每秒钟能处理的图像数量 。

FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的动作就会愈流畅。通常,要避免动作不流畅的最低是30。🍀

浮点运算量(FLOPS):处理一张图像所需要的浮点运算数量,跟具体软硬件没有关系,可以公平地比较不同算法之间的检测速度。

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

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

相关文章

使用Javassist实现热修复

工程目录图 请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 代码:LearnRobustFix

数据结构篇七:排序

文章目录 前言1.插入排序1.1 基本思想1.2 代码实现1.3 特性总结 2.希尔排序2.1 基本思想2.2 代码实现2.3 特性总结 3. 选择排序3.1 基本思想3.2 代码实现3.3 特性总结 4. 堆排序4.1 基本思想4.2 代码实现4.3 特性总结 5. 冒泡排序5.1 基本思想5.2 代码实现5.3 特性总结 6. 快速…

LeetCode 33题:搜索旋转排序数组

目录 题目 思路 代码 暴力解法 分方向法 二分法 题目 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 …

提速Rust编译器!

Nethercote是一位研究Rust编译器的软件工程师。最近&#xff0c;他正在探索如何提升Rust编译器的性能&#xff0c;在他的博客文章中介绍了Rust编译器是如何将代码分割成代码生成单元&#xff08;CGU&#xff09;的以及rustc的性能加速。 他解释了不同数量和大小的CGU之间的权衡…

考虑微网新能源经济消纳的共享储能优化配置(Matlab代码实现

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

VSCode Remote-SSH (Windows)

1. VSCode 安装 VSCode 2. 安装扩展 Remote SSH Getting started Follow the step-by-step tutorial or if you have a simple SSH host setup, connect to it as follows: Press F1 and run the Remote-SSH: Open SSH Host… command.Enter your user and host/IP in the …

Sui网络的稳定性和高性能

Sui的最初的协议开发者设计了可扩展的网络&#xff0c;通过水平扩展的方式来保持可负担得起的gas费用。其他区块链与之相比&#xff0c;则使用稀缺性和交易成本来控制网络活动。 Sui主网上线前90天的数据指标证明了这一设计概念&#xff0c;在保持100&#xff05;正常运行的同…

实现Jenkins自动发包配置

参考抖音&#xff1a;Java不良人 其中的视频演示代码 不推荐把jenkins端口一直开放&#xff0c;推荐使用时候放开&#xff08;版本不太新&#xff0c;避免漏洞攻击&#xff09; [rootVM-4-12-centos soft]# docker-compose -v Docker Compose version v2.19.1docker-compose.…

提升效率!云原生生态从业人员不可或缺的工具集合!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

​ATF(TF-A)安全通告 TFV-7 (CVE-2018-3639)​

ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-7 (CVE-2018-3639) 二、静态缓解&#xff08;Static mitigation&#xff09; 三、动态缓解&#xff08;Dynamic mitigation&#xff09; 一、ATF(TF-A)安全通告 TFV-7 (CVE-2018-3639) Title TF-A披露基于cache前瞻…

92. 反转链表 II

92. 反转链表 II 题目-中等难度示例1. 获取头 反转中间 获取尾 -> 拼接2. 链表转换列表 -> 计算 -> 转换回链表 题目-中等难度 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点…

请求转发和请求重定向

目录 1. 定义层面 2. 请求方层面 3. 数据共享层面 4. 最终 url 层面 5. 代码实现层面 请求转发 请求重定向 在Java中&#xff0c;跳转网页的方式有两种&#xff0c;一种是请求转发&#xff0c;另一种是请求重定向&#xff0c;而实际上&#xff0c;这两种方式是有着明显…

JavaScript数据结构【进阶】

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录 使用 splice() 添加元素使用 slice() 复制数组元素使用展开运算符复制数组使用展开运算符合并数组使用 indexOf() 检查元素是否存在使用 for 循环遍历数组中的全部元素创建复杂的多维数组将键值对添加到对象…

APP外包开发的H5开发框架

跨平台移动应用开发框架允许开发者使用一套代码在多个操作系统上构建应用程序&#xff0c;从而节省时间和资源。以下是一些常见的跨平台移动应用开发框架以及它们的特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0…

从源码层面深度剖析Spring循环依赖 | 京东云技术团队

以下举例皆针对单例模式讨论 图解参考 https://www.processon.com/view/link/60e3b0ae0e3e74200e2478ce 1、Spring 如何创建Bean&#xff1f; 对于单例Bean来说&#xff0c;在Spring容器整个生命周期内&#xff0c;有且只有一个对象。 Spring 在创建 Bean 过程中&#xff0…

Vue在页面输出JSON对象,测试接口可复制使用

效果图&#xff1a; 数据处理前&#xff1a; 数据处理后&#xff1a; 代码实现&#xff1a; HTML: <el-table height"600" :data"tableData" border style"width: 100%" tooltip-effect"dark" size"mini"><el-…

前后端分离------后端创建笔记(上)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

如何使用 ESP-01S 模块

如何使用 ESP-01S 模块 原始PDF文档 参考&#xff1a; 将 ESP-01 用作 WiFi shield的更好方法 (e-tinkers.com) How do I use ESP8266 ESP-01S WiFi Module with ESP-01S Adapter - Using Arduino / Programming Questions - Arduino Forum ESP-01S WiFi 模块 – 配置布线 -…

服务管理和计划任务

文章目录 服务管理计划任务 服务管理 systemctl 命令字 服务名 //配置服务与systemctl有关的命令字&#xff1a; 计划任务 一次性计划 at 时间 at now 5 min //当前时间五分钟后执行 at -l //列出计划任务 atrm 任务号 //删除计划任务执行完命令后Ctrld生效 周期性计…

Oracle数据迁移

问题描述&#xff1a; oracle数据库的所有表结构、数据、索引等需要需从测试库迁移到正式库。 解决步骤&#xff1a; oracle数据库迁移&#xff0c;主要通过expdp从测试库所在的源服务器将指定的数据表或数据源导出为一个或多个数据文件&#xff08;.dmp文件&#xff09;&…