摘要:在本篇博客中,我们深入研究了基于YOLOv8/v7/v6/v5的火焰与烟雾检测系统。核心上,我们采用了YOLOv8作为主要框架,并整合了YOLOv7YOLOv6YOLOv5算法,进行了细致的性能指标对比分析。本文详细介绍了该领域国内外的研究现状数据集的处理方法算法原理模型构建与训练代码,以及基于Streamlit交互式Web应用界面设计。特别地,在Web网页中,我们支持对图像、视频和实时摄像头数据进行火焰与烟雾检测。用户可以方便地上传不同的训练模型(YOLOv8/v7/v6/v5)进行推理预测,且界面的可修改性极高。此外,本文还附带了完整的网页设计、深度学习模型代码训练数据集的下载链接,为研究者和开发者提供了极大的便利。

➷点击跳转至文末所有涉及的完整代码文件下载页☇

网页版-基于深度学习的火焰与烟雾检测系统(YOLOv8/v7/v6/v5+实现代码+训练数据集)


1. 网页功能与效果

        (1)开启摄像头实时检测:本系统允许用户通过网页直接开启摄像头,实现对实时视频流中火焰与烟雾的检测。系统将自动识别并分析画面中的火焰与烟雾,并将检测结果实时显示在用户界面上,为用户提供即时的反馈。

在这里插入图片描述

        (2)选择图片检测:用户可以上传本地的图片文件到系统中进行火焰与烟雾检测。系统会分析上传的图片,识别出图片中的火焰与烟雾,并在界面上展示带有火焰与烟雾标签和置信度的检测结果,让用户能够清晰地了解到每个火焰与烟雾状态。

在这里插入图片描述

        (3)选择视频文件检测:系统支持用户上传视频文件进行火焰与烟雾检测。上传的视频将被系统逐帧分析,以识别和标记视频中每一帧的火焰与烟雾。用户可以观看带有火焰与烟雾检测标记的视频,了解视频中火焰与烟雾的变化。

在这里插入图片描述

        (4)选择不同训练好的模型文件:系统集成了多个版本的YOLO模型(如YOLOv8/v7/v6/v5),用户可以根据自己的需求选择不同的模型进行火焰与烟雾检测。这一功能使得用户能够灵活地比较不同模型的表现,以选择最适合当前任务的模型。

在这里插入图片描述

        在我们的系统中,开启摄像头实时检测功能允许用户直接通过Web应用调用摄像头进行实时的火焰与烟雾监测,这一点在实际的防火监控场景中尤为重要。接着,我们提供了选择图片检测选择视频文件检测的选项,用户可以轻松上传图片或视频文件进行精确的火焰与烟雾分析,其中检测流程的透明度和结果的准确展示是我们设计的重点。

        我们还允许用户根据不同需求选择不同训练好的模型文件进行检测,支持YOLOv8/v7/v6/v5等多个版本,以适应不同的检测场景。为了增强用户体验,我们设计了同时或单独显示检测画面和原始画面的功能,让用户可以直观地比较检测前后的变化。此外,可点击下拉框单独标记特定目标并显示结果的设计,使得用户能够专注于对特定目标如火焰或烟雾的检测,并直接在界面上高亮显示检测结果。

        我们的系统还具备将检测结果保存在页面表格显示的能力,详细记录了检测到的目标、位置、置信度等关键信息,极大地便利了用户对结果的分析和验证。为了提高检测的灵活性和准确性,用户可以可动态调整检测算法的置信度阈值和IOU阈值。更进一步,通过简单点击即可将检测的表格结果输出到csv文件,方便用户进行后续的数据处理和分析。

        最后,为了满足用户对检测记录保存的需求,我们提供了将标记过的图片、视频和摄像头画面结果导出为avi图像文件的功能,保证了检测结果的完整性和可用性。通过以上一系列功能的综合应用,我们的网页应用不仅提高了火焰与烟雾检测的准确率和效率,同时也极大地提升了用户操作的便捷性和整体体验。


2. 绪论

2.1 研究背景及意义

        在过去的几十年里,随着全球工业化和城市化进程的加速,火灾事故频发,对人民的生命财产安全造成了巨大威胁。火灾一旦发生,短时间内可能导致严重的损失和灾难性的后果。因此,有效的火灾预警和监测系统对于保护人民生命财产安全至关重要。在这一背景下,火焰与烟雾检测技术应运而生,成为火灾预防和控制中的关键技术之一。

        火焰与烟雾检测技术的研究和应用,不仅可以实现对火灾的早期预警,减少火灾带来的损失,还可以在火灾发生时提供准确的火情信息,帮助消防人员有效制定救援方案,提高救援效率。此外,随着智能化技术的发展,火焰与烟雾检测技术也逐渐向更高的智能化、自动化方向发展,为实现更加精确和高效的火灾监测提供了可能。

        近年来,深度学习技术的快速发展为火焰与烟雾检测技术的进步提供了新的动力。特别是基于YOLO1(You Only Look Once)系列算法的目标检测技术,在火焰与烟雾检测领域表现出了卓越的性能。YOLO算法以其高速的检测速度和较高的准确率,成为火焰与烟雾检测中的热门研究方向之一。通过不断的算法优化和模型改进,研究者们已经成功将YOLO算法应用于实时火焰与烟雾检测系统,显著提高了火灾监测的实时性和准确性。

        火焰与烟雾检测技术的研究与应用,对于提高火灾预警能力、保障公共安全具有重要的意义。随着技术的不断进步,未来的火焰与烟雾检测系统将更加智能化、高效化,为人类社会的安全防护提供更加坚实的技术支撑。

2.2 国内外研究现状

        火焰与烟雾检测技术在防灾减灾、公共安全管理中扮演着至关重要的角色。随着人工智能技术,尤其是深度学习的飞速发展,基于图像识别的火焰与烟雾检测技术已成为研究的热点。这种技术能够实时监控视频流或图像,自动识别出火焰和烟雾的特征,大大提高了火灾预警的效率和准确性。尤其是YOLO(You Only Look Once)系列算法因其快速、准确的特点,在火灾检测领域得到了广泛应用。

        当前,随着YOLO算法的不断迭代更新,从YOLOv52、YOLOv63到YOLOv84,每一版本的更新都在尝试解决前一版本存在的问题,如提高检测的准确性、减少误检率、加快检测速度等。YOLOv75在网络结构、训练方法及优化策略上均有所创新,进一步提升了模型的性能。

在这里插入图片描述

        除了YOLO系列,近年来还出现了多种新的算法和模型,如ViT(Vision Transformer),通过将注意力机制应用于图像识别任务,显示了与传统卷积神经网络不同的优势。RetinaNet、Faster R-CNN等算法也在持续进化,通过引入更复杂的特征提取和分类机制,提高了目标检测的精准度。

        DETR(Detection Transformer)和其后续改进版本,通过直接将目标检测问题转化为集合预测问题,简化了传统检测框架的复杂度,展示了Transformer架构在目标检测领域的潜力。同时,新兴的算法如Glod-YOLO、YOLOv9及MMDetection等,不断探索算法架构的创新,以适应不同的应用场景和需求。

        准确的火焰与烟雾检测依赖于高质量的数据集。最近几年,随着研究的深入,专门针对火焰和烟雾检测的数据集被开发和更新,这些数据集通常包含了更多的样本、更丰富的场景和更复杂的背景,有助于提高算法的鲁棒性和准确性。

        尽管取得了进展,火焰与烟雾检测仍面临着一系列技术挑战。其中包括但不限于:环境因素对检测准确性的影响、小目标的检测难题、动态背景下的检测稳定性问题、以及算法的实时性要求。针对这些挑战,研究者们正在探索更高效的算法架构、更精细的特征提取技术和更强大的数据增强方法。

        未来的研究趋势可能会集中在提高算法的泛化能力、减少对计算资源的需求、以及开发可以适应各种环境和场景的灵活模型上。此外,结合其他技术如边缘计算、物联网(IoT)设备,实现更加智能和自动化的火灾监测和预警系统,也是未来发展的重要方向。

2.3 要解决的问题及其方案

2.3.1 要解决的问题

        针对本系统的实际情况,我们将针对性地讨论要解决的问题,并提出相应的解决策略,确保火焰与烟雾检测的准确性、速度、适应性以及用户交互的直观性和功能性。

  1. 火焰与烟雾检测的准确性和速度
    本系统的核心挑战在于如何提高在各种环境条件下对火焰与烟雾的检测准确性及实时处理能力。火焰和烟雾的形态多变,尺寸、颜色和密度都可能因环境而异,增加了检测的复杂性。此外,实时监控系统对处理速度有很高的要求,确保能够及时发出警报。

  2. 环境适应性和模型泛化能力
    火灾发生的环境多样,从室内到森林,光照、背景和天气条件的变化都可能影响检测效果。因此,系统需要有良好的环境适应性和模型泛化能力,确保在多种环境条件下都能维持较高的准确率。

  3. 用户交互界面的直观性和功能性
    对于火焰与烟雾检测系统而言,用户界面的设计至关重要。它需要提供直观、易操作的界面,让用户能够轻松上传图像、视频或实时监控,并能简单快捷地切换不同的模型进行测试。此外,界面还应提供实时反馈和历史检测记录的查询功能。

  4. 数据处理能力和存储效率
    系统将处理大量的实时视频流、图像数据,因此需要强大的数据处理能力和高效的存储解决方案。同时,考虑到数据的敏感性,确保数据安全和隐私保护也是不可忽视的重要因素。

  5. 系统的可扩展性和维护性
    随着技术进步和用户需求的变化,系统可能需要引入新的检测模型或更新算法以提升性能。因此,系统的设计应具备良好的可扩展性和维护性,使其能够适应未来技术的发展,确保长期有效运行。

2.3.2 解决方案

        针对火焰与烟雾检测的独特挑战,我们提出了一套综合性的解决方案,旨在通过最新的深度学习技术和用户友好的界面设计,实现高准确度和高效率的检测。以下是我们计划采取的关键步骤:

  1. 深度学习模型的选择和优化

    • 模型架构:我们将采用YOLOv8作为核心深度学习模型,该模型在实现高速度和高准确度方面的平衡尤为出色。针对火焰与烟雾检测的特点,YOLOv8的高效性能使其成为理想选择。同时,为满足不同需求,系统也支持YOLOv7、v6、v5等其他版本的模型。
    • 数据增强:利用多种数据增强技术,如随机裁剪、缩放、旋转、色彩调整等,以模拟多样化的火焰和烟雾场景,增强模型的泛化能力。
    • 迁移学习:利用在大规模数据集上预训练的YOLO模型作为起点,通过迁移学习技术进行微调,针对火焰与烟雾的特定数据集加速训练过程并提升识别性能。
  2. 技术框架和开发工具

    • PyTorch框架:使用PyTorch作为深度学习的主要框架,它的灵活性和强大的GPU加速能力,适合于快速开发和迭代深度学习模型。
    • Streamlit Web界面:借助Streamlit快速构建交互式Web应用,实现用户友好的操作界面。通过CSS进行美化,提升用户体验。
    • PyCharm IDE:选用PyCharm进行开发,以其强大的代码管理和调试功能,支持高效的开发流程。
  3. 功能实现和系统设计

    • 多输入源支持:系统将支持图像、视频文件和实时摄像头数据的输入,以适应不同用户场景的需求。
    • 模型切换功能:用户可根据需求选择和切换不同版本的YOLO模型,实现灵活的检测性能调整。
    • 实时监控与警报:设计实时监控功能,当检测到火焰或烟雾时,系统将立即发出警报,为早期防控提供支持。
  4. 数据处理和存储策略

    • 高效数据处理:采用PyTorch提供的数据预处理和加载机制,确保检测任务的实时性能。
    • 智能数据存储:设计合理的数据存储方案,对检测结果进行有效管理,便于历史数据查询和分析。
  5. 性能优化和系统测试

    • 性能调优:定期对系统进行性能评估,识别并解决瓶颈问题,如通过模型精简、算法优化等方式提升效率。
    • 全面测试:执行包括单元测试、集成测试和性能测试在内的全面测试,确保系统的稳定性和可靠性。

        通过实施上述方法,我们计划开发出一个既准确又高效的火焰与烟雾检测系统,该系统不仅能满足各种环境下的应用需求,还将提供易用的操作界面和强大的数据处理能力,为用户和社会带来显著的安全保障。

2.4 博文贡献与组织结构

        本文详细探讨了基于YOLOv8/v7/v6/v5的火焰与烟雾检测技术,全面展示了从文献综述、数据集处理、算法选择到系统实现的整个研究过程。通过精心设计的实验和深入的分析,本文不仅提高了火焰与烟雾检测的技术水平,还为相关领域的研究者提供了宝贵的参考资料和实用的工具。文章的主要贡献如下:

  1. 文献综述:提供了一项关于火焰与烟雾检测的文献综述,详细介绍了目前该领域的研究现状和发展趋势,包括最新的算法和技术进步。

  2. 数据集处理:详细说明了如何处理和增强火焰与烟雾的数据集,以提高模型训练的效率和准确性。这包括数据的采集、预处理、增强和标注方法。

  3. 算法选择和比较:深入分析了YOLOv8、v7、v6、v5等多个版本的算法特点和性能,提供了基于实际测试结果的比较,帮助读者理解各算法的优缺点。

  4. Streamlit网页设计:介绍了如何利用Streamlit设计美观且用户友好的网页界面,使用户能够轻松进行火焰与烟雾的检测任务,包括上传图片、视频及实时摄像头监控。

  5. 实验结果与分析:提供了详尽的实验结果,包括不同算法和不同设置下的性能对比,以及算法在各种挑战性条件下的表现,为选择合适的检测算法提供了实证基础。

  6. 系统设计与实现:详细介绍了基于YOLO算法的火焰与烟雾检测系统的设计与实现过程,包括软件架构、功能实现及用户界面设计。

  7. 资源分享:为了促进该领域的研究,本文提供了完整的数据集、预训练模型和代码资源包,方便研究者和开发者进行进一步的研究和开发。

        后续章节的组织结构如下: 绪论:介绍研究背景、目的和本文的主要贡献;算法原理:详细介绍YOLOv8/v7/v6/v5等算法的工作原理及其在火焰与烟雾检测中的应用;数据集处理:讨论使用的数据集及其预处理、增强方法。代码介绍:提供模型训练和预测的详细代码说明,包括环境搭建、参数配置和执行步骤。实验结果与分析:展示不同模型在火焰与烟雾检测任务上的实验结果,并进行比较分析。系统设计与实现:介绍基于Streamlit的火焰与烟雾检测系统的设计与实现细节。结论与未来工作:总结本文的研究成果,并讨论未来的研究方向和潜在的改进空间。


3. 数据集处理

        在本研究的火焰与烟雾检测任务中,我们精心准备并详细介绍了一个专门为此目的构建的数据集。数据集总计包含3893张图像,其中2725张用于训练深度学习模型,780张用于验证模型的泛化能力,以及388张用于测试模型在未知数据上的性能。这种划分确保了评估过程的全面性和公正性,为模型优化提供了严格的基准。博主使用的类别如下:

Chinese_name = {'Fire': "火焰", 'Fire-': "火焰B", 'Smoke': "烟雾"}

        在数据的预处理阶段,每张图像都经过自动方向调整,以确保一致的呈现。为了符合YOLO模型对输入尺寸的要求,所有的图像被统一缩放至416x416像素,这一操作不仅标准化了输入数据的尺寸,同时也减少了模型需要处理的变化范围。数据增强技术的应用进一步提升了模型对现实世界变化的适应性。我们使用了一系列技术,包括随机水平翻转、旋转、曝光调整、高斯模糊以及对图像应用椒盐噪声。这些技术模拟了现实世界中可能影响火焰与烟雾图像识别的各种因素,如不同的观看角度、光照变化以及图像捕捉过程中的随机噪声。

在这里插入图片描述

        我们的数据集分布分析进一步揭示了火焰与烟雾在图像中的空间分布倾向和尺寸特点。大多数火焰与烟雾标注位于图像的中心区域,显示了在图像采集阶段火焰与烟雾被置于中心的趋势。火焰与烟雾标注的大小大多集中在中等范围,表明了尺寸上的一致性。这种分布对确定目标检测模型中锚框的尺寸范围和比例尤为重要。通过对这些数据特点的分析,我们在模型的设计和训练策略上作出了针对性的调整,以适应数据集的特定特性。

在这里插入图片描述

        在设计模型时,这些数据集特性被用来指导模型的架构和训练过程。例如,YOLOv8模型在训练过程中可能会特别关注图像中心区域的火焰与烟雾识别,同时在数据增强时引入更多边缘区域的样本,以确保模型对全图范围内的火焰与烟雾都有良好的识别能力。我们也注意到,数据集中的火焰与烟雾尺寸集中在一个相对较小的范围内,这允许模型更专注于这些常见尺寸的火焰与烟雾检测,而不是被极端大小的异常值干扰。

        通过以上介绍,我们的数据集不仅为火焰与烟雾检测模型的训练提供了丰富的、现实条件下的样本,还通过详尽的预处理和增强技术,为模型的鲁棒性和准确性提供了坚实的基础。


4. 原理与代码介绍

4.1 YOLOv8算法原理

        在目标检测的世界中,YOLOv8代表了技术的最新进展。它是在YOLO(You Only Look Once)系列算法发展中的又一重要里程碑。作为一个高效的目标检测模型,YOLOv8继承了YOLO系列算法的核心思想,即在单次前向传播中同时预测多个目标的类别和位置,实现了检测的实时性和准确性的平衡。

        YOLOv8的架构包含了三个主要部分:Backbone、Neck和Head。Backbone是模型的主干网络,负责提取图像的特征。YOLOv8的Backbone在结构上进行了重要的优化,比如引入了CSP(Cross Stage Partial networks)设计,它通过部分连接多个网络阶段,减少了计算量的同时保持了特征的丰富性。此外,YOLOv8的Backbone可能还整合了SPP(Spatial Pyramid Pooling)和C2F(Coarse-to-Fine)结构,使模型能够捕获从粗到细的多尺度特征。

在这里插入图片描述

        Neck部分的作用是连接Backbone和Head,它在特征传递过程中起到增强和过滤的作用。YOLOv8可能采用了PANet(Path Aggregation Network)或者BiFPN(Bidirectional Feature Pyramid Network)这样的结构,以促进不同尺度的特征图之间的信息流动,强化了检测器对于不同尺寸目标的检测能力。

        Head部分是模型的预测器,负责最终的目标检测任务。它通常包含多个并行的卷积层,用于预测边界框的位置、尺寸和目标的类别。YOLOv8的Head可能通过改进的anchor机制来预测边界框,该机制能够更精准地匹配目标的形状和大小,从而提高了检测的精度。

        除了架构上的创新,YOLOv8在算法的训练和优化方面也做了诸多改进。例如,利用AutoML技术自动调整网络结构,或者采用了更先进的损失函数来优化模型的性能。这些技术的应用,使得YOLOv8在各种复杂场景下的火焰检测任务中都表现出色,无论是在精确度、速度还是鲁棒性方面。

        YOLOv8还采用了最新的训练技巧,例如自适应标签分配(adaptive label assignment),这使得模型在训练过程中能够更智能地分配标签,以适应不同目标的特性。此外,YOLOv8还引入了一种新的损失函数,用于平衡检测任务中的多个目标,如定位精度和类别准确性,这有助于模型在多个评价指标上都取得良好表现。

        总的来说,YOLOv8在继承了YOLO系列算法速度与准确度优势的基础上,通过架构和算法的创新,进一步提升了目标检测性能,尤其在火焰检测等需要高精度和快速响应的应用场景中,表现出了非凡的能力。

4.2 模型构建

        在本节中,我我们深入探讨构建和实施火焰与烟雾检测模型的代码架构。本模型采用了现代深度学习库PyTorch和计算机视觉库OpenCV,并结合了专为YOLO系列设计的ultralytics YOLO工具。代码的设计考虑了从数据预处理到模型预测再到后处理分析的整个工作流程。

        首先,代码初始化了一系列重要的Python库。OpenCV作为图像处理的核心工具,负责读取和处理图像数据。PyTorch库是实现深度学习模型的强大框架,它提供了灵活的API和强大的GPU加速支持。

import cv2
import torch
from QtFusion.models import Detector
from datasets.label_name import Chinese_name
from ultralytics import YOLO
from ultralytics.utils.torch_utils import select_device

        在这里,我们利用PyTorch选择设备,如果可用,将利用GPU加速计算,否则回退到CPU。接着,ini_params字典为模型推理定义了一些关键的超参数,包括置信度阈值、IOU阈值等,这些参数对于模型检测结果的准确性和可靠性至关重要。例如,置信度阈值决定了模型识别出的目标所需要的最低置信度,而IOU阈值用于非极大抑制,以消除多余的重叠检测框。

device = "cuda:0" if torch.cuda.is_available() else "cpu"
ini_params = {
    'device': device,
    'conf': 0.25,
    'iou': 0.5,
    'classes': None,
    'verbose': False
}

        count_classes函数用于统计检测到的每个类别的实例数。这对于分析模型在不同类别上的表现,以及可能的类别不平衡问题至关重要。

def count_classes(det_info, class_names):
    count_dict = {name: 0 for name in class_names}
    for info in det_info:
        class_name = info['class_name']
        if class_name in count_dict:
            count_dict[class_name] += 1
    count_list = [count_dict[name] for name in class_names]
    return count_list

        核心类YOLOv8v5Detector是自定义的火焰与烟雾检测器,继承自一个通用的检测器抽象基类Detector。这种面向对象的设计使得代码更具可读性和可扩展性。在类构造中,通过设置参数初始化模型,并保留空间以存储输入图像及其处理结果。load_model函数加载预训练的YOLO模型。这里使用了select_device函数来确定模型将运行在CPU还是GPU上,以便充分利用可用的硬件资源。加载模型后,通过一次前向传递进行“预热”,以提升之后实际推理的速度。在preprocess函数中,对输入的图像进行必要的预处理,如格式转换或尺寸调整,这为模型预测提供了规范化的输入。预处理步骤是确保模型表现的关键,特别是当输入数据与训练数据存在差异时。predict函数是模型进行推理的地方。该函数接收预处理后的图像并应用YOLO模型,根据ini_params中定义的参数执行推理任务,并产生原始的检测结果。

class YOLOv8v5Detector(Detector):
    def __init__(self, params=None):
        super().__init__(params)
        self.model = None
        self.img = None
        self.names = list(Chinese_name.values())
        self.params = params if params else ini_params
	def load_model(self, model_path):
	    self.device = select_device(self.params['device'])
	    self.model = YOLO(model_path)
	    names_dict = self.model.names
	    self.names = [Chinese_name[v] if v in Chinese_name else v for v in names_dict.values()]
	    self.model(torch.zeros(1, 3, *[self.imgsz] * 2).to(self.device).type_as(next(self.model.model.parameters())))
	def preprocess(self, img):
	    self.img = img
	    return img
	
	def predict(self, img):
	    results = self.model(img, **ini_params)
	    return results
	
	def postprocess(self, pred):
	    results = []
	    for res in pred[0].boxes:
	        for box in res:
	            class_id = int(box.cls.cpu())
	            bbox = box.xyxy.cpu().squeeze().tolist()
	            bbox = [int(coord) for coord in bbox]
	            result = {
	                "class_name": self.names[class_id],
	                "bbox": bbox,
	                "score": box.conf.cpu().squeeze().item(),
	                "class_id": class_id,
	            }
	            results.append(result)
	    return results
	    
    def set_param(self, params):
        self.params.update(params)

        postprocess函数处理模型的输出,将其转换成一个易于理解和可用于进一步分析的结构化格式。这涉及到将类别ID映射到可识别的类别名称,格式化边界框坐标,以及提取置信度分数。set_param方法允许动态更新模型的参数,这为实时应用提供了调整模型行为的灵活性。

        综合上述步骤,这段代码描述了一个从端到端的对象检测流程:从数据的输入、处理,到模型的加载、预测,再到结果的输出和解释。这为火焰与烟雾检测提供了一个完整的解决方案,是构建实用安全监测应用的坚实基础。

4.3 训练代码

        在本节博客中,我们将深入讨论火焰与烟雾检测模型的训练过程。本过程涵盖从准备数据集、加载预训练模型到执行训练周期的每个步骤。以下是训练流程的详细介绍,它展示了如何从准备数据到实际训练模型的每一个关键阶段。以下表格详细介绍了YOLOv8模型训练中使用的一些重要超参数及其设置:

超参数设置说明
学习率(lr00.01决定了模型权重调整的步长大小,在训练初期有助于快速收敛。
学习率衰减(lrf0.01控制训练过程中学习率的降低速度,有助于模型在训练后期细致调整。
动量(momentum0.937加速模型在正确方向上的学习,并减少震荡,加快收敛速度。
权重衰减(weight_decay0.0005防止过拟合,通过在损失函数中添加正则项减少模型复杂度。
热身训练周期(warmup_epochs3.0初始几个周期内以较低的学习率开始训练,逐渐增加到预定学习率。
批量大小(batch16每次迭代训练中输入模型的样本数,影响GPU内存使用和模型性能。
输入图像大小(imgsz640模型接受的输入图像的尺寸,影响模型的识别能力和计算负担。

        环境设置与模型加载:首先,我们导入了必要的Python库和模块。os和yaml用于处理文件路径和读取数据配置文件,而torch是我们的深度学习框架。另外,我们从ultralytics库中导入了YOLO类,这是我们将要训练的深度学习模型。

import os
import torch
import yaml
from ultralytics import YOLO  # 用于加载YOLO模型
from QtFusion.path import abs_path  # 用于获取文件的绝对路径

        我们使用PyTorch的设备管理功能,代码自动检测系统中是否有可用的GPU,并据此设置设备变量。这是因为GPU可以显著加速模型训练过程。

device = "0" if torch.cuda.is_available() else "cpu"

        数据集准备:在这里,我们还设定了数据加载过程中所使用的工作进程数(workers)和每个批次的大小(batch)。使用更多的工作进程可以加速数据的读取,而批次大小则直接关联到训练的内存消耗和梯度更新频率。然后,我们准备数据集的配置。这包括解析数据集配置文件的路径,并更新其中的path项,以确保它指向正确的目录。这一步骤对于正确加载训练和验证数据至关重要。

workers = 1  # 工作进程数
batch = 8  # 每批处理的图像数量
data_name = "FireSmoke"
data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current')
unix_style_path = data_path.replace(os.sep, '/')

        为了保证文件路径的一致性和正确性,我们采用了os和yaml库对数据配置文件进行读取和修改。这项工作确保了无论在什么系统上,无论代码运行在哪个目录下,路径总能被正确解析。

directory_path = os.path.dirname(unix_style_path)
with open(data_path, 'r') as file:
    data = yaml.load(file, Loader=yaml.FullLoader)

if 'path' in data:
    data['path'] = directory_path
    with open(data_path, 'w') as file:
        yaml.safe_dump(data, file, sort_keys=False)

        训练模型:接下来,模型训练的关键步骤是加载YOLOv8模型。我们从预先训练好的权重开始,这允许模型在现有的知识基础上进一步学习。训练的执行通过调用model.train()函数进行,其中指定了数据路径、训练设备、工作进程数、图像大小、训练周期和批次大小。这些参数控制了训练过程的各个方面,从计算资源的使用到模型如何接收和处理数据。

model = YOLO(abs_path('./weights/yolov5nu.pt', path_type='current'), task='detect')  # 加载预训练的YOLOv8模型
# model = YOLO('./weights/yolov5.yaml', task='detect').load('./weights/yolov5nu.pt')  # 加载预训练的YOLOv8模型
# Training.
results = model.train(  # 开始训练模型
    data=data_path,  # 指定训练数据的配置文件路径
    device=device,  # 自动选择进行训练
    workers=workers,  # 指定使用2个工作进程加载数据
    imgsz=640,  # 指定输入图像的大小为640x640
    epochs=120,  # 指定训练100个epoch
    batch=batch,  # 指定每个批次的大小为8
    name='train_v5_' + data_name  # 指定训练任务的名称
)
model = YOLO(abs_path('./weights/yolov8n.pt'), task='detect')  # 加载预训练的YOLOv8模型
results2 = model.train(  # 开始训练模型
    data=data_path,  # 指定训练数据的配置文件路径
    device=device,  # 自动选择进行训练
    workers=workers,  # 指定使用2个工作进程加载数据
    imgsz=640,  # 指定输入图像的大小为640x640
    epochs=120,  # 指定训练100个epoch
    batch=batch,  # 指定每个批次的大小为8
    name='train_v8_' + data_name  # 指定训练任务的名称
)

        通过这种方式,我们不仅为火焰与烟雾检测任务提供了一套标准化的训练流程,而且通过精心选择的参数和迁移学习的应用,最大化了训练过程的效率和最终模型的性能。


5. 实验结果与分析

5.1 训练曲线

        在深度学习的训练过程中,损失函数和评价指标的图像提供了对模型性能和学习进度的直观理解。图像展示了在训练YOLOv8模型过程中的多个关键指标,包括损失函数值、精确度(Precision)、召回率(Recall)以及平均精度(mAP)。以下是对这些图像的分析。

在这里插入图片描述

        在训练的损失函数图表中,我们可以看到,随着训练进程的推进,train/box_loss、train/cls_loss以及train/obj_loss逐渐减小,并趋于稳定。这表明模型在识别对象的位置、分类对象以及确定目标对象存在的置信度方面表现出了学习效果,且随着时间的推移这一效果变得更加稳定和可靠。特别是边框损失(box_loss),它的稳定下降表明模型在定位目标框方面变得越来越准确。分类损失(cls_loss)和目标损失(obj_loss)的下降也指出模型在分类准确度和目标检测置信度上有所提高。

        验证集上的损失函数,即val/box_loss、val/cls_loss和val/obj_loss,也显示出了类似的下降趋势,这是一个积极的信号,说明模型在未见过的数据上同样表现良好,而不仅仅是在训练集上。这种趋势表明模型具有良好的泛化能力,这在实际应用中是非常重要的。

        至于性能指标,metrics/precision和metrics/recall展示了模型随着训练时间的推移逐渐提高的性能。精确度的提升意味着模型在判断图像中是否存在火焰或烟雾时越来越少做出错误的肯定,而召回率的提升则说明模型能够检测到更多的正样本(即实际存在的火焰或烟雾)。这两个指标的平衡是目标检测任务中的重要考量,高精确度和高召回率通常难以同时实现,因为它们在很多情况下是相互竞争的。

        最后,我们看到metrics/mAP50和metrics/mAP50-95指标,它们分别表示在IOU阈值为50%和50%至95%不等阈值下的平均精度。mAP(平均精度均值)是目标检测中最重要的评估标准之一,mAP50的提高表明模型在较低IOU阈值下性能良好,而mAP50-95的稳步增长则证明了模型在更严格的条件下也能保持较高的检测准确性。

        综合这些图表,我们可以得出结论:模型在训练过程中表现出持续的进步,不仅学习了如何准确地检测火焰与烟雾,而且还提高了在各种情况下的检测准确度。损失函数的下降和性能指标的提升表明了模型优化的成功,为实际部署和应用提供了坚实的基础。

5.2 PR曲线图

        Precision-Recall (PR) 曲线是评估目标检测模型性能的关键工具,特别是在类别不平衡的数据集中。在火焰与烟雾检测任务中,精确度(Precision)表示模型正确识别火焰或烟雾的能力,而召回率(Recall)则表示模型检测到所有火焰或烟雾实例的能力。PR曲线图展示了在不同置信阈值下模型精确度与召回率的关系。

在这里插入图片描述

        我们可以观察到两个不同类别——火焰(Fire)和烟雾(Smoke)——以及所有类别的总体表现。火焰的最大平均精确度(mAP)为0.610,烟雾的mAP为0.657,整体所有类别的mAP达到了0.634。这些mAP值是在IOU阈值为0.5时计算得出的,它们为检测任务的性能提供了量化的指标。

        通过分析PR曲线,我们可以看到,随着召回率的增加,即模型尝试检测更多的正样本,精确度开始下降。这是因为在努力检测更多实例的同时,模型可能会将更多的负样本误判为正样本,导致精确度降低。另一方面,如果我们提高模型的置信度阈值,以便仅在非常确定的情况下才标记火焰或烟雾,精确度会增加,但召回率会降低,因为模型会漏检一些实际存在的目标。

        对于火焰检测,PR曲线表现出较高的精确度,直到召回率接近0.6左右。这表明模型对于火焰的检测在大多数情况下都是准确的,但仍有提升空间,尤其是在提高召回率的同时保持高精确度方面。烟雾检测的精确度曲线稍低,这可能是因为烟雾的视觉特征比火焰更加多样和复杂,使得模型更难以在没有误报的情况下检测出所有烟雾实例。

        从整体上看,模型在火焰和烟雾检测上的综合性能是令人满意的,mAP值指示了模型在检测常见火焰与烟雾场景时具有良好的准确性。然而,为了进一步提升性能,可以考虑优化模型架构或训练策略,例如,通过增加更具挑战性的样本来训练模型,或者应用更复杂的数据增强技术来模拟多变的火焰和烟雾条件。此外,可以考虑采用不同的损失函数,或调整现有损失函数的权重,以便更加平衡精确度与召回率之间的关系。

5.3 YOLOv8/v7/v6/v5对比实验

(1)实验设计
        本实验旨在评估和比较YOLOv5、YOLOv6、YOLOv7和YOLOv8几种模型在火焰与烟雾目标检测任务上的性能。为了实现这一目标,博主分别使用使用相同的数据集训练和测试了这四个模型,从而可以进行直接的性能比较。该数据集包含火焰与烟雾的图像。本文将比较分析四种模型,旨在揭示每种模型的优缺点,探讨它们在工业环境中实际应用的场景选择。

模型图像大小 (像素)mAPval 50-95CPU ONNX 速度 (毫秒)A100 TensorRT 速度 (毫秒)参数数量 (百万)FLOPs (十亿)
YOLOv5nu64034.373.61.062.67.7
YOLOv8n64037.380.40.993.28.7
YOLOv6N64037.5--4.711.4
YOLOv7-tiny64037.4--6.0113.1

(2)度量指标

  • F1-Score:F1-Score 作为衡量模型性能的重要指标,尤其在处理类别分布不均的数据集时显得尤为关键。它通过结合精确率与召回率,提供了一个单一的度量标准,能够全面评价模型的效能。精确率衡量的是模型在所有被标记为正例中真正属于正例的比例,而召回率则关注于模型能够识别出的真正正例占所有实际正例的比例。F1-Score通过两者的调和平均,确保了只有当精确率和召回率同时高时,模型的性能评估才会高,从而确保了模型对于正例的预测既准确又完整。
  • mAP(Mean Average Precision):在目标检测任务中,Mean Average Precision(mAP)是评估模型性能的重要标准。它不仅反映了模型对单个类别的识别精度,而且还考虑了所有类别的平均表现,因此提供了一个全局的性能度量。在计算mAP时,模型对于每个类别的预测被单独考虑,然后计算每个类别的平均精度(AP),最后这些AP值的平均数形成了mAP。
名称YOLOv5nuYOLOv6nYOLOv7-tinyYOLOv8n
mAP0.6460.6700.6380.634
F1-Score0.650.690.660.64

(3)实验结果分析

       在目标检测领域,模型的性能评估通常通过多个维度来衡量,其中mAP(平均精度均值)和F1-Score是最为关键的两个指标。mAP衡量的是模型在不同置信度阈值下检测正确性的平均水平,而F1-Score则是精确度(Precision)和召回率(Recall)的调和平均数,两者共同描绘了模型性能的全貌。

       从实验结果来看,YOLOv6n在mAP指标上达到了0.670,领先于其他三个版本,表明其在识别火焰与烟雾时整体性能最佳。YOLOv6n的结构和算法优化可能更适合我们的数据集特性,例如,它可能在处理数据集中存在的特定类型的火焰和烟雾图像时,能够提供更准确的边界框定位和类别预测。紧随其后的是YOLOv7-tiny版本,其mAP为0.638。作为一个轻量级模型,YOLOv7-tiny通常旨在平衡速度与准确度,这可能是其在mAP上略低于YOLOv6n的原因。它可能在快速检测方面表现更好,但在精确度方面稍逊一筹。

       YOLOv5nu的mAP和F1-Score分别为0.646和0.65,表现出了良好的综合能力,但与YOLOv6n相比,其对火焰与烟雾的检测能力略显不足。这可能与其模型结构或训练时使用的特征提取技术有关。

在这里插入图片描述

        最新的YOLOv8n,mAP为0.634,在四个模型中排名最后,但其实与YOLOv5nu的表现相差无几。YOLOv8n的设计可能更侧重于其他方面的性能提升,如检测速度或模型大小,而不是最大化mAP值。

        在应用实际火焰与烟雾检测任务时,选择合适的模型不仅要考虑指标评分,还需要考虑实际应用场景。例如,在对实时性要求极高的场景中,YOLOv7-tiny可能更受欢迎,而在需要极高准确度的场合,则可能偏向于选择YOLOv6n。这一选择将基于任务的具体需求,如处理速度、资源限制、以及模型在特定类型图像上的表现等。通过全面分析不同模型的性能,我们能够为特定的使用场景选择最适合的YOLO版本,以确保既高效又准确的检测性能。


6. 系统设计与实现

6.1 系统架构概览

        在探讨基于YOLOv8/v7/v6/v5的火焰与烟雾检测系统的架构设计时,我们必须深入了解系统的内部组件以及这些组件如何协同工作以实现高效、准确的检测。本系统采用了深度学习的方法,特别是利用了YOLO(You Only Look Once)算法的多个版本,以提供实时且精确的火焰和烟雾检测。以下是系统的主要组件和它们的功能:

在这里插入图片描述

  1. 检测系统类 (Detection_UI):这是系统的主要入口,负责整合不同的模块,并提供用户界面(UI)以与系统交互。它初始化系统配置,处理用户输入(如摄像头流、图片文件或视频文件),并显示检测结果。

  2. 模型加载与检测 (YOLOv8v5Detector):此类是系统的核心,负责加载训练好的YOLO模型,并执行实际的检测任务。它使用load_model方法加载模型权重,并通过predict方法对输入图像进行预测。这个类是如何适应不同版本的YOLO算法(v5至v8),并确保模型可以处理各种检测任务的关键。

  3. 数据处理与日志 (LogTableResultLogger)LogTable负责管理和记录检测结果的日志,方便用户查看和导出检测结果。ResultLogger则用于格式化检测结果,使之易于理解和展示。

  4. 图像处理工具 (drawRectBox):一个实用的功能,用于在检测到的对象(如火焰和烟雾)周围绘制边框,增强结果的可视化效果。此功能对于提高用户对检测结果的认识非常重要。

6.2 系统流程

        在基于YOLOv8/v7/v6/v5的火焰与烟雾检测系统中,系统流程是整个应用运行的骨架。下面,我们将通过一系列的步骤详细介绍这一流程,以便于理解系统的工作机制。

在这里插入图片描述

  1. 初始化系统:系统启动时,首先实例化Detection_UI类,这一步骤触发了整个系统配置的初始化过程。包括设置页面布局(setup_page)、初始化侧边栏选项(setup_sidebar),如模型类型、置信度阈值、IOU阈值等。

  2. 模型选择与加载:用户通过侧边栏选择所需的YOLO模型版本(v5至v8之间)及模型文件。系统根据选择调用YOLOv8v5Detector类的load_model方法加载对应的预训练模型权重。

  3. 输入源选择:用户接下来选择输入源,可以是摄像头流、图片文件或视频文件。此选择将决定后续的处理流程。

  4. 处理输入:根据用户的输入源选择,Detection_UI类调用process_camera_or_file方法进行处理。对于摄像头流:系统循环捕获摄像头的实时视频帧,并将每帧图像传递给模型进行检测。对于图片文件:系统读取并处理上传的图片,然后传递给模型进行检测。对于视频文件:系统逐帧读取视频文件,并将每帧图像传递给模型进行检测。

  5. 执行检测:不论是实时视频帧、单张图片还是视频帧,YOLOv8v5Detector通过其predict方法对输入图像进行检测。这涉及图像预处理、模型预测及后处理等步骤,以识别图像中的火焰和烟雾。

  6. 展示结果:检测结果通过辅助函数drawRectBox在图像上绘制边框和标签,增强可视化效果。同时,LogTableResultLogger类记录检测的详细信息,并在系统UI上以表格形式展示。

  7. 结果导出:用户可选择导出检测结果。系统将检测日志保存为CSV文件,并可将标注过的图像或视频保存到本地。

  8. 循环或终止:对于摄像头流和视频文件,此过程将循环执行,直到用户决定停止;对于单张图片,处理完成后即等待用户的下一步操作。

        通过上述流程,系统能够实现对火焰和烟雾的快速准确检测,并以用户友好的方式提供实时反馈和结果记录功能。这一流程不仅体现了系统设计的高效性和灵活性,也确保了用户可以根据具体需求轻松地进行配置和使用。


代码下载链接

        如果您希望获取博客中提及的完整资源包,包含测试图片、视频、Python文件(*.py)、网页配置文件、训练数据集、代码及界面设计等,可访问博主在面包多平台的上传内容。相关的博客和视频资料提供了所有必要文件的下载链接,以便一键运行。完整资源的预览如下图所示:

在这里插入图片描述

        资源包中涵盖了你需要的训练测试数据集、训练测试代码、UI界面代码等完整资源,完整项目文件的下载链接可在下面的视频简介中找到➷➷➷

演示及项目介绍视频:https://www.bilibili.com/video/BV1ut421n7nS/

在这里插入图片描述

完整安装运行教程:

        这个项目的运行需要用到Anaconda和Pycharm两个软件,下载到资源代码后,您可以按照以下链接提供的详细安装教程操作即可运行成功,如仍有运行问题可私信博主解决:

  1. Pycharm和Anaconda的安装教程https://deepcode.blog.csdn.net/article/details/136639378

        软件安装好后需要为本项目新建Python环境、安装依赖库,并在Pycharm中设置环境,这几步采用下面的教程可选在线安装(pip install直接在线下载包)或离线依赖包(博主提供的离线包直接装)安装两种方式之一:

  1. Python环境配置教程https://deepcode.blog.csdn.net/article/details/136639396(2,3方法可选一种);
  2. 离线依赖包的安装指南https://deepcode.blog.csdn.net/article/details/136650641(2,3方法可选一种);

        如使用离线包方式安装,请下载离线依赖库,下载地址:https://pan.baidu.com/s/1uHbU9YzSqN0YP_dTHBgpFw?pwd=mt8u (提取码:mt8u)。


7. 结论与未来工作

        本文深入研究并实践了基于YOLOv8/v7/v6/v5的深度学习模型在火焰与烟雾检测领域的应用,成功开发了一个集成了这些先进算法的检测系统。通过对YOLO系列模型的细致比较和精心优化,本研究不仅显著提升了火焰与烟雾检测的准确率和实时性,还借助Streamlit框架创建了一个直观、用户友好的Web应用。该应用使用户能够轻松地进行火焰与烟雾检测,极大地提升了在实际应用场景中的可用性和有效性。

        通过一系列的实验验证,本研究提出的检测方法在准确性和处理速度上都达到了高标准。同时,我们提供了完整的数据集处理流程、模型训练与预测代码,以及基于Streamlit的系统设计和实现细节,为后续研究者和开发者提供了极大的便利,使其能够轻松复现和参考。尽管已经取得了显著成果,火焰与烟雾检测作为一项具有挑战性的任务,仍有很多改进空间。在未来工作中,我们计划从以下方向进行深入探索:

  • 模型优化:继续研究深层次的网络结构和优化策略,如神经网络架构搜索(NAS),以进一步提高模型的性能和效率。
  • 多模态融合:考虑结合图像以外的其他模态信息,如温度数据、烟雾密度传感数据等,采用多模态学习方法,实现更准确的火焰与烟雾检测。
  • 跨域适应性:研究不同环境下的火焰与烟雾检测,如室内外场景的变化,通过领域自适应技术提高模型的泛化能力。
  • 用户交互体验:进一步优化系统的用户界面和交互设计,使其更加人性化和智能化,满足不同用户群体的需求。
  • 实际应用拓展:探索火焰与烟雾检测在更广泛的实际应用场景中的可能性,如森林防火、工业安全监控等,最大化其社会和经济价值。

        总体而言,基于深度学习的火焰与烟雾检测技术正处于飞速发展之中。随着技术进步和应用场景的拓展,我们有理由相信,在不久的将来,该技术将在人类生活的多个领域,如公共安全、环境监测、灾难预防等,发挥更加关键的作用。


  1. Liu C, Tao Y, Liang J, et al. Object detection based on YOLO network[C]//2018 IEEE 4th information technology and mechatronics engineering conference (ITOEC). IEEE, 2018: 799-803. ↩︎

  2. Zhu X, Lyu S, Wang X, et al. TPH-YOLOv5: Improved YOLOv5 based on transformer prediction head for object detection on drone-captured scenarios[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 2778-2788. ↩︎

  3. Sun Z, Chen B. Research on Pedestrian Detection and Recognition Based on Improved YOLOv6 Algorithm[C]//International Conference on Artificial Intelligence in China. Singapore: Springer Nature Singapore, 2022: 281-289. ↩︎

  4. Lou H, Duan X, Guo J, et al. DC-YOLOv8: small-size object detection algorithm based on camera sensor[J]. Electronics, 2023, 12(10): 2323. ↩︎

  5. Zhao H, Zhang H, Zhao Y. Yolov7-sea: Object detection of maritime uav images based on improved yolov7[C]//Proceedings of the IEEE/CVF winter conference on applications of computer vision. 2023: 233-238. ↩︎

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐