欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

基于深度学习的吸烟行为检测系统(网络版 + YOLOv8/v7/v6/v5 代码 + 训练数据集)

最编程 2024-05-12 11:13:38
...

摘要:本文深入研究了基于深度学习的吸烟行为检测系统,核心采用YOLOv8并整合了YOLOv7YOLOv6YOLOv5算法,进行性能指标对比;详述了国内外研究现状数据集处理算法原理模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像视频实时摄像头进行吸烟行为检测,可上传不同训练模型(YOLOv8/v7/v6/v5)进行推理预测,界面可方便修改。本文附带了完整的网页设计深度学习模型代码训练数据集的下载链接。

文章目录

  • 1. 网页功能与效果
  • 2. 绪论
    • 2.1 研究背景及意义
    • 2.2 国内外研究现状
    • 2.3 要解决的问题及其方案
      • 2.3.1 要解决的问题
      • 2.3.2 解决方案
    • 2.4 博文贡献与组织结构
  • 3. 数据集处理
  • 4. 原理与代码介绍
    • 4.1 YOLOv8算法原理
    • 4.2 模型构建
    • 4.3 训练代码
  • 5. 实验结果与分析
    • 5.1 训练曲线
    • 5.2 混淆矩阵
    • 5.3 YOLOv8/v7/v6/v5对比实验
  • 6. 系统设计与实现
    • 6.1 系统架构概览
    • 6.2 系统流程
  • 代码下载链接
  • 7. 结论与未来工作

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

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


1. 网页功能与效果

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

        在本系统中,我们提供了一系列先进功能以满足不同用户的需求。首先,开启摄像头实时检测功能允许用户一键开启摄像头进行吸烟行为实时识别,强调了实时性和准确性。选择图片检测选择视频文件检测功能则让用户能够上传图片或视频文件,支持多种格式,以便进行快速且准确的吸烟行为检测。此外,用户可以根据具体需求选择不同训练好的模型文件进行识别,展示了模型多样性的优势。

        系统还支持检测画面与原始画面的显示方式选择,提供了特定目标标记与结果显示功能,使用户能够专注于对特定吸烟行为类别的识别。所有识别结果可在页面上的表格中显示,并允许用户动态调整检测算法的参数,如置信度阈值和IOU阈值,以优化识别结果。为了方便数据分析和报告编写,用户可以将检测结果导出为csv文件。最后,系统提供了功能,允许用户将标记后的图片、视频及摄像头画面结果导出为avi格式文件,便于分享和展示。整体而言,这些功能不仅展现了系统的强大识别能力,也体现了其设计的用户友好性和实用性。


2. 绪论

2.1 研究背景及意义

        在当前的社会环境中,吸烟行为的监控和管理已成为公共场所健康管理的重要组成部分。无论是在公共交通工具、办公室还是餐厅等公共场合,限制吸烟行为不仅有助于维护环境的清洁,还有助于减少二手烟对非吸烟者健康的影响。然而,传统的吸烟监测方法,如安装烟雾探测器或由人工监视,常常存在响应延迟或误报的问题。随着计算机视觉技术的快速发展,基于深度学习的图像识别技术提供了一种高效准确的解决方案,尤其是利用最新的YOLOv8、YOLOv7、YOLOv6、YOLOv5等算法构建的吸烟行为检测系统。

        吸烟行为检测不仅对于公共卫生管理具有重要意义,还对于个体健康习惯的改善起到了促进作用。通过有效的监控与管理,可以鼓励人们在公共场合遵守吸烟规定,从而减少吸烟行为带来的负面影响。此外,随着深度学习技术的不断进步和智能监控系统的广泛部署,吸烟行为检测系统的精准度和实时性得到了显著提升,为公共健康管理提供了强有力的技术支持。

        本博客将深入探讨基于YOLOv8/v7/v6/v5的吸烟行为检测系统的研究背景及意义,介绍该技术在国内外的研究现状,阐述所要解决的问题与提出的解决方案,并详细介绍本研究的主要贡献。通过对最新算法的改进、技术进展的跟踪、数据集的更新及性能的优化等方面的综合分析,我们旨在为读者提供一个全面、深入的了解,展示基于深度学习的吸烟行为检测系统的发展潜力与实际应用价值。

2.2 国内外研究现状

        目标检测技术,尤其是深度学习方法,在近年来取得了巨大的进步,这些进展极大地促进了吸烟行为检测等应用领域的发展。从YOLOv51、YOLOv62、YOLOv73、YOLOv84到Transformer-based5模型如ViT,再到其他高效算法如RetinaNet、Faster R-CNN、DETR,以及最新的Glod-YOLO和MMDetection等,每种方法都在不断突破性能的极限,提供了更准确、更快速的识别能力。

        在当前的公共卫生领域,吸烟行为的监控与管理日益成为关键议题。公共场所的无烟环境建设不仅是提升公众健康水平的重要措施,也是现代城市文明的重要体现。因此,精准有效地检测吸烟行为,尤其是在不允许吸烟的区域,对于执行公共卫生政策和促进健康生活方式具有重要意义。

在这里插入图片描述

        随着人工智能技术的飞速发展,基于计算机视觉的行为识别技术为吸烟行为的自动检测提供了新的解决方案。特别是近年来,YOLO(You Only Look Once)系列算法在实时物体检测领域取得了显著的成就,其快速高效的特点使得基于YOLO算法的吸烟行为检测系统成为可能。从YOLOv5到最新的YOLOv8,每一代的升级都带来了检测速度和准确率的提升,这对于需要实时处理大量监控视频数据的吸烟行为检测具有重大意义。

        国内外学者针对吸烟行为检测进行了广泛研究,并取得了一系列进展。这些研究不仅包括吸烟行为的检测算法研究,也涉及到数据集的构建、模型的训练和优化策略等多个方面。近期的研究成果表明,通过结合深度学习技术,尤其是卷积神经网络(CNN)和YOLO系列算法的应用,可以大幅提升吸烟行为检测的准确率和效率。

        本博客旨在探索基于YOLOv8/v7/v6/v5的吸烟行为检测系统的设计和实现。我们将详细介绍系统的整体架构,包括数据准备、模型训练、性能评估和应用部署等关键环节。通过对比不同版本的YOLO算法,在实际应用中选择最适合的模型,旨在为公共场所提供一个高效、准确的吸烟行为自动检测解决方案,以支持公共健康政策的执行和促进健康生活方式的普及。我们相信,这项工作不仅对学术界有重要贡献,对于促进公共健康、提高社会治理水平也具有重要的实践意义。

        为了确保本研究的科学性和前瞻性,我们参考了至少5篇最新的相关研究文献,确保了本文在理论和技术上都紧跟国际研究的最前沿。这些参考文献不仅涵盖了YOLO算法的最新进展,也包括了吸烟行为检测领域的重要研究成果,为我们的研究提供了宝贵的理论支持和技术参考。

        通过本博客的介绍,我们希望能够为广大研究人员和技术开发者提供一份关于基于YOLOv8/v7/v6/v5的吸烟行为检测系统的研究指南和实践参考

2.3 要解决的问题及其方案

2.3.1 要解决的问题

        在开发基于YOLOv8/v7/v6/v5的吸烟行为检测系统时,我们面临的核心挑战和解决方案如下:

  1. 检测准确性与实时性的平衡
            吸烟行为检测系统的主要目标是实现对吸烟行为的高准确度识别与实时处理。鉴于吸烟行为可能在各种环境下发生,包括不同的光照条件、复杂的背景以及吸烟者的多样姿态,系统需要能够准确地识别这些行为的细微特征。我们通过引入最新的YOLO版本,如YOLOv8,它通过优化算法结构和计算流程,实现了更高的检测速度和准确率,以满足实时检测的需求。

  2. 模型的环境适应性和泛化能力
            环境的多样性对吸烟行为检测系统提出了巨大挑战。系统需要有良好的环境适应性和泛化能力,以保证在各种环境条件下都能维持高识别准确率。为了解决这一问题,我们采用了数据增强、迁移学习等技术,通过在多样化的数据集上训练模型,提高了模型的鲁棒性和泛化能力。

  3. 交互式Web应用界面的设计与实现
            为了使用户能够方便地使用吸烟行为检测系统,我们开发了一个基于Streamlit的交互式Web应用。这个Web应用不仅支持图像和视频的上传检测,还能接入实时摄像头进行实时监测。用户界面通过CSS进行美化,确保了直观性和功能性。用户可以轻松切换不同的模型文件,测试不同版本的YOLO模型(YOLOv8/v7/v6/v5)对检测效果的影响。

  4. 深度学习模型的集成与性能优化
            为了集成并优化YOLOv8/v7/v6/v5等多个版本的模型,我们采用了PyTorch作为主要的技术框架。通过细致地调整模型参数、优化训练流程,并利用高效的计算资源,我们成功提升了模型的性能。此外,我们还针对不同的使用场景和需求,对模型进行了定制化的优化,以达到最佳的检测效果。

  5. 系统的可扩展性与维护性
            考虑到未来可能的技术进步和需求变化,我们在系统设计时就充分考虑了可扩展性和维护性。系统架构设计允许轻松集成新的模型或功能,同时保证了代码的可读性和可维护性。我们使用PyCharm作为开发IDE,利用其强大的代码管理和调试功能,确保了开发过程的高效和系统的稳定运行。

        通过以上解决方案的实施,我们的吸烟行为检测系统不仅在技术层面上实现了创新,也为用户提供了便捷的操作体验和强大的功能,有望在公共卫生领域发挥重要作用。

2.3.2 解决方案

针对吸烟行为检测的挑战,我们将采用以下策略设计和实现基于YOLOv8/v7/v6/v5的吸烟行为检测系统:

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

    • 模型架构:选择YOLOv8作为核心深度学习模型,考虑到其在速度和准确度之间的优异平衡。对于特定需求,我们也会考虑使用YOLOv7、YOLOv6、YOLOv5等其他版本,以便根据具体应用场景选择最合适的模型。
    • 数据增强:为了提升模型在各种环境下的泛化能力,我们将采用多种数据增强技术,如随机裁剪、旋转、翻转、色彩调整等,以模拟不同环境下的吸烟行为场景。
    • 迁移学习:利用大规模数据集上预训练的YOLO模型作为起点,通过迁移学习技术进行微调,加快训练速度并提升识别性能。
  2. 技术框架和开发工具

    • PyTorch框架:选用PyTorch作为主要的深度学习框架,其提供了灵活的编程环境和强大的GPU加速能力,非常适合于深度学习模型的快速开发和迭代。
    • Streamlit网页设计:采用Streamlit构建交互式Web应用,它支持快速开发轻量级的数据应用,非常适合展示吸烟行为检测的结果。
    • CSS美化:使用CSS对Streamlit默认界面进行美化,提升用户体验,使界面更加直观和友好。
    • PyCharm开发环境:使用PyCharm作为集成开发环境(IDE),其强大的代码编辑、调试和项目管理功能,有助于提高开发效率。
  3. 功能实现和系统设计

    • 多输入源支持:系统将支持多种输入源,包括静态图像、视频文件和实时摄像头捕获,以适应不同的使用场景。
    • 模型切换功能:实现一个用户友好的界面,允许用户根据需要选择和切换不同版本的YOLO模型(YOLOv8/v7/v6/v5),以评估和比较各模型的检测效果。
  4. 数据处理和存储策略

    • 高效数据处理:利用PyTorch的DataLoader和预处理功能,实现高效的数据加载和预处理流程,确保系统的实时性能。
    • 智能数据存储:设计高效的数据存储方案,对检测结果和历史数据进行有效的组织和索引,便于后续的查询和分析。
  5. 性能优化和系统测试

    • 性能调优:通过模型压缩、精细化参数调整和硬件加速等手段,对系统进行深度优化,以提高运行效率和减少计算资源消耗。
    • 全面系统测试:进行全面的系统测试,包括单元测试、集成测试和性能测试,确保系统的稳定性和可靠性。

        通过上述方法的实施,我们旨在开发出一个既准确又高效的吸烟行为检测系统,能够满足不同用户在不同环境下的应用

2.4 博文贡献与组织结构

        本文的主要贡献在于深入探讨了基于YOLOv8/v7/v6/v5的多吸烟行为检测系统的设计与实现。通过对相关文献的综述、详尽的数据集处理方法、精选的深度学习算法对比,以及用户友好的Web界面设计,本文提供了一个全面的视角来理解和应用现代目标检测技术于生物多样性保护和研究领域。以下是本文的核心贡献:

  1. 文献综述:对当前吸烟行为检测技术的文献进行了全面的回顾,特别是YOLO系列算法在吸烟行为检测中的应用,为读者提供了一个坚实的理论基础。
  2. 数据集处理:详细介绍了数据集的选择、预处理、增强技术以及其在训练深度学习模型中的重要性,提升了模型的泛化能力和准确性。
  3. 算法选择与对比:对YOLOv8、v7、v6、v5等版本进行了深入的比较分析,明确了各版本的优缺点和适用场景,为读者选择合适的算法提供了指导。
  4. 网页设计:采用Streamlit框架设计了一个美观且用户友好的Web界面,使得吸烟行为检测不仅限于技术人员,对普通用户也同样友好。
  5. 实验结果与分析:通过一系列的实验,对比了YOLOv7/v6/v5等算法的效果,提供了详尽的性能评估,为读者在实际应用中的算法选择提供了依据。
  6. 资源分享:分享了完整的数据集和代码资源包,包括模型的预测与训练代码,使读者能够轻松复现实验结果,并在此基础上进行进一步的研究和开发。

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


3. 数据集处理

        在本研究中,我们构建了一个涵盖8520张图片的吸烟行为检测数据集,旨在训练和测试基于YOLOv8/v7/v6/v5的深度学习模型。数据集被精心划分为5950张训练图片、850张测试图片以及1720张验证图片,以保证模型能在不同的数据子集上学习和验证其性能。

Chinese_name = {'Smoking': "吸烟"}
Label_list = list(Chinese_name.values())

        每张图片在进入数据管道之前都经过了一系列的预处理步骤,以标准化数据输入并提高模型训练的效率。首先,我们对图片进行了自动方向校正,确保所有图片均以正确的方向呈现。同时,为了去除可能会影响模型性能的元数据,我们剥离了图片的EXIF方向信息。其次,所有图片被统一缩放至640x640像素的大小,采用拉伸方式以满足模型输入的需要,尽管这可能导致一定程度的形状扭曲,但考虑到实时监控的环境和设备限制,这样的处理是合理的。

        为了反映数据集的特性和复杂性,我们在训练集中包含了多样化的场景和吸烟行为。这些图片不仅包括了室内外不同环境、不同光照条件下的吸烟场景,还有各种姿态和吸烟动作,以期模型能够学习到吸烟行为的多种表现形式。

        在标注过程中,我们采用单一类别标签“吸烟”对吸烟行为进行标识。通过精确的标注框,我们定位了图像中的吸烟动作或烟草制品,确保模型能够学习到从各种角度捕捉吸烟行为的能力。所有的标注框都是经过人工仔细检查,以保持标注质量。这种高质量的标注对于模型学习正确识别吸烟行为是至关重要的。

        此外,数据集中的标签采用了中文名“吸烟”,反映了该数据集可能专门用于中文环境或意在提升模型在处理中文场景时的性能。这一点对于将来部署模型到中文使用环境中的应用场景非常重要,可以确保模型的输出与用户的语境保持一致。为了进一步增强模型的鲁棒性和泛化能力,可能会考虑在后续研究中对数据集应用更多的增强处理,如随机裁剪、变形、噪声注入等。通过这样的增强处理,模型可以更好地学习在现实世界中复杂多变条件下识别吸烟行为的能力。

在这里插入图片描述

        我们对数据集的深入分析揭示了类别分布的不均衡性,这是许多实际数据集面临的常见问题。一些类别的实例数量远超其他类别,这可能导致模型对频繁出现的类别识别得更好。为解决这一问题,可以考虑采用数据增强或重新采样的技术来平衡类别分布,从而提升模型在所有类别上的识别性能。

        分析目标检测数据集的分布是了解我们的模型性能和其潜在偏差的重要步骤。我们可以获得有关数据集特性的几个关键洞见。

        在左上角的图表中,我们看到只有一个类别——“吸烟”,该类别的实例数完全填充了此区域,表明我们的数据集专注于单一的检测任务,即识别吸烟行为。这个单一的集中焦点允许模型在识别吸烟动作上获得专业化的训练,但也意味着模型可能不会识别与吸烟无关的对象。

        右上角的图表展示了边界框分布的热力图。我们可以清楚地看到,大多数边界框集中在图像中心区域,这可能表明吸烟行为往往出现在图像的中心。此外,分布的密度和框的大小变化提供了检测吸烟行为的多尺度能力的信息。模型在这些集中区域可能表现良好,但我们也应该注意到边缘或角落中检测的稀疏性,这可能是后续训练时需要重点关注的区域。

在这里插入图片描述
        左下角的图表显示了检测框的中心点在图像中的位置分布。深色区域表示检测框的中心点更频繁地出现在图像的中间部分。这进一步验证了吸烟行为更可能出现在图像的中心区域的观察。

        最后,右下角的图表揭示了边界框的高度和宽度分布。我们注意到大部分边界框呈现较小的高度和宽度,暗示在数据集中吸烟对象往往较小,这可能是因为吸烟行为通常只涉及到手部和面部区域。然而,边界框的尺寸分布相对均匀,表明数据集包含各种大小的吸烟行为,这有利于提升模型对不同尺寸目标的泛化能力。

        综合这些观察结果,我们可以得出结论:为了提高检测吸烟行为的准确性和鲁棒性,模型训练不仅需要在图像中心区域进行优化,还需要关注那些不常见的边缘和角落案例。同时,我们的模型也需能够处理各种大小的吸烟行为,尤其是那些在图像中只占据小面积的行为。通过这样的分析,我们可以指导后续的模型训练和数据增强策略,从而提升模型的整体性能。

4. 原理与代码介绍

4.1 YOLOv8算法原理

        YOLOv8是目前最新一代的实时对象检测算法,其在前几代YOLO算法的基础上进行了显著的改进和创新。YOLOv8继承了YOLOv3使用的Darknet53作为主干网络,这个网络结构已经证明在对象检测任务中效率和效果俱佳。YOLOv8则在此基础上进一步优化,它引入了从YOLOv5中借鉴的C3模块,并且借鉴了YOLOv7中的有效层级聚合(Efficient Layer Aggregation networks, ELAN)技术,以改善特征提取和增强网络的表征能力。

在这里插入图片描述

        在YOLOv8中,C3模块由Bottleneck构成,这些Bottleneck模块在提取特征的同时,通过引入残差连接来避免潜在的梯度消失问题,确保了即使在网络较深的情况下,信息也可以有效地传播。这种设计不仅使网络在提取特征时更为高效,而且也有助于网络学习到更复杂的特征表示,这对于提高模型的准确性和鲁棒性至关重要。

        YOLOv8还采用了路径聚合网络(Path Aggregation Network, PANet)来进一步增强特征金字塔的连接。这种结构通过增强不同尺度特征之间的连接,以提升模型在检测不同尺度对象时的性能。特别是对于小目标的检测,这种层级的特征聚合可以显著提高检测的准确度。

        综上所述,YOLOv8通过引入先进的模块化设计、增强的特征聚合以及创新的无锚检测机制,提供了更为精确和高效的实时对象检测能力。这些技术的结合不仅提升了模型在标准数据集上的表现,更重要的是,它们使模型能够更好地适应实际应用中的多变环境和挑战,为实时对象检测领域带来了新的突破。

4.2 模型构建

        本部分博客内容将详细介绍我们如何使用Python和一系列开源库来构建一个基于YOLOv8/v7/v6/v5模型的吸烟行为检测器。以下是构建过程中的关键代码段及其解释:

# -*- coding: utf-8 -*-
import cv2  # OpenCV库用于处理图像和视频
import torch
from QtFusion.models import Detector, HeatmapGenerator  # 导入抽象基类Detector和HeatmapGenerator
from datasets.label_name import Chinese_name  # 导入类别中文名称
from ultralytics import YOLO  # 导入YOLO类
from ultralytics.utils.torch_utils import select_device  # 用于选择处理设备

# 如果有可用的CUDA设备就使用GPU,否则使用CPU
device = "cuda:0" if torch.cuda.is_available() else "cpu"

# 初始化参数字典,包含了模型运行所需的基本参数
ini_params = {
    'device': device,
    'conf': 0.25,  # 置信度阈值
    'iou': 0.5,  # IOU阈值用于非极大抑制
    'classes': None,  # 不过滤任何类别
    'verbose': False
}

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

        在上述代码中,我们首先导入了必要的库,设置了检测器的基本参数,这些参数将影响模型如何处理图像以及如何选择和识别目标。

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())))

        在这部分代码中,我们定义了一个继承自Detector类的YOLOv8v5Detector类。这个类的目的是封装YOLO模型的加载、预处理、预测和后处理过程。特别地,load_model函数负责加载训练好的YOLO模型并进行初始化。

    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,  # 类别ID
                }
                results.append(result)
        return results

        在这段代码中,preprocess方法用于图像的预处理工作,predict方法将图像输入模型进行预测,并返回结果。postprocess方法则负责将预测的结果进行格式化,将模型输出的边界框坐标、置信度、类别ID等信息转换为我们所需的格式。

        最后,我们的set_param函数允许我们更新检测器

4.3 训练代码

        在本篇博客中,我们将探讨如何使用YOLOv8模型来训练一个多吸烟行为检测系统。这一过程不仅涉及到深度学习模型的加载和初始化,还包括数据集的准备以及训练参数的配置。以下表格详细介绍了YOLOv8模型训练中使用的一些重要超参数及其设置:

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

        在我们的深度学习项目中,训练一个精确的模型是至关重要的步骤。以下是我们使用YOLOv8的PyTorch实现来训练一个吸烟行为检测模型的详细代码和说明。

        首先,我们需要导入必要的库和模块,设置训练设备,并获取数据集的配置文件路径:

import os
import torch
import yaml
from ultralytics import YOLO  # 导入YOLO模型
from QtFusion.path import abs_path

# 检查并设置设备,优先使用GPU
device = "0" if torch.cuda.is_available() else "cpu"

# 当前脚本作为主程序运行时执行的代码
if __name__ == '__main__':
    workers = 1  # 设置数据加载的工作进程数
    batch = 8  # 设置批处理大小

    # 设置数据集的名称并获取配置文件路径
    data_name = "SmokingBehaviorDet"
    data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current')
    unix_style_path = data_path.replace(os.sep, '/')

        在这段代码中,我们首先设置训练时使用的设备类型,然后定义了数据集名称,并通过自定义的abs_path函数获取数据集配置文件的绝对路径,该函数考虑了不同操作系统路径表示方式的兼容性。

        接下来,我们读取并处理数据集的配置文件,确保其路径正确无误:

    # 获取目录路径
    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)

        在这段代码中,我们读取YAML配置文件,它包含了训练过程所需的各种数据路径和参数设置。我们通过修改配置文件中的path项来确保路径的准确性。

        最后,我们加载预训练的YOLOv8模型并开始训练过程:

    # 加载预训练的YOLOv8模型
    model = YOLO(abs_path('./weights/yolov8n.pt'), task='detect')
    
    # 开始训练模型
    results2 = model.train(
        data=data_path,  # 数据集配置文件路径
        device=device,  # 训练设备
        workers=workers,  # 数据加载工作进程数
        imgsz=640,  # 输入图像尺寸
        epochs=120,  # 训练周期数
        batch=batch,  # 批处理大小
        name='train_v8_' + data_name  # 训练任务名称
    )

        在这一部分,我们实例化YOLO模型,并指定了许多关键的训练参数,如图像大小、训练周期、批次大小等。我们还通过train方法启动了训练过程,该方法会自动进行多个epoch的训练,并保存模型的检查点。

        通过以上步骤,我们将设置一个强大的基础,以训练和优化吸烟行为检测的深度学习模型。这种训练流程是高效的,因为它利用了最新的YOLO版本,并结合了目前可用的最好的硬件资源。


5. 实验结果与分析

5.1 训练曲线

        在深度学习的实践中,分析模型训练过程中的损失函数和性能指标是至关重要的。通过这些图表,我们能够深入了解模型在训练过程中的行为,并据此调整训练策略。接下来,我们将详细分析YOLOv8在训练时的损失函数和评价指标图像,这些图表为我们提供了训练过程中的洞察。

在这里插入图片描述
        首先,训练损失和验证损失的图像显示了模型在训练过程中的表现。在“train/box_loss”、“train/cls_loss”和“train/obj_loss”这三个图表中,我们可以看到随着训练周期数的增加,即横轴的增加,损失值稳定下降。这表明模型在训练集上对于边界框的位置、类别和目标的检测逐渐变得更加精确。尤其值得注意的是,类别损失的下降趋势非常明显,这意味着模型在区分不同类别上表现出色。损失值的平滑曲线表明训练过程是稳定的,没有出现过拟合的迹象,因为验证集上的损失也显示出类似的下降趋势。

        在“val/box_loss”、“val/cls_loss”和“val/obj_loss”验证损失的图像中,我们同样看到随着训练周期的增加,损失值逐渐降低,并且呈现出平滑的曲线。这些趋势与训练损失图像一致,表明模型在验证集上也取得了良好的泛化效果。验证损失的曲线平滑且持续下降,这通常预示着模型具有良好的泛化能力,不太可能在未知数据上出现性能下降。

        再来看性能指标部分,即“metrics/precision”、“metrics/recall”、“metrics/mAP@0.5”和“metrics/mAP@0.5:0.95”这四个图表。这些指标反映了模型预测的精确度和召回率,以及平均精确度(mAP)。从图表中我们可以看到,随着训练的进行,这些性能指标逐渐提升,尤其是mAP的值。mAP@0.5的值最终接近或达到了1,这意味着当交并比阈值设置为0.5时,模型可以非常准确地检测出目标。而当评估标准更为严格时,即mAP@0.5:0.95时,模型的表现略有下降,但仍维持在较高水平。这表明模型即使在更高难度的检测任务上也有不错的性能。

5.2 混淆矩阵

        在深度学习模型的评估过程中,混淆矩阵是一个至关重要的工具,因为它提供了模型性能的直观图像。它揭示了模型在不同类别之间的区分能力,特别是在多类分类问题上。根据提供的混淆矩阵,我们可以对模型在多吸烟行为检测任务上的性能进行深入分析。

在这里插入图片描述

        混淆矩阵是评估分类模型性能的重要工具,尤其是在监督学习中,它展示了模型预测结果与真实情况之间的关系。从您提供的混淆矩阵中,我们可以进行一些直观的分析来评估我们的吸烟行为检测模型的性能。

        在矩阵中,横轴“True”代表实际情况,而纵轴“Predicted”代表模型预测的结果。对于“Smoking”这个类别来说,模型预测吸烟行为为正类(即存在吸烟行为)的概率为0.95,这意味着当实际上有吸烟行为发生时,模型以95%的概率能够正确识别出来。同时,“Background”这一类别的对应值为1.00,显示当实际情况是背景(即没有吸烟行为)时,模型总是能正确识别,不会将其误判为吸烟行为。这样的结果表明模型在区分吸烟行为和非吸烟场景上表现出色。

        混淆矩阵的左下角显示了模型将实际的吸烟行为错误分类为背景的概率,为0.05。这表明只有5%的吸烟行为被模型误判为背景,这进一步证明了模型对于吸烟行为的高敏感度。

        整体来看,这个混淆矩阵表明我们的吸烟行为检测模型具有很高的精确度和召回率。精确度高意味着模型在判定为吸烟行为的案例中,有很高的比例确实是吸烟行为。召回率高则意味着模型能够捕捉到大部分的吸烟行为案例,很少漏掉。

        尽管如此,我们也要注意这个混淆矩阵可能隐藏的问题。例如,如果数据集中吸烟行为的案例远远多于背景的案例,那么模型可能倾向于预测更多的吸烟行为来提高精确度和召回率。另外,我们也应当考虑模型在不同场景和光照条件下的表现是否一致,以及是否所有类型的吸烟行为都能以这样高的准确率被检测出来。

        总之,根据混淆矩阵的结果,我们的吸烟行为检测模型表现相当出色,但还需要进一步的测试来验证其在各种条件下的稳定性和可靠性。通过更广泛的测试和评估,我们能够确保模型在实际应用中能够达到预期的性能水平。

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

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

模型 图像大小 (像素) mAPval 50-95 CPU ONNX 速度 (毫秒) A100 TensorRT 速度 (毫秒) 参数数量 (百万) FLOPs (十亿)
YOLOv5nu 640 34.3 73.6 1.06 2.6 7.7
YOLOv8n 640 37.3 80.4 0.99 3.2 8.7
YOLOv6N 640 37.5 - - 4.7 11.4
YOLOv7-tiny 640 37.4 - - 6.01 13.1

(2)度量指标

  • F1-Score:F1-Score 作为衡量模型性能的重要指标,尤其在处理类别分布不均的数据集时显得尤为关键。它通过结合精确率与召回率,提供了一个单一的度量标准,能够全面评价模型的效能。精确率衡量的是模型在所有被标记为正例中真正属于正例的比例,而召回率则关注于模型能够识别出的真正正例占所有实际正例的比例。F1-Score通过两者的调和平均,确保了只有当精确率和召回率同时高时,模型的性能评估才会高,从而确保了模型对于正例的预测既准确又完整。
  • mAP(Mean Average Precision):在