基于YOLOv8的火焰烟雾实时检测系统【训练和系统源码+Pyside6+数据集+包运行】

✨目录

    • 一、系统概述和展示🎄
      • 1.1 摘要 🎈
    • 二、一站式使用教程🎄
    • 三、YOLOv8原理剖析🎄
      • 3.1 YOLOv8背景和技术原理🎈
    • 四、模型训练、评估和推理🎄
      • 4.1 数据集介绍🎈
      • 4.2 模型训练🎈
      • 4.3 结果评估🎈
      • 4.4 模型推理🎈
    • 五、项目完整目录及获取方式介绍🎄
      • 5.1 项目完整目录🎈
      • 5.2 项目获取方式🎈
      • 5.3 作者介绍🎈

《往期经典回顾》
项目名称项目名称项目名称
1.口罩佩戴检测系统2.人员抽烟检测系统

一、系统概述和展示🎄

1.1 摘要 🎈

   火焰烟雾实时检测系统旨在实现对火源和烟雾的即时监测和警报,以预防火灾、保护生命财产安全。本文基于YOLOv8算法框架,通过6744张训练图片(其中5395张训练集,1349张验证集),训练出一个可用于检测火焰烟雾情况的有效检测模型。此外,为更好地展示算法效果,基于此模型开发了一款带GUI界面的基于YOLOv8的火焰烟雾实时检测系统,可用于实时检测火焰烟雾情况,以及时告警。该系统是基于Python和Pyside6开发并支持以下功能特性

  • 系统背景和标题修改
  • 模型权重导入和初始化
  • 检测置信度和IOU调节
  • 检测目标的信息展示
  • 检测用时的统计展示
  • 图片导入、检测、结果展示、导出和结束
  • 视频导入、检测、结果展示、导出和结束
  • 摄像头导入、检测、结果展示、导出和结束
初始化界面

在这里插入图片描述

检测结果界面

在这里插入图片描述

下面将对部分核心功能进行简单展示
1. 更换背景和标题演示
- 用户可通过点击更换背景,选择想要更换背景的图片,系统便会自动更换壁纸; - 用户可通过点击更换标题,然后在文字输入栏中输入想要更换的标题,然后点击确定,即可更改系统标题。

在这里插入图片描述

2. 模型选择和初始化
  • 用户可通过点击模型选择,选择想要加载的系统模型;然后点击权重初始化即可完成模型的准备工作。

在这里插入图片描述

3. 图片检测演示
  • 用户可通过点击图片中的选择,选择想要加载的图片文件;然后点击检测,等待弹出图片检测完成的提示框,再点击展示即可将对应的目标框展示在原始图片上,完成展示后,用户可手动点击导出将图片保存到指定位置,最后点击结束关闭图片展示区域。
  • 相关展示信息,如耗时、检测目标数量、位置信息等可在检测信息一栏查看。

在这里插入图片描述

4. 视频和摄像头检测演示
  • 用户可通过点击图片中的选择,选择想要加载的图片文件;然后点击检测,等待弹出图片检测完成的提示框,再点击展示即可将对应的目标框展示在原始图片上,完成展示后,用户可手动点击导出将图片保存到指定位置,最后点击结束关闭图片展示区域。
  • 相关展示信息,如耗时、检测目标数量、位置信息等可在检测信息一栏查看。
  • 对于摄像头检测模块和视频检测模块原理类似。
  • 注意摄像头检测会自动调用电脑摄像头来进行检测任务

在这里插入图片描述


二、一站式使用教程🎄

第一步:安装Anaconda Prompt、Pycharm(或者vscode),参考:anaconda点击 pycharm点击

第二步:创建python环境

conda create -n YOLOv8_My python=3.8.1

第三步:激活环境

conda activate YOLOv8_My

第四步:安装ultralytics和pytorch

pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install ultralytics==8.1.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

第五步:安装图形化界面库

pip install pyside6==6.6.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

第六步:打开系统界面

python base_camera.py

注意:此环境可同时满足YOLOv8的训练以及系统的运行


三、YOLOv8原理剖析🎄

3.1 YOLOv8背景和技术原理🎈

   权重链接: 点击
   项目地址: 点击
   论文地址:(目前还在火速撰写中)

YOLOv8诞生背景

   YOLOv8是Ultralytics团队基于先前成功的YOLO系列模型推出的最新版本,适用于目标检测、分割、分类任务,以及处理大规模数据集的学习。这个模型不仅能够在多种硬件设备上运行,包括CPU和GPU,而且设计上追求快速、准确且用户友好。YOLOv8引入了一系列创新,包括新的骨干网络、无锚点(Ancher-Free)检测头和损失函数,旨在提升性能和灵活性。此外,该模型支持与早期YOLO版本的兼容,便于用户根据需求切换和比较不同版本。YOLOv8提供了五个不同规模的预训练模型,从n到x,每个模型在参数数量和精度之间取得了不同的平衡,其中较大的模型l和x在减少参数的同时显著提升了精度✅
在这里插入图片描述

YOLOv8技术特点

YOLOv5架构特点

  • Backbone:YOLOv5使用CSPDarknet作为主干网络,它是一种轻量级的Darknet架构,具有更高的速度和更好的性能。
  • PAN/FPN:YOLOv5使用PAN(Path Aggregation Network)来融合不同尺度的特征图,以提高检测性能。
  • Head:YOLOv5的检测头部由多个卷积层组成,用于预测目标的边界框和类别。
  • 样本分配策略:YOLOv5使用IoU阈值来分配正负样本,以平衡正负样本的数量。
  • Loss:包含分类损失(BCEWithLogitsLoss)、定位损失(BCEWithLogitsLoss)、置信度损失(GIOU)。

在这里插入图片描述

YOLOv8架构特点

  • Backbone:
    • 相同:CSP的思想(/梯度分流);并且使用SPPF模块
    • 不同:将C3模块替换为C2f模块
  • PAN/FPN:
    • 相同:PAN的思想
    • 不同:删除了YOLOv5中PAN-FPN上采样的CBS 1*1,将C3模块替换为C2f模块
  • Head:Decoupled head + Anchor-free
  • 样本分配策略:采用了TAL(Task Alignment Learning)动态匹配
  • Loss:
    • 相同:分类损失依然采用 BCE Los
    • 不同:1)舍去物体的置信度损失;2)回归分支loss: CIOU loss+Distribution Focal Loss

在这里插入图片描述

   两者推理过程的区别:在推理过程中,YOLOv5和YOLOv8的主要差异在于coupled head和decoupled head的使用。coupled head是YOLOv5中的一种推理方式,它将Distribution Focal Loss中的积分表示bbox形式进行解码,变成常规的4维度bbox,然后进行后续计算。而decoupled head是YOLOv8中的一种推理方式,它直接使用Distribution Focal Loss中的积分表示bbox形式进行计算,不需要解码过程。

   总结起来,YOLOv5和YOLOv8在架构和推理过程上有一些差异,包括主干网络、特征融合、检测头部、正负样本分配策略和损失函数等方面的差异。其中,在推理过程中,YOLOv5使用coupled head进行bbox解码,而YOLOv8使用decoupled head直接计算积分表示bbox。


四、模型训练、评估和推理🎄

4.1 数据集介绍🎈

   本文使用的火焰烟雾数据集包含6744张图片,类别为[smoke,fire],本文实验训练集5395张,验证集1349张。部分数据集及标注可视化信息如下
在这里插入图片描述

   图片数据集的存放格式如下,在项目目录中新建datasets目录,同时将YOLO格式数据集images和labels放入指定目录下,然后修改”yolov8\my_file\object_detection\dataset_cfg”下的smoke.yaml文件中的path路径指向datasets文件夹(绝对路径)。

datasets:
- images- train(此文件夹全是图片)- val(此文件夹全是图片)- labels- train(此文件夹全是txt文件)- val(此文件夹全是txt文件)

4.2 模型训练🎈

   数据准备完成后,通过调用detection_train.py文件进行模型训练,data参数用于加载数据集的配置文件,epochs参数用于调整训练的轮数,workers参数用于调整系统的并发能力,batch参数用于调整训练的批次大小【根据内存大小调整,最小为1】,代码如下:

import os
from ultralytics import YOLO
​
current_path = os.path.dirname(os.path.realpath(__file__))
root_path = os.path.abspath(os.path.join(current_path, "../..")) + "/"# Load a mode
model = YOLO(root_path + 'ultralytics/cfg/models/v8/yolov8s.yaml').load(root_path + 'weights/det/yolov8s.pt') if __name__ == '__main__':results = model.train(data=root_path + 'my_file/object_detection/dataset_cfg/fire.yaml', epochs=100, imgsz=416, batch=32, workers=16, lr0=0.01, amp=False, project=root_path+"runs/det")

4.3 结果评估🎈

   在深度学习中,我们通常用损失函数下降的曲线来观察模型训练的情况,避免过拟合和欠拟合现象。YOLOv8训练过程及结果文件保存在runs/det/目录下,我们可以在训练结束后进行查看,结果如下所示:
在这里插入图片描述

本文训练结果如下

在这里插入图片描述

4.4 模型推理🎈

   模型训练结束后,我们可在runs/det/目录下可以得到一个最新且最佳的训练结果模型best.pt文件,在runs/det/train/weights目录下。我们可使用该文件进行后续的推理检测。
在这里插入图片描述

模型推理代码如下
import os
from ultralytics import YOLO
current_path = os.path.dirname(os.path.realpath(__file__))
root_path = os.path.abspath(os.path.join(current_path, "../.."))+"/"
​
​
model = YOLO(root_path + 'runs/det/train/weights/best.pt')  # load a custom trained# Export the modelif __name__ == '__main__':# 可自行选择想要检测的图片,如这里的bus.jpgmodel.predict(root_path + 'ultralytics/assets/bus.jpg', save=True, imgsz=416, conf=0.5)
图片推理结果如下

在这里插入图片描述


五、项目完整目录及获取方式介绍🎄

5.1 项目完整目录🎈

   本文涉及到的完整的程序文件:包括环境配置文档说明(训练和系统环境都适用)、模型训练源码、数据集、系统完整代码、系统UI文件、测试图片视频等,获取方式见文末

模型训练代码如下

在这里插入图片描述

系统完整代码如下

在这里插入图片描述

5.2 项目获取方式🎈

   面包多获取链接https://mbd.pub/o/bread/mbd-ZZyam59y

5.3 作者介绍🎈

   哈喽大家好, AI应用视界工作室致力于深入探索人工智能算法与应用开发的交互,涵盖目标分类、检测、分割、跟踪、人脸识别等关键领域,以及系统架构的创新设计与实现。我们的目标是为广大人工智能研究者提供一个丰富、权威的参考资源,同时也期待与您共同交流,推动人工智能技术的进步。如有相关算法交流学习和技术需求,请关注下方公众号(或者搜索 AI-designer66)可与我们取得联系。
在这里插入图片描述


在这里插入图片描述

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

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

相关文章

【Swing】Java Swing实现省市区选择编辑器

【Swing】Java Swing实现省市区选择编辑器 1.需求描述2.需求实现3.效果展示 系统:Win10 JDK:1.8.0_351 IDEA:2022.3.3 1.需求描述 在公司的一个 Swing 的项目上需要实现一个选择省市区的编辑器,这还是第一次做这种编辑器&#xf…

慢sql优化

1.避免使用select *,而是明确列出需要的列, 2.小表驱动大表,in适用于左边大表,右边小表。 exists适用于左边小表,右边大表。 3.批量操作:如果每次插入数据库数据,都要连接一次数据库&#xf…

Java-SpringAop 编程式事物实现

SpringAop 编程式事物实现 1. 数据库事物特性 原子性 多个数据库操作是不可分割的,只有所有的操作都执行成功,事物才能被提交;只要有一个操作执行失败,那么所有的操作都要回滚,数据库状态必须回复到操作之前的状态 …

linux 安装常用软件

文件传输工具 sudo yum install –y lrzsz vim编辑器 sudo yum install -y vimDNS 查询 sudo yum install bind-utils用法可以参考文章 《掌握 DNS 查询技巧,dig 命令基本用法》 net-tools包 yum install net-tools -y简单用法: # 查看端口占用情况…

实现HBase表和RDB表的转化(附Java源码资源)

实现HBase表和RDB表的转化 一、引入 转化为HBase表的三大来源:RDB Table、Client API、Files 如何构造通用性的代码模板实现向HBase表的转换,是一个值得考虑的问题。这篇文章着重讲解RDB表向HBase表的转换。 首先,我们需要分别构造rdb和hba…

ModbusTCP转Profinet网关高低字节交换切换

背景:在现场设备与设备通迅之间通常涉及到从一种字节序(大端或小端)转换到另一种字节序。大端字节序是指高位字节存储在高地址处,而小端字节序是指低位字节存储在低地址处。在不动原有程序而又不想或不能添加程序下可选用ModbusTC…

一种动态联动的实现方法

安防领域中的联动规则 有安防领域相关的开发经历的人知道,IPCamera可以配置使能“侦测”功能,并且指定仅针对图像传感器的某个区载进行侦测。除了基本的“移动侦测"外,侦测的功能点还有细化的类别,如人员侦测、车辆侦测、烟…

Springboot+Redis:实现缓存 减少对数据库的压力

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏Redis实战与进阶 本专栏讲解Redis从原理到实践 …

nmcli --help(nmcli -h)nmcli文档、nmcli手册

文章目录 nmcli --helpOPTION解释OBJECT解释1. g[eneral]:查看NetworkManager的状态2. n[etworking]:启用或禁用网络3. r[adio]:查看无线电状态(例如,Wi-Fi)4. c[onnection]:列出所有的网络连接…

【Linux】进程优先级

🌎进程的优先级 文章目录: 进程状态 优先级相关       什么是优先级       为什么要有优先级       进程的优先级 调整进程优先级       调整优先级       优先级极限测试 Linux的调度与切换 总结 前言: 进程…

Apache Doris 2.1 核心特性 Variant 数据类型技术深度解析

在最新发布的 Apache Doris 2.1 新版本中,我们引入了全新的数据类型 Variant,对半结构化数据分析能力进行了全面增强。无需提前在表结构中定义具体的列,彻底改变了 Doris 过去基于 String、JSONB 等行存类型的存储和查询方式。为了让大家快速…

MATLAB图形绘制

一,二维图像绘制 最基础的二维图形绘制方法:plot -plot命令自动打开一个图形窗口Figure;用直线连接相邻两数据点来绘制图形 -根据图形坐标大小自动缩扩坐标轴,将数据标尺及单位标注自动加到两个坐标轴上,可自定坐标 轴&#x…

group by和min、max函数一起使用

原始数据 查询每科的最高分数 -- 查询每科最高分数 select stuId,classId,stuName,max(score) from student_score group by classId 错误的结果 这个显然不是对的,或者说不是我们想要的结果, 我们想要的结果是 原因是什么呢?我们知道使用…

AtomoVideo:AIGC赋能下的电商视频动效生成

✍🏻 本文作者:凌潼、依竹、桅桔、逾溪 1. 概述 当今电商领域,内容营销的形式正日趋多样化,视频内容以其生动鲜明的视觉体验和迅捷高效的信息传播能力,为商家创造了新的机遇。消费者对视频内容的偏好驱动了视频创意供给…

我的自建博客之旅04之Halo

我的自建博客之旅04之Halo Halo是我无意间发现的一款博客框架,如果你讨厌Hexo,Vuepress等静态框架本地编辑,构建部署等方式,如果你想要一款一次搭建,前台是博客,后台是文章维护,并且支持各种定制化折腾的博客框架,可能Halo会比较适合你。 因为我个人还是比较偏技术,…

C语言 扫雷游戏

写了这么长时间的关于C语言的基础知识,相信大家已经学会了使用C语言书写一些基础的代码,上次还编写了三子棋游戏的代码,这次我将编写一个基础版的扫雷游戏。 首先,创建三个文件,两个源文件,一个头文件&…

【C++】用红黑树模拟实现set、map

目录 前言及准备:一、红黑树接口1.1 begin1.2 end1.3 查找1.4 插入1.5 左单旋和右单旋 二、树形迭代器(正向)2.1 前置 三、模拟实现set四、模拟实现map 前言及准备: set、map的底层结构是红黑树,它们的函数通过调用红…

微信小程序小白易入门基础教程1

微信小程序 基本结构 页面配置 页面配置 app.json 中的部分配置,也支持对单个页面进行配置,可以在页面对应的 .json 文件来对本页面的表现进行配置。 页面中配置项在当前页面会覆盖 app.json 中相同的配置项(样式相关的配置项属于 app.js…

android 怎么自定义view

首先了解view的绘制流程: 所以onmeasure ---测量view onlayout---确定view大小----》所以继承ViewGroup必须要重写onlayout,确定子view 而onDraw----是继承view时候需要操作的。 所以:自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件。 自定义Vi…

一个可商用私有化部署的基于JAVA的chat-gpt网站

目录 介绍一、核心功能1、智能对话2、AI绘画3、知识库4、一键思维导图5、应用广场6、GPTS 二、后台管理功能1、网站自定义2、多账号登录支持3、商品及会员系统4、模型配置5、兑换码生成6、三方商户用户打通 结语 介绍 java语言的私有化部署的商用网站还是比较少的 这里给大家介…