YOLOv5目标检测学习(1):yolo系列算法的基础概念

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、基于深度学习的目标检测需要哪些步骤?
  • 二、数据准备(即准备数据集)
    • 1.目标检测的数据集如何获取?
    • 2.数据集包括训练集和验证集吗?
    • 3.如何训练自己的数据集?
    • 4.环境配置中的python、pycharm、numpy、panda、anaconda、tensorflow、pytorch都是什么?
      • ①python是一门编程语言。
      • ②pycharm是一个IDE,即集成了解释、编译、调试等各种功能的开发平台。
      • ③numpy是Python中用于科学计算的基础库,提供了多维数组对象(ndarray)和各种数学函数。
      • ④Pandas是建立在NumPy之上的数据处理库,提供了高级数据结构和数据分析工具,如Series和DataFrame,用于处理和分析结构化数据
      • ⑤Anaconda 是包管理工具,也是一个解释器。
      • ⑥TensorFlow 是由Google开发的开源深度学习框架,提供了丰富的API和工具,支持各种深度学习任务,如图像识别、自然语言处理、目标检测等
      • ⑦PyTorch 是由Facebook开发的开源深度学习框架,也用于构建和训练深度学习模型
      • ⑧yolo是一种深度学习的算法,可以在TensorFlow或者PyTorch构建的框架下实现。
  • 三、目标检测性能指标
    • 1.检测精度
    • 2.检测速度
  • 四、YOLO目标检测系列的发展史
    • ①one-stage和two-stage的区别?
    • ②yolo系列算法的特点
  • 五、YOLOV5算法的实现原理
    • 5.1 分割网格的作用
    • 5.2 对划分出来的每个网格都使用一次卷积神经网络来提取特征向量吗?
    • 5.3 每个边界框的类别和置信度是怎么得出的?
    • 5.4 非极大值抑制(NMS)算法是什么?
  • 六、实现一个yolov5目标检测的项目,需要哪些基础的软件和环境配置呢?


前言

关于深度学习目标检测,有许多概念性的东西需要先了解一下。这里主要以基于深度学习的目标检测算法的部署实现来学习。

一、基于深度学习的目标检测需要哪些步骤?

以yolov5为例:

使用YOLOv5进行车辆和行人的目标检测通常涉及以下步骤:

数据准备:准备包含车辆和行人的训练数据集,确保数据集中包含足够数量和多样性的车辆和行人的图像,并标注它们的位置信息。

模型选择:选择适合目标检测任务的YOLOv5模型,根据任务需求选择不同的模型大小(如YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x)。

模型训练:使用准备好的数据集对选定的YOLOv5模型进行训练。在训练过程中,模型会学习识别车辆和行人等目标的特征。

模型优化:根据训练过程中的验证结果,调整模型的超参数、学习率等,以优化模型的性能。

模型评估:使用测试数据集对训练好的模型进行评估,评估模型在车辆和行人目标检测任务上的准确率、召回率等指标。

模型部署:将训练好的YOLOv5模型部署到实际应用中,用于车辆和行人的目标检测任务。可以将模型集成到自动驾驶系统、智能监控系统等中。

实时检测:在部署后,可以利用YOLOv5模型进行实时的车辆和行人目标检测,识别图像或视频流中的车辆和行人,并提供相应的输出结果。

我逐步介绍这里面涉及到的一些内容。

二、数据准备(即准备数据集)

1.目标检测的数据集如何获取?

获取目标检测的数据集通常可以通过以下几种途径:

公开数据集:有许多公开的目标检测数据集可供使用,如COCO(Common Objects in Context)、PASCAL VOC(Visual Object Classes)、ImageNet等。这些数据集包含了各种类别的图像和相应的标注信息,可以用于训练和评估目标检测模型。

自行标注:如果需要特定领域或特定任务的数据集,可以自行收集图像数据并进行标注。标注可以包括物体的边界框、类别信息等。可以使用标注工具如LabelImg、LabelMe等进行标注工作。

第三方数据提供商:有些数据提供商提供各种类型的标注数据集,可以根据需求购买或获取这些数据集。一些公司和组织也提供定制的数据集收集和标注服务。

数据增强:除了获取现有的数据集外,还可以通过数据增强技术来扩充数据集规模,增加数据的多样性。数据增强包括旋转、翻转、缩放、亮度调整等操作,可以提高模型的泛化能力。

合作伙伴和社区:与合作伙伴、学术界或开发者社区合作,共享数据集或参与共同构建数据集,可以获得更多的数据资源和支持。

2.数据集包括训练集和验证集吗?

数据集通常包括训练集和验证集。在机器学习和深度学习任务中,训练集用于训练模型的参数,而验证集用于评估模型的性能和调整超参数

训练集是模型用来学习特征和参数的数据集,通常包含大量的标注数据,用于训练模型进行目标检测、分类、分割等任务。训练集的目的是让模型学习到数据集中的模式和规律,以便对新的数据进行预测和分类。

验证集是用来评估模型在训练过程中的性能和泛化能力的数据集。在训练过程中,可以使用验证集来监控模型的性能,并根据验证集的表现调整模型的超参数,防止模型过拟合或欠拟合

通常,数据集会被划分为训练集和验证集两部分,比例可以根据具体任务和数据量来确定。常见的划分比例是将数据集的大约80%用作训练集,20%用作验证集。

3.如何训练自己的数据集?

这里的方法CSDN上有许多博主都在介绍,大致的流程是:
练自己的数据集通常涉及以下步骤:

数据收集标注——对收集到的图像数据进行预处理——将数据集划分为训练集和验证集——选择适合目标检测任务的模型,如YOLOv5、Faster R-CNN、SSD——使用训练集对选定的模型进行训练
——使用验证集对训练好的模型进行评估——根据评估结果调整模型的超参数、学习率等——将训练好的模型部署到实际应用中,用于目标检测任务,可以将模型集成到自动驾驶系统、智能监控系统等中。
有一位博主利用yolov5进行训练的过程如下:
在这里插入图片描述

4.环境配置中的python、pycharm、numpy、panda、anaconda、tensorflow、pytorch都是什么?

①python是一门编程语言。

②pycharm是一个IDE,即集成了解释、编译、调试等各种功能的开发平台。

③numpy是Python中用于科学计算的基础库,提供了多维数组对象(ndarray)和各种数学函数。

④Pandas是建立在NumPy之上的数据处理库,提供了高级数据结构和数据分析工具,如Series和DataFrame,用于处理和分析结构化数据

⑤Anaconda 是包管理工具,也是一个解释器。

⑥TensorFlow 是由Google开发的开源深度学习框架,提供了丰富的API和工具,支持各种深度学习任务,如图像识别、自然语言处理、目标检测等

⑦PyTorch 是由Facebook开发的开源深度学习框架,也用于构建和训练深度学习模型

⑧yolo是一种深度学习的算法,可以在TensorFlow或者PyTorch构建的框架下实现。

三、目标检测性能指标

分为检测速度和检测精度。

1.检测精度

准确率(Precision):指检测出的目标中真正为目标的比例,即检测为目标且确实为目标的数量与所有检测为目标的数量的比值。即

召回率(Recall):指所有真正为目标的样本中被检测出的比例,即检测为目标且确实为目标的数量与所有真正为目标的数量的比值。

F1分数:综合考虑准确率和召回率,是准确率和召回率的调和平均值,可以帮助评估模型在准确率和召回率之间的平衡。

平均精度均值(mAP):是目标检测任务中常用的评估指标,综合考虑了不同类别的准确率和召回率,计算出每个类别的AP(平均精度),然后取所有类别AP的平均值作为最终的mAP。

交并比(IoU):指预测框与真实框之间的重叠程度,通常用于衡量目标检测算法的定位准确性。

漏检率(Miss Rate):指未检测到的目标数量与所有真实目标数量的比值,是召回率的补数。

误检率(False Alarm Rate):指被错误检测为目标的数量与所有未真实目标数量的比值,是准确率的补数。

2.检测速度

前传耗时:指模型进行一次前传(从输入到输出的计算过程)所花费的时间。前传耗时直接影响模型的推理速度,通常希望前传耗时越短越好,特别是在实时应用中,如视频分析、自动驾驶等。

FPS(Frames Per Second):指模型每秒能够处理的帧数,即模型每秒能够进行多少次推理。FPS是衡量模型推理速度的重要指标,通常希望模型的FPS越高越好,以实现实时的目标检测和识别。

FLOPS(Floating Point Operations Per Second):指模型每秒执行的浮点运算次数。FLOPS是衡量模型计算复杂度的指标,可以用来评估模型的计算资源消耗和效率。通常情况下,FLOPS越低表示模型计算效率越高。

四、YOLO目标检测系列的发展史

在这里插入图片描述
YOLO(You Only Look Once)是一种流行的目标检测算法,以其简单、快速和高效而闻名。以下是YOLO的发展历程:

YOLO v1:YOLO v1是于2015年由Joseph Redmon等人提出的第一个YOLO版本。YOLO v1采用单个神经网络模型,将目标检测任务转化为回归问题,通过在图像中预测边界框的坐标和类别来实现目标检测。YOLO v1的特点是速度快,但在小目标检测和定位精度上存在一定问题。

YOLO v2:YOLO v2(也称为YOLO9000)是于2016年提出的改进版本,引入了一些新的技术和优化,如使用更深的网络、多尺度训练、Batch Normalization等,提高了检测精度和泛化能力。YOLO v2还引入了目标类别的多标签预测,使得模型可以同时检测多个类别。

YOLO v3:YOLO v3是于2018年发布的最新版本,进一步改进了检测精度和速度。YOLO v3采用了更深的Darknet-53网络作为基础网络结构,引入了多尺度预测、特征融合和更细粒度的边界框预测,提高了模型的检测性能。YOLO v3还支持多种不同尺寸的输入图像,适应不同场景的需求。

YOLO v4:YOLO v4是YOLO系列的最新版本,于2020年发布。YOLO v4引入了一系列新技术和优化,如CSPDarknet53网络、Mish激活函数、SAM模块等,进一步提高了检测精度和速度。YOLO v4还支持混合精度训练、模型剪枝等技术,使得模型更加高效和灵活。

①one-stage和two-stage的区别?

Two-stage(两阶段):代表-- Fsater-rcnn Mask-rcnn系列

One-stage(单阶段):代表-- Yolo系列
在这里插入图片描述
简单地说,单阶段相比多阶段,更加一步到位,把图像直接输入单个神经网络后就能直接输出结果,但是两阶段算法必须先将图像生成一个可能含有目标对象的候选区域,再进一步处理。

所以,
One-stage

优势:速度非常快,适合做实时检测任务
劣势:效果通常不会太好
Two-stage

优势:效果通常比较好
劣势:速度较慢,不适合做实时检测任务

②yolo系列算法的特点

在这里插入图片描述
这个图可以看出,yolo系列算法的mAP(即检测精度)没有快速线性卷积神经网络(RCNN)高,但是其FPS却非常高,所以处理实时性要求高的场景比较合适。

五、YOLOV5算法的实现原理

在这里插入图片描述
在这里插入图片描述
总结就是:

①将输入图像分割成网格:YOLO5将输入图像分成S×S个网格,每个网格负责检测一个目标。如果一个目标的中心点在某个网格内,那么就会在该网格内拟合出一个边界框。

②提取特征向量:使用卷积神经网络提取每个网格的特征向量,该特征向量代表了该网格内目标的特征。

③预测边界框和类别:对于每个网格,使用全连接层来预测一个或多个边界框,以及每个边界框可能的类别和置信度得分。

④预测结果的后处理:对于每个目标,选择置信度最高的边界框。然后,根据非极大值抑制(NMS)算法去掉重复边界框并选择最终的目标框。

5.1 分割网格的作用

主要起四个作用:
减少计算量:相比于对整张图像进行目标检测,只对每个网格进行检测可以大大提高算法的运行速度。

定位目标:通过将图像分割成网格,可以更精确地定位目标的位置。每个网格负责检测其中的目标,减少目标位置的搜索范围

适应不同尺寸的目标:分割成多个网格可以更好地适应不同尺寸和比例的目标。每个网格可以独立地检测目标,无需对整个图像进行缩放或调整,从而提高了算法的鲁棒性。

多尺度检测:通过将图像分割成多个网格,可以实现多尺度的目标检测。不同大小的目标可能出现在不同大小的网格中,这样可以更全面地检测图像中的目标。

5.2 对划分出来的每个网格都使用一次卷积神经网络来提取特征向量吗?

在YOLO算法中,每个网格都会经过一次卷积神经网络的前向传播过程,从而提取该网格内目标的特征向量。这些特征向量将用于后续的目标边界框和类别的预测。

至于如何用CNN进行特征提取的,这个就是先送入池化层减少复杂度,简单的卷积层进行滑动窗口的卷积操作得到一个特征矩阵,然后送入全连接层,进行特征映射、非线性变换和参数学习,最终得到输出特征图。

5.3 每个边界框的类别和置信度是怎么得出的?

在全连接层后,通常会使用softmax函数将网络输出转换为概率分布,以表示每个类别的可能性。

5.4 非极大值抑制(NMS)算法是什么?

非极大值抑制(Non-Maximum Suppression,NMS)是一种常用的目标检测算法后处理技术,用于去除重叠边界框并选择最终的目标框。其主要思想是在检测到的多个边界框中,保留置信度最高的边界框,同时抑制与该边界框重叠度较高的其他边界框。

NMS算法的步骤如下:

①按照置信度排序:首先,对所有检测到的边界框按照其置信度得分进行排序,置信度高的边界框排在前面。
②选择置信度最高的边界框:从排好序的边界框列表中选择置信度最高的边界框,并将其添加到最终的目标框列表中。
③计算重叠度:对于剩余的边界框,计算它们与已选中的最高置信度边界框的重叠度(如IoU,交并比)。
④去除重叠边界框:对于重叠度高于设定阈值的边界框,将其从列表中去除,只保留重叠度较低的边界框。
⑤重复操作:重复以上步骤,直到所有边界框都被处理完毕。

通过非极大值抑制算法,可以有效地减少重叠边界框,保留置信度最高的边界框,从而得到最终的目标检测结果。NMS算法在目标检测领域被广泛应用,能够提高检测结果的准确性和稳定性。

六、实现一个yolov5目标检测的项目,需要哪些基础的软件和环境配置呢?

要实现一个YOLOv5目标检测项目,需要以下基础的软件和环境配置:

Python环境:YOLOv5是基于Python实现的,因此需要安装Python环境。推荐使用Python 3.6及以上版本。

PyTorch:YOLOv5使用PyTorch作为深度学习框架,因此需要安装PyTorch。可以通过PyTorch官方网站提供的安装指南安装对应版本的PyTorch。

CUDA和cuDNN:如果要在GPU上加速训练和推理过程,需要安装相应版本的CUDA和cuDNN,并配置PyTorch以支持GPU加速。

YOLOv5代码库:下载YOLOv5的代码库,可以从GitHub上的ultralytics/yolov5仓库获取。可以使用git命令克隆代码库或直接下载zip文件。

依赖库:安装项目所需的依赖库,如NumPy、OpenCV、Matplotlib等。可以通过pip或conda安装这些库。

数据集:准备用于训练和测试的目标检测数据集。可以使用已有的数据集,也可以自行收集和标注数据集。

预训练模型:下载YOLOv5的预训练模型权重,可以从YOLOv5官方发布的权重文件中获取。

配置文件:根据项目需求,可以修改YOLOv5的配置文件,如模型结构、超参数设置等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python报错ModuleNotFoundError: No module named ‘numpy‘

原因:缺少“numpy” 进入python安装路径,script路径内 在路径下启动终端 01.更新numpy python -m pip install --upgrade pip 02.安装 pip install numpy 03.运行python python 04.导入包 from numpy import * 问题已解决。

MySQL学习Day25——数据库其他调优策略

一、数据库调优的措施: 1.调优的目标: (1)尽可能节省系统资源,以便系统可以提供更大负荷的服务 (2)合理的结构设计和参数调整,以提高用户操作的响应速度 (3)减少系统的瓶颈,提高MySQL数据库整体的性能; 2.如何定位调优:用户的反馈、日志…

政安晨【TypeScript高级用法】(二):泛型与命名空间

TypeScript的泛型允许我们在定义函数、类和接口时使用参数化类型,使得这些实体可以适应不同类型的数据。泛型可以增加代码的重用性和灵活性。 同时,TypeScript的命名空间提供了一种在全局命名空间中组织代码的方式,可以避免全局变量污染和命…

项目打包时报错 There are test failures.

报错原因是 test测试类有问题 我们可直接选择跳过测试类打包 如下 此时再次打包就成功了

高级软件开发知识点

流程 算法题简历上项目用到技术、流程、遇到问题HR 准备 常考的题型和回答思路刷100算法题,理解其思想,不要死记最近一家公司所负责的业务和项目: 项目背景、演进之路,有哪个阶段,每个阶段主要做什么项目中技术选型…

vue2和vue3的区别介绍

Vue.js 是一个流行的前端JavaScript框架,用于构建用户界面和单页应用程序。自从Vue.js首次发布以来,它就因其简洁的API、灵活的架构和易于上手的特点而受到了广泛的欢迎。Vue.js的第二个主要版本(Vue 2)发布于2016年,而…

AutoGPT实现原理

AutoGPT是一种利用GPT-4模型的自动化任务处理系统,其主要特点包括任务分配、多模型协作、互联网访问和文件读写能力以及上下文联动记忆性。其核心思想是通过零样本学习(Zero Shot Learning)让GPT-4理解人类设定的角色和目标,并通过…

正则表达式在QT开发中的应用

一.正则表达式在QT开发中的使用: 1.模式匹配与验证:正则表达式最基本的作用就是进行模式匹配,它可以用来查找、识别或验证一个字符串是否符合某个特定的模式。例如,在表单验证中,可以使用正则表达式来检查用户输入的邮…

微擎安装,卡在“安装微擎”界面

进入install.php,点击【在线安装】 下一步配置数据库,开始安装系统 然后显示进度条,进度条一闪而过 然后就没有进度条显示了,一直卡在这里 第一次等了好久, 删除目录下的文件,重装还是这样 再重启服务器&…

C语言数组作为函数参数

有两种情形; 一种是数组元素作为函数实参;一种是数组名作为函数参数; 新建一个VC6单文档工程; void printshz(int , CDC* , int , int ); double getav(int a[5]); ...... void CShzcshView::OnDraw(CDC* pDC) {CShzcshDoc* pDo…

electron+vue3全家桶+vite项目搭建【29】封装窗口工具类【3】控制窗口定向移动

文章目录 引入实现效果思路声明通用的定位对象主进程模块渲染进程测试效果 引入 demo项目地址 窗口工具类系列文章: 封装窗口工具类【1】雏形 封装窗口工具类【2】窗口组,维护窗口关系 封装窗口工具类【3】控制窗口定向移动 很多时候,我们想…

python识别并控制操作已打开的浏览器进行自动化测试

前提:已安装python和selenium 一、将浏览器以debugger模式打开 打开方法: 1.右击浏览器,选择属性: 2.在目标中加上 --remote-debugging-port9222 --user-data-dir"C:\selenum\AutomationProfile" 二、识别代码 from…

npm、cnpm、pnpm使用详细

简介: npm:npm(Node Package Manager)是Node.js的包管理工具,用于安装、更新、卸载Node.js的模块和包。它提供了一个命令行界面,使得开发者可以轻松地管理项目依赖。npm 是 nodejs 中的一部分,…

[linux] 使用 kprobe 观察 tcp 拥塞窗口的变化

tcp 中拥塞窗口用来做拥塞控制。 在发送侧,要发送数据的时候会基于拥塞窗口进行判断,当前这个包还能不能发送出去。 tcp 发包函数是 tcp_write_xmit(),在这个函数中调用 tcp_cwnd_test() 来判断当前拥塞窗口让不让发包。从 tcp_cwnd_test() 函…

【推荐算法系列十八】:DSSM 召回算法

参考 推荐系统中 DSSM 双塔模型汇总(二更) DSSM 和 YouTubeDNN 都是比较经典的 U2I 模型。 U2I 召回 U2I 召回也就是 User-to-Item 召回,它基于用户的历史行为以及用户的一些个人信息,对系统中的候选物品进行筛选,挑…

C++ Primer Plus Sixth Edition - 下载电子书与源代码

C Primer Plus Sixth Edition - 下载电子书与源代码 1. C Primer Plus, 6th Edition1.1. Download the source code files1.2. 下载源代码文件 2. C Primer Plus, Sixth Edition (PDF)3. Table of ContentsReferences 1. C Primer Plus, 6th Edition C Primer Plus, 6th Editi…

Spring事件监听机制

前言 Spring 的事件监听机制,采用了观察者的设计模式。一套完整的事件监听流程是这样的,首先定义事件类,即ApplicationEvent的子类,它包含事件发生的时间戳timestamp和产生事件的来源source,以及自定义的其它事件属性…

IDEA运行大项目启动卡顿问题

我打开了很多项目,然后又启动了一个大型项目时,启动到一半,弹出一个窗口,告诉我idea内存不够,怎么解决这个问题? 1、先把多余的项目关掉,再启动这个大项目, 2、如果还是不行就去修改…

OpenDDS之QosXml库编译(Windows + VS2019)

目录 1、需求背景2、基础环境3、编译xercesc3.1、下载xercesc3.2、编译xercesc 4、编译ACE_XML_Utils4.1、生成XML_Utils解决方案4.2、编译XML_Utils 5、编译QOS_XML_XSC_Handlerd5.1、生成QOS_XML_XSC_Handlerd解决方案5.2、编译QOS_XML_XSC_Handlerd 6、测试例子6.1、生成dum…

vue3 ts setup 组合式API 使用教程

vue3中新增了组合式API,本文讲解组合式API setup 的使用 关于setup 的出现和 vue3 js setup 的使用,笔者已经在2022年的文章中说明,这里不再赘述,需要的朋友可以阅读:《vue3 setup 使用教程》 官网文档:h…