基于Yolov5的检测系统实战

文章目录

一、数据集

二、网络结构

三、完整文件目录介绍

四、测试分析

一、数据集

1、数据格式:图像数据(JPG格式),采用labelme标注后的图像(XML格式),训练需要的TXT格式
2、数据来源:公共火灾数据库或特定行业机构收集的火灾图像数据
3、数据获取方式:通过API接口或数据下载平台获取数据
4、数据特点:包含火灾和非火灾图像样本,标记了火灾区域的相关信息
5、数据规模:2059张火灾图像样本

二、网络结构

在图像输入时对图像进行了 Mosaic 数据增强操作并且在进行推理时采用了自适应缩放操作,该方法可根据输入图像尺寸大小的不同进行自适应填充,提升了 37%的推理速度。其次,还设计了位于网络最前端的 Focus 结构,该结构最主要的内容是对输入数据进行切片操作,可有效提升图片特征提取的质量。YOLOv5 设计了两种与 YOLOv4 结构中使用的相同的 CSP 网络结构,并且将其用于 Backbone 层和 Neck 层。Neck 层采用了 FPN+PAN(Perceptual Adversarial Network)结合的方式,不同的是 YOLOv4 中使用的都是普通卷积操作而 YOLOv5使用了新设计的 CSP 结构,这也增强了网络对特征的融合能力。在输出端,YOLOv5 使用的是GIOU_Loss 做为 Bounding box 的损失函数并且在进行非最大值抑制时使用了加权非最大值抑制,这在不增加计算资源的情况下对检测图像中一些有重叠的目标检测效果较好。最重要的是,YOLOv5 的四种版本的切换不需要修改大量的代码,仅需要更换不同的 yaml 文件即可,YOLOv5 将模型的深度和广度做到了仅用两个参数 depth_multiple 和 width_multiple 来控制,四种模型的 yaml 文件只有这两个参数不同,但是最终训练的模型却差异非常大。表面上只有这两个参数不同,但其实后面各层之间的模块数量、卷积核大小和数量等也都产生了变化,YOLOv5l 与 YOLOv5s 相比较起来训练参数的大小成倍数增长,其模型的深度和宽度也会大很多,这就使得 YOLOv5l 的学习能力要比 YOLOv5s好很多,因此在最终推理时的模型也会比 YOLOv5s 大、推理速度慢,但是检测精度高。所以 YOLOv5 提供了不同的选择,如果想要追求推理速度可选用较小一些的模型如 YOLOv5s、YOLOv5m,如果想要追求精度更高对推理速度要求不高的可以选择其他两个稍大的模型。

三、完整文件目录介绍

Yolov5官方模型改进,主要选择yolov5x,效果较好

AttentionModule.py—注意力机制模块(在 YOLOv5 中添加注意力机制可以帮助模型更好地学习到关键特征,提高目标检测的性能和精度。
1. 提高关注度:注意力机制可以使模型更加关注重要的特征,减少不必要的背景干扰,从而提高目标检测的准确性。
2. 增强特征表征:通过引入注意力机制,模型可以学习到更具有代表性的特征表示,有助于更好地区分火灾目标与其他物体。
3. 增强泛化能力:注意力机制有助于模型对不同尺度、姿态和光照条件下的火灾目标进行更好的检测,提高模型的泛化能力。
4. 改善鲁棒性:引入注意力机制可以帮助模型更好地适应不同环境下的输入图像变化,提升系统的鲁棒性,降低误报率。)

Tongji.py—统计xml文件中的标签数量

Detect_qt5—改进后的预测函数(在detect函数中,官方对于视频、摄像头检测是从每秒的视频中抽取30帧,对每帧进行检测。同理,先试着使用pyqt显示视频、摄像头在界面上。显示视频原理为:使用QFileDialog.getOpenFileName函数打开一个视频文件,得到视频文件的地址,使用self.cap_video=cv2.VideoCapture()打开视频,使用flag, self.image = self.cap_video.read(),获取视频的每一帧,然后把每一帧显示(和图片显示基本一样)在label控件上面,不过注意的是要使用到定时器,self.timer_camera1 = QtCore.QTimer()。显示实时摄像头原理为:self.cap = cv2.VideoCapture(),参数为空时候打开摄像头。flag, self.image = self.cap.read(),获取摄像头的每一帧,然后把每一帧显示。(也需要用到定时器把每一帧的检测图片传给detect函数,进行检测,并把返回值图像绘制在label控件上面。准备工作做好,你执行detect.py文件,会自动检测 data/images目录下的图片,并且在runs/detect/exp下面生成标注好的图片。可以在点击检测时候,把之前获取到的待检测图片复制一份到data/images目录下,然后执行detect.py,在runs/detect/exp里面获取标注好的图片,并且显示在界面上。可以把detect.py的主函数封装为一个子函数,在这个里面直接调用封装好的子函数,把模型加载部分单独拿出来,在第一次界面打开时候加载,之后就不需要加载。在detect.py文件中,detect函数里面找到加载模型的部分,拿出来写成一个子函数,然后在执行detect函数时候,把model作为参数传入进去。)GridSearchCV.py--在训练阶段应用超参数搜索算法来优化模型的性能。在目标检测系统中,通常会在训练阶段使用超参数搜索来调整模型的参数,以获得更好的检测准确性和泛化能力。在训练阶段应用超参数搜索有助于找到最佳的超参数组合,从而改善模型的性能。一旦通过超参数搜索得到了最佳的超参数配置,就可以使用这些参数进行模型训练,以便在实际应用中获得更好的检测效果。

detect_image.py在预测过程中将detect中对图片处理的部分拿出来单独进行预测

detect_video.py在预测过程中对视频提取帧单独进行预测

fire文件夹 存放数据集及单独的fire_model.yaml 和fire_parameter.yaml 意为fire的参数配置和模型,修改其训练集的标签种类

四、测试分析

1、目标检测性能指标

检测精度

检测速度

Precision,Recall,F1 score

前传耗时

IoU(Intersection over Union)

每秒帧数 FPS(Frames Per Sencond)

P-R curve

浮点运算量(FLOPS)

AP、mAP

表1 目标检测性能指标

2、 验证集的实际标签和预测标签对比

 3、结果显示模型性能

观察各损失函数的数值变化,由定位可得可知本模型是较为准确的预测结果。从图9中可以看到各损失函数的变化不是很大,说明训练结果较好。

Precision:精度(找对的正类/所有找到的正类);
Recall:真实为positive的准确率,即正样本有多少被找出来了(召回了多少)。Recall从真实结果角度出发,描述了测试集中的真实正例有多少被二分类器挑选了出来,即真实的正例有多少被该二分类器召回。
mAP是用Precision和Recall作为两轴作图后围成的面积,m表示平均,@后面的数表示判定iou为正负样本的阈值,@0.5:0.95表示阈值取0.5:0.05:0.95后取均值。
mAP@.5:.95(mAP@[.5:.95])表示在不同IoU阈值(从0.5到0.95,步长0.05)(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的平均mAP。
mAP@.5:表示阈值大于0.5的平均mAP

一般训练结果主要观察精度和召回率波动情况(波动不是很大则训练效果较好),此模型的结果可视化可观察到训练结果是较为准确的。

4、查准率和召回率的调和平均数曲线

10是训练得到的F1_curve,说明在置信度为0.2-0.6区间内得到比较好的F1分数,置信度阈值(该样本被判定为某一类的概率阈值)较低的时候,很多置信度低的样本被认为是真,召回率高,精确率低;置信度阈值较高的时候,置信度高的样本才能被认为是真,类别检测的越准确,即精准率较大(只有confidence很大,才被判断是某一类别),所以前后两头的F1分数比较少。

计算公式:

5、标签图labels.jpg

第一个图是训练集的数据量,每个类别有多少个
第二个图是框的尺寸和数量
第三个图是中心点相对于整幅图的位置
第四个图是图中目标相对于整幅图的高宽比例

6、labels_correlogram体现中心点横纵坐标以及框的高宽间的关系

表示中心点坐标x和y,以及框的高宽间的关系。
每一行的最后一幅图代表的是x,y,宽和高的分布情况:
最上面的图(0,0)表明中心点横坐标x的分布情况,可以看到大部分集中在整幅图的中心位置;

(1,1)图表明中心点纵坐标y的分布情况,可以看到大部分集中在整幅图的中心位置
(2,2)图表明框的宽的分布情况,可以看到大部分框的宽的大小大概是整幅图的宽的一半
(3,3)图表明框的宽的分布情况,可以看到大部分框的高的大小超过整幅图的高的一半

而其他的图即是寻找这4个变量间的关系

7、P_curve单一类准确率

准确率precision和置信度confidence的关系图,即置信度阈值 - 准确率曲线图

当判定概率超过置信度阈值时,各个类别识别的准确率。当置信度越大时,类别检测越准确,但是这样就有可能漏掉一些判定概率较低的真实样本。

意思就是,当我设置置信度为某一数值的时候,各个类别识别的准确率。可以看到,当置信度越大的时候,类别检测的越准确。这也很好理解,只有confidence很大,才被判断是某一类别。但也很好想到,这样的话,会漏检一些置信度低的类别。

8、PR_curve精确率和召回率的关系

PR曲线体现精确率和召回率的关系。mAP 是 Mean Average Precision 的缩写,即 均值平均精度。可以看到:精度越高,召回率越低。

因此我们希望:在准确率很高的前提下,尽可能的检测到全部的类别。因此希望我们的曲线接近(1,1),即希望mAP曲线的面积尽可能接近1。在图15中我们观察到面积是接近1的,说明模型的均值平均精度是很高的。

PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。PR曲线下围成的面积即AP,所有类别AP平均值即Map.

如果PR图的其中的一个曲线A完全包住另一个学习器的曲线B,则可断言A的性能优于B,当A和B发生交叉时,可以根据曲线下方的面积大小来进行比较。一般训练结果主要观察精度和召回率波动情况(波动不是很大则训练效果较好)

Precision和Recall往往是一对矛盾的性能度量指标;及一个的值越高另一个就低一点;
提高Precision < == > 提高二分类器预测正例门槛 < == > 使得二分类器预测的正例尽可能是真实正例;
提高Recall < == > 降低二分类器预测正例门槛 < == >使得二分类器尽可能将真实的正例挑选

9、R_curve单一类找回率

召回率recall和置信度confidence之间的关系,recall(真实为positive的准确率),即正样本有多少被找出来了(召回了多少)。

从图16可以看到随着confidence的降低,召回率是更高的,说明类别检测的全面。

即置信度阈值 - 召回率曲线图

当置信度越小的时候,类别检测的越全面(不容易被漏掉,但容易误判)。

10、confusion_matrix _normalized混淆矩阵

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

从图17中可以看出正类预测和负类预测的真实和预测值都相同,说明模型的预测准确性很高。

行是预测类别(y轴),列是真实类别(x轴)

混淆矩阵以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值,矩阵的列表示预测值。

TP(True Positive): 将正类预测为正类数 即正确预测,真实为0,预测也为0
FN (False Negative):将正类预测为负类 即错误预测,真实为0,预测为1
FP(False Positive):将负类预测为正类数 即错误预测, 真实为1,预测为0
TN (True Negative):将负类预测为负类数,即正确预测,真实为1,预测也为1

精确率和召回率的计算方法
精确率Precision=TP / (TP+FP), 在预测是Positive所有结果中,预测正确的比重
召回率recall=TP / (TP+FN), 在真实值为Positive的所有结果中,预测正确的比重

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

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

相关文章

【Python数据分析】让工作自动化起来,无所不能的Python

这里写目录标题 前言一、Python是办公自动化的重要工具二、Python是提升职场竞争力的利器三、Python是企业数字化的重要平台四、Python是AI发展的重要通道之一编辑推荐内容简介作者简介前言读者对象如何阅读本书目录 前言 随着我国企业数字化和信息化的深入&#xff0c;企业对…

[CSS]布局

盒子就是把网站分割成一小块一小块的吧&#xff0c;然后方便移动或者管理 布局属性 所谓的布局就是依靠css布局让html元素&#xff0c;可以按照UI设计师提供的设计稿进行HTML网页的内容排版并实现页面的布局效果。 布局的学习关键就是&#xff1a;1. 布局方式&#xff0c;2. …

SpringBoot+Vue,轻松实现网页版人脸登录与精准识别

目录 1、技术介绍 2、技术原理 2.1、人脸检测 ①参考模板法 ②人脸规则法 2.2、人脸跟踪 2.3、人脸比对 ①特征向量法 ②面纹模板法 识别过程 案例 一、springboot后端项目 1&#xff0c;拉取项目后&#xff0c;导入相关依赖jar包 2&#xff0c;执行sql文件夹下面…

Qt 中的项目文件解析和命名规范

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、Qt项目文件解析 1、.pro 文件解析 2、widget.h 文件解析 3、main.cpp 文件解析 4、widget.cpp…

yuyv v4l2的数据转换成RGB

使用方法&#xff1a; 3840*2160是.yuv数据的分辨率 data.raw为yuv格式的raw数据 cv&#xff1a;显示 out.png 不显示&#xff0c;存储的文件名 python3 yuv_2_rgb.py data.raw cv 3840 2160或python3 yuv_2_rgb.py data.raw out.png 3840 2160 源码 yuv_2_rgb.py&#xff1…

antv X6离线文档部署 解决workspace configuration error问题

1.从github拉取源代码 x6开源库 下载至本地。 2.进入文件目录下 使用pnpm install 安装依赖 其中我遇到了两个问题 缺少python环境报错&#xff1a;解决如下&#xff1a; 安装python环境&#xff0c;将python加入系统环境变量path中 打开npm配置文件 编辑该文件加入python…

IntelliJ IDEA 2024.1 最新版如何快速入门体验?IntelliJ IDEA 2024.1 安装和配置教程 图文解说版

IntelliJ IDEA 2024.1 最新版如何快速入门体验?IntelliJ IDEA 2024.1 安装和配置教程 图文解说版 文章目录 IntelliJ IDEA 2024.1 最新版如何快速入门体验?IntelliJ IDEA 2024.1 安装和配置教程 图文解说版前言 第一步&#xff1a; IntelliJ IDEA 2024.1安装教程第 0 步&…

如何使用Tomcat+cpolar搭建本地站点并发布到公网分享好友远程访问

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器拥有强大功能&#xff0c;由于其可以实…

(二十七)Flask之数据库连接池DBUtils库

目录&#xff1a; 每篇前言&#xff1a;DBUtils库模式一&#xff08;底层使用threading.local实现&#xff09;&#xff1a;模式二&#xff1a; Flask中使用方式一&#xff1a;直接将DBUtils初始化放到settings.py文件中方式二&#xff1a;从utils文件夹中导入 脚本使用DBUtils…

防止公司文件泄密的有效措施有哪些

防止公司文件泄密的有效措施有哪些 公司文件防止泄密是一项涉及多个层面和多种策略的综合性工作。以下列举了多种常用且有效的防止公司文件泄密的方式. 一、政策与流程制定 保密协议&#xff08;NDA&#xff09;&#xff1a;要求员工、合作伙伴、供应商等签署保密协议&#x…

【计算机基础】期末考试必考,学会就能提高 40 分

二进制与十进制相互转换的详细过程及例题解析 二进制和十进制是两种常用的数制系统。二进制系统仅使用0和1两个数字&#xff0c;而十进制系统则使用0到9的十个数字。在计算机科学和数字电路设计等领域&#xff0c;经常需要在这两种数制之间进行转换。本文将详细介绍二进制与十…

【域适应】基于域分离网络的MNIST数据10分类典型方法实现

关于 大规模数据收集和注释的成本通常使得将机器学习算法应用于新任务或数据集变得异常昂贵。规避这一成本的一种方法是在合成数据上训练模型&#xff0c;其中自动提供注释。尽管它们很有吸引力&#xff0c;但此类模型通常无法从合成图像推广到真实图像&#xff0c;因此需要域…

Springboot项目的测试类书写(速通)

目录 前言1. 单元测试的测试类2. 框架测试的测试类 前言 在实际开发中&#xff0c;如果只是做一个简单的单元测试&#xff08;不涉及端到端、数据库交互、API调用、消息队列处理等&#xff09;&#xff0c;我为了方便一般都是找块儿地方写一个main方法来跑一下就行了&#xff…

CSS-文字环绕浮动、行内块分页、三角强化妙用、伪元素选择器

文字环绕浮动 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>文字环绕浮动效果</title><s…

[leetcode] all-nodes-distance-k-in-binary-tree 二叉树中所有距离为 K 的结点

. - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树&#xff08;具有根结点 root&#xff09;&#xff0c; 一个目标结点 target &#xff0c;和一个整数值 k 。 返回到目标结点 target 距离为 k 的所有结点的值的列表。 答案可以以 任何顺序 返回。 示例 1&#xff1a…

玩转公众号|掌握公众号运营技巧,让账号脱颖而出

随着互联网的普及&#xff0c;微信公众号已经成为了企业进行品牌宣传、产品推广和客户服务的重要渠道。而且&#xff0c;企业微信公众号是可以进行二次开发的&#xff0c;这样就能够满足企业的私域运营的需求。然而&#xff0c;对于许多企业来说&#xff0c;运营公众号和二次开…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之②:数据治理之二(自动处理)

前述 在前文的multi Agents for Data Analysis的设计说起&#xff0c;本文将继续探索和测试借助llm实现基于私有知识库的数据治理全自动化及智能化。整体设计如下&#xff1a; 整个体系设计了3个Agent以及一个Planer&Execute Agent&#xff0c;第一个Agent用于从企业数据…

结合ArcGIS+SWAT模型+Century模型:流域生态系统水-碳-氮耦合过程模拟

原文链接&#xff1a;结合ArcGISSWAT模型Century模型&#xff1a;流域生态系统水-碳-氮耦合过程模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&tempkeyMTI2NV9sMGRZNUJoVkNVc1ZzSzRuMl9XXzhqX0R3cXpESWFwM1E4cFY4ejNqWFh3VUl0dlZkNWk4b20ydFdFTy1xS2ZObGN0Z0ZXSjly…

大话设计模式——9.单例模式(Singleton Pattern)

简介 确保一个类只有一个实例&#xff0c;并提供全局访问点来获取该实例&#xff0c;是最简单的设计模式。 UML图&#xff1a; 单例模式共有两种创建方式&#xff1a; 饿汉式&#xff08;线程安全&#xff09; 提前创建实例&#xff0c;好处在于该实例全局唯一&#xff0c;不…

c++之旅第九弹——模版

大家好啊&#xff0c;这里是c之旅第九弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一.模版的概念…