基于YOLOv5的火灾烟雾检测系统

目录

1,YOLOv5算法原理介绍

2,代码实现

3,结果展示


1,YOLOv5算法原理介绍

YOLOv5是目前应用广泛的目标检测算法之一,其主要结构分为两个部分:骨干网络和检测头。

骨干网络采用的是CSPDarknet53,这是一种基于Darknet框架的改进版卷积神经网络。CSPDarknet53通过使用残差结构和跨层连接来提高网络的表达能力,并且采用了空洞空间金字塔池化(ASPP)来实现多尺度的信息提取。这样设计的骨干网络具有较强的特征提取能力,可以有效地提取出图像中的目标信息。

检测头是YOLOv5的另一个关键组成部分,主要用于从骨干网络特征图中提取目标检测信息。它由三个子模块组成:SPP、PAN和YOLOv5输出层。

  1. SPP模块:空洞空间金字塔池化模块,用于对特征图进行多尺度的池化和下采样操作,从而实现对不同大小的目标进行检测。

  2. PAN模块:特征金字塔自上而下的路径,用于将不同层次的特征图融合在一起,并进行上采样操作,以便将低分辨率的特征图与高分辨率的特征图进行融合。

  3. YOLOv5输出层:用于在特征图上进行目标检测,输出目标的类别、边界框位置和置信度等信息。其中,YOLOv5输出层采用特定的损失函数(GIoU和Focal Loss)来优化目标检测的精度和鲁棒性。

总体来说,YOLOv5的主要作用是实现对图像中的目标进行快速、准确的检测。与传统的目标检测算法相比,YOLOv5具有以下优点:

  1. 高速:YOLOv5采用了高效的网络结构和检测头,可以实现高速的目标检测。

  2. 精度:YOLOv5使用特定的损失函数和多尺度特征提取等技术,可以实现高精度的目标检测。

  3. 通用性:YOLOv5能够在不同的场景下进行目标检测,具有较强的通用性和适应性。

  4. 易用性:YOLOv5可以通过预训练模型和微调等方法进行快速部署和使用,具有良好的易用性和可扩展性。

总之,YOLOv5是一种优秀的目标检测算法,具有较高的检测速度和精度,适用于各种不同的计算机视觉任务。

  1. 输入(Input): YOLOv5的输入是一张RGB图像,它可以具有不同的分辨率,但通常为416x416或512x512像素。这些图像被预处理和缩放为神经网络的输入大小。在训练过程中,可以使用数据增强技术对图像进行随机裁剪、缩放和翻转等操作,以增加数据的丰富性和多样性。

  2. Backbone(主干网络): 主干网络负责提取图像的特征表示,它是整个目标检测算法的核心组件。YOLOv5采用了CSPDarknet作为主干网络。CSPDarknet基于Darknet53并进行了改进。它使用了一种被称为CSP(Cross Stage Partial)的结构,将特征映射划分为两个部分,其中一个部分通过一系列卷积和残差连接进行特征提取,另一个部分则直接传递未经处理的特征,从而提高了特征的表达能力和信息传递效率。

  3. Neck(特征融合模块): Neck模块用于融合来自不同层级的特征图,以获取丰富的语义信息和多尺度感受野。YOLOv5中采用了一种名为PANet(Path Aggregation Network)的结构作为Neck模块。PANet由两个阶段组成:自顶向下路径和自底向上路径。自顶向下路径负责从高级语义层级向低级语义层级传递信息,而自底向上路径则负责从低级语义层级向高级语义层级传递细节信息。通过这样的设计,PANet能够充分利用多层次的特征表示,并有效地融合不同层级的信息。

  4. 输出(Output): YOLOv5的输出是目标检测算法的最终结果,包括检测框(bounding box)、置信度和类别信息。输出的过程经历了一系列的卷积和激活操作。首先,每个网格单元预测一组锚框,每个锚框包含了物体的位置和大小信息。然后,根据锚框和预测的边界框,计算出目标的置信度,反映了该边界框中是否存在目标的概率。最后,使用softmax函数对每个锚框预测的类别分数进行归一化,得到物体属于每个类别的概率。通过这样的输出,可以得到图像中检测到的目标的位置、类别和置信度信息。

综上所述,YOLOv5的输入是图像数据,主干网络负责提取特征,特征融合模块用于融合不同层次的特征图,输出则为目标检测结果,包括检测框、置信度和类别信息。这些组件在算法中发挥着重要的作用,使得YOLOv5能够实现高效准确的目标检测。

2,代码实现

from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMenu, QAction
from main_win.win import Ui_mainWindow
from PyQt5.QtCore import Qt, QPoint, QTimer, QThread, pyqtSignal
from PyQt5.QtGui import QImage, QPixmap, QPainter, QIconimport sys
import os
import json
import numpy as np
import torch
import torch.backends.cudnn as cudnn
import os
import time
import cv2from models.experimental import attempt_load
from utils.datasets import LoadImages, LoadWebcam
from utils.CustomMessageBox import MessageBox
# LoadWebcam 的最后一个返回值改为 self.cap
from utils.general import check_img_size, check_requirements, check_imshow, colorstr, non_max_suppression, \apply_classifier, scale_coords, xyxy2xywh, strip_optimizer, set_logging, increment_path, save_one_box
from utils.plots import colors, plot_one_box, plot_one_box_PIL
from utils.torch_utils import select_device, load_classifier, time_sync
from utils.capnums import Camera
from dialog.rtsp_win import Windowclass DetThread(QThread):send_img = pyqtSignal(np.ndarray)send_raw = pyqtSignal(np.ndarray)send_statistic = pyqtSignal(dict)# 发送信号:正在检测/暂停/停止/检测结束/错误报告send_msg = pyqtSignal(str)send_percent = pyqtSignal(int)send_fps = pyqtSignal(str)def __init__(self):super(DetThread, self).__init__()self.weights = './yolov5s.pt'           # 设置权重self.current_weight = './yolov5s.pt'    # 当前权重self.source = '0'                       # 视频源self.conf_thres = 0.25                  # 置信度self.iou_thres = 0.45                   # iouself.jump_out = False                   # 跳出循环self.is_continue = True                 # 继续/暂停self.percent_length = 1000              # 进度条self.rate_check = True                  # 是否启用延时self.rate = 100                         # 延时HZself.save_fold = './result'             # 保存文件夹@torch.no_grad()def run(self,imgsz=640,  # inference size (pixels)max_det=1000,  # maximum detections per imagedevice='',  # cuda device, i.e. 0 or 0,1,2,3 or cpuview_img=True,  # show resultssave_txt=False,  # save results to *.txtsave_conf=False,  # save confidences in --save-txt labelssave_crop=False,  # save cropped prediction boxesnosave=False,  # do not save images/videosclasses=None,  # filter by class: --class 0, or --class 0 2 3agnostic_nms=False,  # class-agnostic NMSaugment=False,  # augmented inferencevisualize=False,  # visualize featuresupdate=False,  # update all modelsproject='runs/detect',  # save results to project/namename='exp',  # save results to project/nameexist_ok=False,  # existing project/name ok, do not incrementline_thickness=3,  # bounding box thickness (pixels)hide_labels=False,  # hide labelshide_conf=False,  # hide confidenceshalf=False,  # use FP16 half-precision inference):# Initializetry:device = select_device(device)half &= device.type != 'cpu'  # half precision only supported on CUDA# Load modelmodel = attempt_load(self.weights, map_location=device)  # load FP32 modelnum_params = 0for param in model.parameters():num_params += param.numel()stride = int(model.stride.max())  # model strideimgsz = check_img_size(imgsz, s=stride)  # check image sizenames = model.module.names if hasattr(model, 'module') else model.names  # get class namesif half:model.half()  # to FP16# Dataloaderif self.source.isnumeric() or self.source.lower().startswith(('rtsp://', 'rtmp://', 'http://', 'https://')):view_img = check_imshow()cudnn.benchmark = True  # set True to speed up constant image size inferencedataset = LoadWebcam(self.source, img_size=imgsz, stride=stride)# bs = len(dataset)  # batch_sizeelse:dataset = LoadImages(self.source, img_size=imgsz, stride=stride)# Run inferenceif device.type != 'cpu':model(torch.zeros(1, 3, imgsz, imgsz).to(device).type_as(next(model.parameters())))  # run oncecount = 0# 跳帧检测jump_count = 0start_time = time.time()dataset = iter(dataset)while True:# 手动停止if self.jump_out:self.vid_cap.release()self.send_percent.emit(0)self.send_msg.emit('停止')if hasattr(self, 'out'):self.out.release()break

3,结果展示

具体效果可以参照b站:YOLOv5火灾检测系统_哔哩哔哩_bilibili

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

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

相关文章

②. GPT错误:图片尺寸写入excel权限错误

꧂问题最初 ꧁ input输入图片路径 print图片尺寸 大小 长宽高 有颜色占比>0.001的按照大小排序将打印信息存储excel表格文件名 表格路径 图片大小 尺寸 颜色类型 占比信息input输入的是文件就处理文件 是文件夹📁就处理文件。路径下的图片 1. 是处理本路径图片 …

比特币有助减少腐败;微软 Copilot 每月赔 20 美元;AIGC 明年会“洗冷水澡”丨 RTE 开发者日报 Vol.64

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

Ubuntu安装QQ

原文网址:2023在Ubuntu安装最新版QQ Linux v3.1.0 - 哔哩哔哩 作者:sprlightning https://www.bilibili.com/read/cv22100663/ 出处:bilibili 2022年末QQ推出了QQ Linux v3.0系列,目前最新版是今年2月24日推出的v3.1.0版本。注意…

用vscode进行远程主机开发

文章目录 插件操作步骤FQA 插件 Remote - SSH - 通过使用 SSH 打开远程计算机或者VM上的文件夹,来连接到任何位置。 操作步骤 使用Vscode利用Remote进行远端开发必须现在Vscode内安装插件 安装完成后,底部工具栏会出现一个绿色按钮,如下…

Python库学习(九):Numpy[续篇三]:数组运算

NumPy是用于数值计算的强大工具,提供了许多数组运算和数学函数,允许你执行各种操作,包括基本运算、统计计算、线性代数、元素级操作等 1.基本运算 1.1 四则运算 NumPy数组支持基本的四则运算(加法、减法、乘法和除法)…

IntelliJ IDEA失焦自动重启服务的解决方法

IDEA 热部署特性 热部署,即应用正属于运行状态时,我们对应用源码进行了修改更新,在不重新启动应用的情况下,可以能够自动的把更新的内容重新进行编译并部署到服务器上,使修改立即生效。 现象 在使用 IntelliJ IDEA运…

实现基于 GitLab 的数据库 CI/CD 最佳实践

数据库变更一直是整个应用发布过程中效率最低、流程最复杂、风险最高的环节,也是 DevOps 流程中最难以攻克的阵地。那我们是否能在具体的 CI/CD 流程中,像处理代码那样处理数据库变更呢? DORA 调研报告 DORA(DevOps Research &am…

练[GYCTF2020]EasyThinking

[GYCTF2020]EasyThinking 文章目录 [GYCTF2020]EasyThinking掌握知识解题思路还得靠大佬正式开始 关键paylaod 掌握知识 ​ thinkphpV6任意文件操作漏洞,代码分析写入session文件的参数,源码泄露,使用蚁剑插件disable_functions绕过终端无回…

【算法设计与分析】— —单源最短路径的贪心算法

🎃欢迎大家前去观看我的算法设计与分析专栏: 算法设计与分析_IT闫的博客-CSDN博客 希望对大家有所帮助! 🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java…

Spring 复习笔记

目录 第一步存 Bean第二步获取并使用 Bean依赖查找的方式ApplicationContext vs BeanFactory 更简单的存储 Bean1. 配合五大类注解使用2. 方法上添加注解 Bean 更简单的获取 Bean Spring IoC 容器管理的资源就是对象,这个对象也叫做 Bean。Spring 作为一个 IoC 容器…

zabbix自定义监控内容和自动发现

6 目录 一、自定义监控内容: 1.明确需要执行的 linux 命令 2.创建 zabbix 的监控项配置文件,用于自定义 key: 3. 在 Web 页面创建自定义监控项模板: 3.1 创建模板: 3.2 创建监控项: 3.3 创建触发器&#…

VxeTable 表格组件推荐

VxeTable 表格组件推荐 https://vxetable.cn 在前端开发中,表格组件是不可或缺的一部分,它们用于展示和管理数据,为用户提供了重要的数据交互功能。VxeTable 是一个优秀的 Vue 表格组件,它提供了丰富的功能和灵活的配置选项&…

关于优先队列的一点细节

在使用优先队列PriorityQueue时,默认的是升序排列,自己可以指定比较器改为降序排列,例如Collections.reverseOrder()等。 但是在我做力扣的过程中,简单的用一个list的addAll方法添加了优先队列里边所有元素,结果发现添…

【Spring】Spring MVC 程序开发

Spring MVC 程序开发 一. 什么是 Spring MVC1. MVC2. Spring、Spring Boot 与 Spring MVC 二. 创建 Spring MVC 项目1. 创建项目2. 用户和程序的映射3. 获取用户请求参数①. 获取单个参数②. 获取多个参数③. 传递对象④. 后端参数重命名(后端参数映射)R…

Django开发之进阶篇

Django进阶篇 一、Django学习之模板二、Django学习之中间件默认中间件自定义中间件 三、Django学习之ORM定义模型类生成数据库表操作数据库添加查询修改删除 一、Django学习之模板 在 Django 中,模板(Template)是用于生成动态 HTML&#xff…

vue-6

一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话,需要给当前跳转的导航加样式,同时要移除上一个a标签的样式,太麻烦!!! 2.解决方案 vue-router 提供了一个全局组件 router…

【PickerView案例13-应用程序对象介绍 Objective-C语言】

一、应用程序对象介绍: 1.应用程序对象介绍: 应用程序介绍: 应用程序介绍: 应用程序介绍: 应用程序启动,本身这一过程,不是应用程序启动就完事儿了, 它有一些比较细节的东西,比如说: 1)info.plist以及pch文件 2)UIApplication对象 这个呢,我们都是分开的去说,…

北斗高精度定位为无人车成为机场运营新常态提供技术保障

在现代快节奏的生活中,人们对交通效率和安全性的需求越来越高。为了满足这一需求,无人驾驶技术被广泛研究和应用。而随着北斗卫星系统的发展,机场无人车正成为潜在的未来运输解决方案。本文将深入探讨北斗卫星如何改变机场运营,以…

一站式数据可视化与分析平台JVS智能BI强大的数据节点功能

在商业智能(BI)中,数据集是数据的集合,用于分析和报告。数据节点是数据集中的一个重要组成部分,它代表数据集中的一个特定数据点或数据元素。通过使用数据节点,可以对数据进行过滤、分组和计算,…