【深度学习目标检测】七、基于深度学习的火灾烟雾识别(python,目标检测,yolov8)

YOLOv8是一种物体检测算法,是YOLO系列算法的最新版本。

YOLO(You Only Look Once)是一种实时物体检测算法,其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化,提高了检测速度和准确性。

YOLOv8采用了Darknet-53作为其基础网络架构。Darknet-53是一个53层的卷积神经网络,用于提取图像特征。与传统的卷积神经网络相比,Darknet-53具有更深的网络结构和更多的卷积层,可以更好地捕捉图像中的细节和语义信息。

在YOLOv8中,还使用了一些技术来提高检测性能。首先是使用了多尺度检测。YOLOv8在不同的尺度上检测物体,这样可以更好地处理物体的大小变化和远近距离差异。其次是利用了FPN(Feature Pyramid Network)结构来提取多尺度特征。FPN可以将不同层级的特征图进行融合,使得算法对不同大小的物体都有较好的适应性。

此外,YOLOv8还利用了一种称为CSPDarknet的网络结构来减少计算量。CSPDarknet使用了CSP(Cross Stage Partial)结构,在网络的前向和后向传播过程中进行特征融合,从而减少了网络的参数量和计算量。

在训练阶段,YOLOv8使用了一种称为CutMix的数据增强技术。CutMix将不同图像的一部分进行混合,从而增加了数据的多样性和鲁棒性。

总而言之,YOLOv8是一种快速而准确的物体检测算法,它通过引入Darknet-53网络、多尺度检测、FPN结构、CSPDarknet结构和CutMix数据增强等技术,实现了对不同大小和距离的物体进行快速、准确的检测。

本文介绍了基于Yolov8的火焰烟雾检测模型,包括训练过程和数据准备过程,同时提供了推理的代码。对准备计算机视觉相关的毕业设计的同学有着一定的帮助。

效果如下图:

一、安装YoloV8

yolov8官方文档:主页 - Ultralytics YOLOv8 文档

安装部分参考:官方安装教程

二、数据集准备

路标检测数据集,检测2种:火焰和烟雾。总共6007张图,其中训练集667张图。

示例图片如下:

本文提供转换好的yolov8格式数据集,可以直接放入yolov8中训练,数据集地址:火灾、烟雾检测yolov8数据集

三、模型训练

1、数据集配置文件

在ultralytics/ultralytics/cfg/datasets目录下添加fire_smoke.yaml,添加以下内容(path修改为自己的路径):

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO 2017 dataset http://cocodataset.org by Microsoft
# Example usage: yolo train data=coco.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco  ← downloads here (20.1 GB)# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: datasets/fire_smoke/fire_smoke-yolov8  # 替换为自己的数据集路径
train: images/train 
val: images/val 
test: images/val  # Classes
names:# 0: normal0: fire1: smoke
2、修改模型配置文件

在ultralytics/ultralytics/cfg/models/v8目录下添加yolov8n_fire_smoke.yaml,添加以下内容:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 2  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2- [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 9# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, C2f, [512]]  # 12- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, C2f, [256]]  # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, C2f, [512]]  # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, C2f, [1024]]  # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)
3、训练模型

使用如下命令训练模型,相关路径更改为自己的路径,建议绝对路径:

yolo detect train project=deploy name=yolov8_fire_smoke exist_ok=True optimizer=auto val=True amp=True epochs=100  imgsz=640 model=ultralytics/ultralytics/cfg/models/v8/yolov8_fire_smoke.yaml  data=ultralytics/ultralytics/cfg/datasets/fire_smoke.yaml
4、验证模型

使用如下命令验证模型,相关路径根据需要修改:

yolo detect val imgsz=640 model=deploy/yolov8_fire_smoke/weights/best.pt data=ultralytics/ultralytics/cfg/datasets/fire_smoke.yaml

精度如下图:

四、推理

训练好了模型,可以使用如下代码实现推理,将权重放到同级目录:

from PIL import Image
from ultralytics import YOLO# 加载预训练的YOLOv8n模型
model = YOLO('best.pt')# 在'bus.jpg'上运行推理
image_path = 'fire_000137.jpg'
results = model(image_path)  # 结果列表# 展示结果
for r in results:im_array = r.plot()  # 绘制包含预测结果的BGR numpy数组im = Image.fromarray(im_array[..., ::-1])  # RGB PIL图像im.show()  # 显示图像im.save('results.jpg')  # 保存图像

本教程训练好的权重和推理代码、示例代码连接:推理代码和训练好的权重

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

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

相关文章

【Docker】实战:nginx、redis

▒ 目录 ▒ 🛫 导读开发环境 1️⃣ Nginx 拉取 Nginx 镜像nginx.conf启动 Nginx访问 Nginx 2️⃣ redis拉取 Redis 镜像启动 Redis 容器测试 Redis 📖 参考资料 🛫 导读 开发环境 版本号描述文章日期2023-12-15操作系统Win10 - 22H222621.2…

【离线】牛客小白月赛39 G

登录—专业IT笔试面试备考平台_牛客网 题意 思路 考虑离线Bit做法 这种离线Bit,一般都是去考虑二维数点就能写清楚了 确定好两维:x 轴是1 ~ n, y 轴是 k 的大小 然后去遍历值域,如果值域很大的话需要排序离散化,但…

metagpt学习实践

metagpt 官方库目录 一级目录 tree -L 1 -I "__pycache__" . ├── actions ├── _compat.py ├── config.py ├── const.py ├── document_store ├── environment.py ├── __init__.py ├── inspect_module.py ├── learn ├── llm.py ├── …

JVM类加载器的分类以及双亲委派机制

目录 前言 1. 类加载器的分类: 1.1 启动类加载器(Bootstrap ClassLoader): 1.2 扩展类加载器(Extension ClassLoader): 1.3 应用程序类加载器(Application ClassLoader&#xff…

Linux第一个小程序——进度条

Linux第一个小程序——进度条 1. 前言2. 缓冲区概念3. \r && \n4. 进度条实现4.1 初级进度条4.2 升级进度条 1. 前言 在我们写这个小程序之前,我们要用到我们学的三个知识点 gcc的使用vim的使用make/makefile的使用 除此之外还需要一些其他的知识点&…

学习Django从零开始之三

搭建虚拟python环境 搭建开发环境有多种方式,其中包括本地直接安装Python的可执行文件,使用virtualenv,以及使用Anaconda和Miniconda等工具。这些工具在创建Python虚拟环境方面各有特点。具体不同之处感兴趣的同学可以自行查阅相关资料。 简…

IP代理如何影响网站的速度?代理ip服务器有哪些作用?

目录 前言 一、如何影响速度 二、代理服务器的作用 1. 隐藏真实IP地址 2. 绕过访问限制 3. 分布式访问 4. 数据缓存和加速 总结 前言 IP代理是一种通过在用户和目标网站之间引入代理服务器来访问目标网站的方式。代理服务器充当中间人,将用户的请求转发给目…

flyway快速入门基础教程

flyway快速入门 一、flyway是什么?二、flyway使用目的1. 使用原因:2. 举个例子: 三、flyway工作原理四、flyway使用约定和命名规则1. 数据库版本文件整体约定2. 数据库版本文件夹管理约定3. 数据库版本文件命名约定4. 禁止项 五、flyway配置和…

功能测试转向自动化测试 。10 年 心路历程——愿测试人不再迷茫

十年测试心路历程: 由于历史原因,大部分测试人员,最开始接触都是纯功能界面测试,随着工作年限,会接触到一些常用测试工具,比如抓包,数据库,linux 等。 我大学学的计算机专业&#…

Python自动化测试如何自动生成测试用例?

汽车软件开发自动化测试攻略 随着软件开发在造车行业中占有越来越重要的地位,敏捷开发的思想在造车领域中也逐渐地被重视起来,随之而来的是整车厂对自动化测试需求越来越强烈。本文结合北汇在自动化测试方面的丰富经验,简单介绍一下实施自动…

一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程

MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结…

【问题解决】Buildroot文件系统dropbear 上位机scp命令Permission denied, please try again.

前提: 上位机:Ubuntu虚拟机与开发板同局域网开发板:Buildroot文件系统,开启了dropbear,已经联网与虚拟机同局域网 liefyuanubuntu:~/tcp-test/tcp-c-client$ scp tcp_client root192.168.8.199:/opt root192.168.8.1…

ControlNet Adding Conditional Control to Text-to-Image Diffusion Models

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models TL; DR:ControlNet 使得我们能通过输入额外的条件图(如 Canny 边缘、人体姿态、深度图等),对 SD 生成结果的空间位置有更准确的控制。它拷贝 SD 部分…

音频ncm格式转mp3格式

做个笔记,ncm格式转mp3格式 参考:传送门 import os import json import base64 import struct import logging import binascii from glob import glob from tqdm.auto import tqdm from textwrap import dedent from Crypto.Cipher import AES from mu…

【MySQL学习之基础篇】SQL

文章目录 1. SQL的通用语法2. SQL 分类3. 数据定义语言(DDL)3.1. 数据库操作3.2. 表操作3.2.1. 数据类型3.2.2. 表的创建和查询操作3.2.3. 应用案例3.2.3. 表的修改操作3.2.4. 表的删除操作 4. 数据操作语言(DML)4.1. 添加数据4.2. 修改数据4.3. 删除数据…

微信小程序ec-canvas(echarts)显示地图【以甘肃省为例】

文章目录 一、效果图二、实现1、下载echarts插件2、定制图形,生成 echarts.min.js 文件3、小程序中使用(1)下载甘肃地图(2)使用 参考文档《微信小程序使用echarts显示全国地图》《如何在微信小程序开发中使用echarts以…

如何发布自定义 npm 组件包

准备工作 1. 注册 npm 账号 还没有 npm 账号?去官网注册: https://www.npmjs.com 需要记住用户名、密码、邮箱,后面需要用到。 2. 查看本地 npm 镜像,如果不是默认的,需要改回来 npm config get registry重置镜像路…

【贝叶斯分析】计算机科学专业博士作业二

1 第一题 1.1 题目 已知变量A和B的取值只能为0或1,A⫫𝑩,且𝑝(𝐴1)0.65,𝑝(𝐵1)0.77。C的取值与A和B有关,具体关系如下图所表: ABP(C1|A,B)000.1010.99100…

Leetcode 455 分发饼干

题意理解: 小孩的饭量: [1,2,7,10] 饼的大小: [1,3,5,7] 当饼的大小>小孩饭量时,小孩就能够吃饱。 求如何分配饼让更多的小孩子能够吃饱。 解题思路: 两种思路: 先把胃口小的孩子用较小的饼来喂饱—…

BearPi Std 板从入门到放弃 - 先天神魂篇(7)(RT-Thread 定时器-硬件定时器)

简介 BearPi IOT开发板 硬件定时器使用步骤 创建项目 参考 BearPi RT-Thread项目创建 RT-Thread TIM2 设备注册 宏定义添加 rtconfig.h 中添加 #define RT_USING_HWTIMER #define BSP_USING_TIM #define BSP_USING_TIM2生成支持TIM2的mdk5项目工程 env 指令 scons --t…