摘要:本文深入研究了基于YOLOv8/v7/v6/v5等深度学习模型的吸烟行为检测系统,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、视频和实时摄像头进行吸烟行为检测,可上传不同训练模型(YOLOv8/v7/v6/v5)进行推理预测,界面可方便修改。本文附带了完整的网页设计、深度学习模型代码和训练数据集的下载链接。
目录完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷
演示与介绍视频 :https://www.bilibili.com/video/BV1Pj421R7PK/
YOLOv8/v7/v6/v5项目合集下载:https://mbd.pub/o/bread/mbd-ZZ2akplw
YOLOv8和v5项目完整资源下载:https://mbd.pub/o/bread/mbd-ZZ2Zm5du
YOLOv7项目完整资源下载:https://mbd.pub/o/bread/mbd-ZZ2Zm5tp
YOLOv6项目完整资源下载:https://mbd.pub/o/bread/mbd-ZZ2Zm55w
若您想获得博文中涉及的实现完整全部资源文件(包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里已打包上传至博主的面包多平台,见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:
1. 网页功能与效果
(1)开启摄像头实时检测:本系统允许用户通过网页直接开启摄像头,实现对实时视频流中吸烟行为的检测。系统将自动识别并分析画面中的吸烟行为,并将检测结果实时显示在用户界面上,为用户提供即时的反馈。
(2)选择图片检测:用户可以上传本地的图片文件到系统中进行识别。系统会分析上传的图片,识别出图片中,并在界面上展示带有标签和置信度的检测结果,让用户能够清晰地了解到每个状态。
(3)择视频文件检测:系统支持用户上传视频文件进行检测。上传的视频将被系统逐帧分析,以识别和标记视频中每一帧的吸烟行为。用户可以观看带有检测标记的视频,了解视频中人物的变化。
(4)择不同训练好的模型文件:系统集成了多个版本的YOLO模型(如YOLOv8/v7/v6/v5),用户可以根据自己的需求选择不同的模型进行识别。这一功能使得用户能够灵活地比较不同模型的表现,以选择最适合当前任务的模型。
本系统还集成了一系列高级功能,提高了用户体验和系统的实用性:检测画面和原始画面的显示方式,允许用户选择同时显示检测结果和原始图像,或者单独显示任一种图像,以便于比较和分析;特定目标的单独标记和显示结果,用户可以通过下拉框选择特定的类型进行检测,系统将只显示选定类型的检测结果,使分析更加专注和高效;检测结果的页面表格显示,所有检测到的及其相关信息(如置信度和位置)会在页面上以表格形式展现,便于用户一目了然地查看;动态调整检测算法的阈值,用户可以实时调整置信度阈值和IOU阈值,以获得最佳的检测效果;检测结果导出到CSV文件,为了方便数据分析和记录,用户可以将检测结果以CSV格式导出;最后,导出标记的图像和视频结果功能使用户能将加工后的图像或视频保存为avi格式的文件,方便保存和分享。这些功能的集成使得本系统不仅在吸烟行为检测方面表现出色,同时也提供了丰富的数据处理和展示选项,满足了广泛的应用需求。
2. 绪论
2.1 研究背景及意义
烟头乱扔问题一直是城市环境管理中的一大难题。不仅破坏了公共场所的卫生和美观,还可能引发火灾等安全事故,给社会带来了严重的负面影响。随着科技的进步,利用计算机视觉技术对烟头进行自动检测和识别,成为解决这一问题的有效途径。特别是近年来,深度学习在图像处理领域的突破性进展,为烟头检测提供了新的解决思路和技术支持。
在国内外研究现状方面,目标检测算法如YOLO、SSD、Faster R-CNN等已被广泛应用于各种场景的目标检测任务中,取得了令人瞩目的成绩。其中,YOLO系列算法以其高速的检测能力和不错的准确率,尤其适合实时目标检测应用。自YOLOv1推出以来,每一代YOLO算法都在性能上进行了显著的改进,最新的YOLOv8在多个标准数据集上都展示了优越的性能。尽管如此,专门针对烟头这一小尺寸、易于与环境融合的目标进行检测的研究相对较少,且面临不少挑战,如模型的泛化能力、复杂背景下的检测准确率、实时性能等。
本博客旨在探索基于YOLOv8及其他最新目标检测算法改进的烟头检测系统。我们将重点关注模型的优化、数据集的构建与扩充、检测性能的提升等方面,以解决在不同场景下准确、快速检测烟头的问题。此外,考虑到烟头检测系统的实际应用需求,我们还将探讨模型的轻量化和加速,以便于在边缘设备上部署。
博客的主要贡献在于:首先,系统地回顾了烟头检测的研究背景及其社会意义,梳理了当前目标检测领域的技术进展,特别是YOLO系列算法的发展历程及其在烟头检测中的应用潜力。其次,通过分析现有研究的不足,明确了本研究需要解决的关键问题,并提出了相应的解决方案,包括算法改进、数据集优化和性能提升等。最后,通过一系列实验验证了所提出解决方案的有效性,并对未来烟头检测技术的发展趋势进行了展望。通过这些贡献,本博客不仅为烟头检测技术的研究和应用提供了有价值的参考,也为其他小目标检测任务的研究提供了借鉴。
2.2 国内外研究现状
随着深度学习技术的广泛应用,在吸烟行为检测方面,国内外学者提出了多种基于深度学习的检测算法,显著提高了检测的准确性和效率。近年来,YOLO系列算法因其高效的检测速度和较好的准确率,成为了研究的热点。YOLO[1]系列作为实时目标检测的代表算法,经历了从YOLOv1到YOLOv8的发展历程。其中,YOLOv4和其后的版本在性能上取得了显著提升。YOLOv4通过引入更多的数据增强技术、更深的网络结构和新的特征融合策略,大幅提高了检测的准确度和速度。随后,YOLOv5[2]在易用性和速度上进一步优化,尽管它并非官方版本,但因其出色的性能和广泛的社区支持成为了业界的热点。YOLOv6[3]和YOLOv7[4]分别围绕模型的轻量化和进一步的性能提升进行设计,特别是在小目标检测上的表现。而最新的YOLOv8[5]则在此基础上进一步强化了模型的泛化能力和检测效率,使其在吸烟行为检测等复杂场景中表现更加出色。
目标检测技术,尤其是深度学习方法,在近年来取得了巨大的进步,这些进展极大地促进了吸烟行为检测等应用领域的发展。从YOLOv5[2:1]、YOLOv6[3:1]、YOLOv7[4:1]、YOLOv8[5:1]到Transformer-based[^6]模型如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的吸烟行为检测系统时,我们面临的核心挑战和解决方案如下:
-
检测准确性与实时性的平衡
吸烟行为检测系统的主要目标是实现对吸烟行为的高准确度识别与实时处理。鉴于吸烟行为可能在各种环境下发生,包括不同的光照条件、复杂的背景以及吸烟者的多样姿态,系统需要能够准确地识别这些行为的细微特征。我们通过引入最新的YOLO版本,如YOLOv8,它通过优化算法结构和计算流程,实现了更高的检测速度和准确率,以满足实时检测的需求。 -
模型的环境适应性和泛化能力
环境的多样性对吸烟行为检测系统提出了巨大挑战。系统需要有良好的环境适应性和泛化能力,以保证在各种环境条件下都能维持高识别准确率。为了解决这一问题,我们采用了数据增强、迁移学习等技术,通过在多样化的数据集上训练模型,提高了模型的鲁棒性和泛化能力。 -
交互式Web应用界面的设计与实现
为了使用户能够方便地使用吸烟行为检测系统,我们开发了一个基于Streamlit的交互式Web应用。这个Web应用不仅支持图像和视频的上传检测,还能接入实时摄像头进行实时监测。用户界面通过CSS进行美化,确保了直观性和功能性。用户可以轻松切换不同的模型文件,测试不同版本的YOLO模型(YOLOv8/v7/v6/v5)对检测效果的影响。 -
深度学习模型的集成与性能优化
为了集成并优化YOLOv8/v7/v6/v5等多个版本的模型,我们采用了PyTorch作为主要的技术框架。通过细致地调整模型参数、优化训练流程,并利用高效的计算资源,我们成功提升了模型的性能。此外,我们还针对不同的使用场景和需求,对模型进行了定制化的优化,以达到最佳的检测效果。 -
系统的可扩展性与维护性
考虑到未来可能的技术进步和需求变化,我们在系统设计时就充分考虑了可扩展性和维护性。系统架构设计允许轻松集成新的模型或功能,同时保证了代码的可读性和可维护性。我们使用PyCharm作为开发IDE,利用其强大的代码管理和调试功能,确保了开发过程的高效和系统的稳定运行。
通过以上解决方案的实施,我们的吸烟行为检测系统不仅在技术层面上实现了创新,也为用户提供了便捷的操作体验和强大的功能,有望在公共卫生领域发挥重要作用。
2.3.2 解决方案
-
深度学习模型的选择和优化
模型架构:选择YOLOv8/v7/v6/v5作为核心的深度学习模型组合,针对不同的害虫种类和检测场景进行优化。这些模型在速度和准确度之间提供了出色的平衡,并通过版本迭代不断优化,使其非常适合于复杂的吸烟行为检测任务。
数据增强:利用丰富的数据增强技术,如随机裁剪、缩放、旋转、色彩调整等,以及GANs生成的合成图像,来模拟多样化的环境条件下的害虫图像,从而提升模型的泛化能力和对复杂场景的适应性。
迁移学习:采用在大规模图像数据集上预训练的模型作为起点,通过迁移学习技术进行微调,专注于吸烟行为的特定检测任务。这样可以加速模型训练过程,并显著提高识别性能。 -
技术框架和开发工具
PyTorch框架:使用PyTorch作为深度学习框架,它为模型的开发、训练和推理提供了灵活和强大的支持。PyTorch的动态计算图和丰富的API能够加速实验过程,便于快速迭代和优化。
Streamlit网页设计:基于Streamlit构建交互式Web应用界面,使用户可以轻松上传图像、视频进行害虫检测,或通过摄像头实现实时监控。Streamlit的简洁API和数据可视化功能,为开发美观、功能丰富的用户界面提供了强大支持。
CSS美化:利用CSS对Streamlit应用进行风格定制和美化,提高用户界面的美观度和用户体验。通过CSS,可以调整布局、颜色、字体等元素,使界面更加直观和友好。 -
功能实现和系统设计
多输入源支持:设计系统以支持多种输入源,包括图像文件、视频流和实时摄像头捕获,以适应不同的农业监测和害虫检测场景。
模型切换功能:实现用户可自由切换不同预训练模型的功能,增加系统的灵活性和适用范围。这使得用户可以根据实际需求选择最合适的模型进行害虫检测。 -
数据处理和存储策略
高效数据处理:利用PyTorch的高效数据加载器和预处理机制,结合多线程和GPU加速技术,确保数据处理的高速性能,满足实时检测的需求。
智能数据存储:设计高效且可扩展的数据存储方案,对检测结果和历史数据进行有效组织,便于用户进行查询、分析和回溯。 -
性能优化和系统测试
性能调优:通过模型和系统性能分析,识别性能瓶颈并进行针对性优化,如模型精简、硬件加速等,以保证系统的高效运行。
全面测试:进行全面的系统测试,包括功能测试、性能测试和用户体验测试,确保系统的稳定性、准确性和可靠性。
通过实施上述策略,我们的目标是开发一个准确、高效且用户友好的吸烟行为检测系统,能够在多种使用场景下满足用户的需求,同时提供强大的数据处理能力和良好的用户体验。
2.4 博文贡献与组织结构
本文综合探讨了基于YOLOv8/v7/v6/v5等深度学习模型的吸烟行为检测系统,不仅提供了该领域的详细文献综述,还深入分析了数据集处理方法、算法选择理由、以及如何使用Streamlit开发美观且用户友好的Web界面。此外,文章还比较了YOLOv7、v6、v5等算法在害虫检测任务上的性能,并提供了完整的数据集和代码资源包,以便于读者理解、复现和进一步研究。以下是本文的主要贡献:
-
文献综述:提供了关于吸烟行为检测领域的最新研究进展,包括但不限于YOLO系列算法的应用、其他相关深度学习算法的探索、数据集的开发和处理技术等。
-
数据集处理:详细介绍了数据集的收集、预处理和增强方法,旨在提升模型训练的效率和检测准确率。
-
算法选择和优化:深入分析了选择YOLOv8、v7、v6、v5等算法的理由,包括它们在速度、准确性和适用性方面的优势,并讨论了对这些模型的定制化改进,以适应吸烟行为检测的特殊需求。
-
Streamlit网页设计:基于Streamlit框架,设计并实现了一个美观、直观且功能丰富的Web应用界面,支持图像、视频和实时摄像头输入,用户可以轻松切换不同的模型进行害虫检测。
-
算法性能对比:通过对YOLOv7、v6、v5等不同版本的算法在相同数据集上的检测效果进行对比,提供了关于算法选择的有价值见解。
-
资源分享:提供了完整的数据集和代码资源包,包括模型预训练文件、训练和预测的代码,以促进知识共享和技术传播。
后续章节的组织结构如下: 绪论:介绍研究背景、目的和本文的主要贡献;算法原理:详细介绍YOLOv8/v7/v6/v5等算法的工作原理及其在吸烟行为检测中的应用;数据集处理:讨论使用的数据集及其预处理、增强方法。代码介绍:提供模型训练和预测的详细代码说明,包括环境搭建、参数配置和执行步骤。实验结果与分析:展示不同模型在吸烟行为检测任务上的实验结果,并进行比较分析。系统设计与实现:介绍基于Streamlit的吸烟行为检测系统的设计与实现细节。结论与未来工作:总结本文的研究成果,并讨论未来的研究方向和潜在的改进空间。
3. 数据集处理
在构建用于烟头检测的数据集时,我们仔细考虑了多个方面以确保其质量和多样性,从而为训练高性能模型提供了良好的基础。我们的数据集由总共4791张图像组成,其中4408张用于训练模型,358张用于验证模型性能,以及25张用于最终测试。这样的分布保证了模型能在广泛的数据上学习,并在独立的测试集上公正地评估其性能。博主使用的类别如下:
Chinese_name = {'Smoking': "吸烟"}
Label_list = list(Chinese_name.values())
在预处理阶段,所有图像首先应用了自动方向校正,以确保图像的方向统一,从而减少模型训练过程中的复杂性。随后,所有图像被拉伸至640x640像素,这是一种常见的做法,可以使模型输入的尺寸标准化,同时也满足了YOLO等目标检测算法的输入需求。在类别映射方面,原始的6个类别经过重新映射,最终确定为4个类别,并且舍弃了2个类别。这种简化可以帮助模型更专注于烟头的检测,同时减少由于类别不平衡带来的训练难度。至于数据增强,我们选择不应用任何增强处理。这一决定是基于当前数据集的多样性和实际应用场景的考虑,目的是让模型能更好地学习和适应真实世界的变化。此数据集的标签系统简洁明了,只包含一个类别“吸烟”(Smoking),其中文名称为“吸烟”,所有的标签都已经转换为这个类别。这简化了模型的输出层,并使得模型专注于检测烟头这一单一目标。
通过以上的数据集构建策略,我们确保了模型能在真实世界条件下达到高准确度和良好的泛化能力。在接下来的博客部分中,我们将进一步探讨如何利用这些数据集来训练和评估基于YOLOv8的烟头检测模型。
为了增强模型的泛化能力和适应性,我们对数据集中的图像进行了一系列的预处理和增强操作。预处理包括图像大小的调整和像素值的归一化,而增强处理则包含了一系列旨在模拟不同光照和环境条件的技术,如随机裁剪、旋转、缩放和色彩调整。这些步骤不仅提高了模型对变化环境的适应性,也有助于减少过拟合,确保在实际应用中的稳健性。
分析这幅图表,我们可以得出关于目标检测数据集中烟头标注分布的有价值信息。首先,左上方的红色单一块显示出所有实例都属于“烟头”这一类别,这强调了数据集的单一目标特性。
在右上方的图中,我们看到了目标(烟头)的边界框相对于整个图像的分布密度图。边界框中心点的密度较高,显示了图像中心有大量烟头的集中,这表明烟头在图像中往往位于中央位置。
左下方的图展示了烟头在图像中的位置分布,横坐标x和纵坐标y表示烟头中心点的相对位置。从图中可以观察到,烟头中心点分布比较均匀,没有明显的集中趋势,这意味着烟头在图像中的位置具有很好的多样性。
最后,右下方的图揭示了烟头边界框的宽度和高度的分布。可以看到,大多数烟头的宽度和高度都集中在较小的范围内,但也有一些较大的烟头存在。这显示了烟头尺寸在数据集中的变化范围,对于训练一个能够识别不同尺寸烟头的模型是有帮助的。
从这些分析中,我们可以得出以下结论:
-
数据集中烟头的类别单一,这使得我们能够集中资源和注意力在提高烟头检测的精确性上。
-
烟头的分布表明,算法需要能够识别位于图像任何位置的烟头,这就要求模型有很好的平移不变性。
-
烟头尺寸的多样性表明,模型需要能够适应不同大小的目标,这对于实际应用是必要的,因为烟头在现实世界中的大小是多变的。
通过对这些分布的理解,我们可以优化目标检测模型的训练过程,例如,可以在训练时应用一些技术,如平移、缩放和翻转,来增加模型对烟头位置和尺寸的鲁棒性。同时,这些分布也为我们如何设计和改进检测算法提供了重要的线索。在博客的这一部分,我们可以深入探讨这些分析对模型设计和训练策略的具体影响。
4. 原理与代码介绍
4.1 YOLOv8算法原理
Ultralytics公司于2023年初发布YOLOv8模型,相较于2020年发布的YOLOv5模型,YOLOv8模型将C3模块(CSP Bottleneck with 3 convolutions)改进成C2f模块(CSP Bottleneck with 2 convolutions),C3模块和C2f模块结构如下图(a)所示。图中CBS(Convolutions Bn SiLU)模块由基础卷积(Conv)、批量归一化(BN)和激活函数(SiLU)组成。C2f模块采用了多分支流设计,为模型提供了更丰富的梯度信息,强化了模型的特征提取能力,提高网络的学习效率。
YOLOv8模型仍然采用anchor free方法,降低检测过程中正样本框数量,并提升处理速度。此外,模型结合了GFL(generalized focal loss)损失计算策略,将Detect模块由YOLOv5中的耦合头改进成解耦头,如上图(b)所示。解耦头将分类任务和回归任务分开进行,避免了两个任务之间的干扰,理论上能够提高模型的训练效率。传统的YOLO系列算法的耦合头输出三类信息,而YOLOv8模型中的解耦头仅输出分类和回归信息。分类信息的输出通道数等于类别数,输出的内容综合了分类信息和置信度信息。回归信息的输出通道数等于4 reg_max(Regression maximum),输出内容为回归框在最大回归范围上的概率分布。
YOLOv8采用了动态标签匹配策略,增加了正样本框选择的灵活度。在损失计算方面,YOLOv8除了计算分类和回归损失外,还引入了DFL(distribution focal loss)损失。DFL损失利用交叉熵的思想,通过将预测框回归至标签框的上下整数范围内,优化模型训练。
4.2 模型构建
接下来详细介绍构建用于吸烟行为检测的深度学习模型的代码结构和功能。这一过程包括模型的初始化、加载、预处理、预测以及结果的后处理等关键步骤。首先,代码通过导入必要的库和模块开始。cv2
是OpenCV库,广泛应用于图像处理和计算机视觉任务。torch
是PyTorch深度学习框架,用于构建和训练模型。Detector
是一个抽象基类,定义了检测器应有的基本功能和结构。YOLO
类专门用于加载和运行YOLO模型,而select_device
函数用于根据是否有可用的CUDA设备来选择运行模型的设备(GPU或CPU)。
import cv2
import torch
from QtFusion.models import Detector
from datasets.EmotionData.label_name import Chinese_name
from ultralytics import YOLO
from ultralytics.utils.torch_utils import select_device
接着,设置了模型运行的初始参数ini_params
,这包括设备类型、置信度阈值、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模型,并进行必要的设备选择和模型预热。preprocess
方法对输入图像进行预处理,以适应模型的输入要求。predict
方法执行识别的预测过程,而postprocess
方法则处理模型的输出,将其转换为易于理解和使用的格式,例如将检测到的标注在图像上。
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)
最后,set_param
方法允许动态更新检测参数,如置信度阈值和IOU阈值,这为用户提供了更大的灵活性和控制能力,以优化检测结果。
这部分代码构建了一个完整的吸烟行为检测流程,从加载预训练的YOLO模型到执行检测,并处理检测结果,提供了一套完备的解决方案。通过细致的功能设计和参数设置,这个系统能够高效且准确地识别图像或视频中的吸烟行为,满足不同场景下的应用需求。
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 | 模型接受的输入图像的尺寸,影响模型的识别能力和计算负担。 |
环境设置与模型加载:首先,导入必要的库和模块:
import os
import torch
import yaml
from ultralytics import YOLO # 用于加载YOLO模型
from QtFusion.path import abs_path # 用于获取文件的绝对路径
这里,torch
是PyTorch深度学习框架,用于模型的训练与推理。yaml
用于处理数据集的配置文件。YOLO
类用于加载和训练YOLO模型。
接下来,根据系统是否支持CUDA,自动选择使用GPU或CPU作为训练设备:
device = "0" if torch.cuda.is_available() else "cpu"
数据集准备:定义训练过程中使用的基本参数:
workers = 1 # 工作进程数
batch = 8 # 每批处理的图像数量
指定数据集名称,并构建配置文件的路径。这里使用了abs_path
函数,确保无论当前工作目录在何处,都能正确找到配置文件的路径:
data_name = "InsectPest"
data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current') # 数据集的yaml的绝对路径
unix_style_path = data_path.replace(os.sep, '/')
为确保数据集路径的正确性,在读取配置文件后,将数据集的路径设置为配置文件所在目录的路径:
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模型。这里指定了模型权重文件的路径,并将任务类型设置为detect
,表示我们将使用模型进行目标检测:
model = YOLO(abs_path('./weights/yolov8n.pt'), task='detect')
最后,开始训练模型。在train
方法中,我们详细指定了训练的参数,包括数据集配置文件的路径、训练使用的设备、工作进程数、输入图像的大小、训练周期以及每批次的大小:
results2 = model.train(
data=data_path,
device=device,
workers=workers,
imgsz=640,
epochs=120,
batch=batch,
name='train_v8_' + data_name
)
通过上述过程,我们成功地配置并启动了吸烟行为检测模型的训练任务。YOLOv8作为一个强大的目标检测框架,为我们的训练任务提供了良好的支持,使得训练过程既高效又方便。在训练完成后,我们将得到一个针对吸烟行为检测任务优化过的模型,它将能够准确识别和分析图像中的吸烟行为,为后续的应用提供强大的技术支撑。
5. 实验结果与分析
5.1 训练曲线
采用以上代码进行训练,得到的训练过程曲线如下,展示了使用YOLOv8模型在吸烟行为检测任务上的训练过程中各项指标的变化情况。这些指标包括了训练和验证阶段的各种损失函数,以及精确度、召回率和平均精度(mAP)的指标。
首先,训练集和验证集的边界框损失(box_loss)呈现了持续下降的趋势,说明模型在定位烟头的能力上逐渐增强。虽然验证集上的box_loss有些波动,但整体稳定在较低水平,这表明模型具有不错的泛化能力。
类别损失(cls_loss)同样显示了减小的趋势,这表示模型在区分烟头与其他类别上越来越精确。训练集上cls_loss的下降更为平滑,验证集上虽然有波动,但总体上仍然维持在较低的水平。
方向损失(df1_loss)指的是模型预测边界框方向的准确性,从图中我们可以看到,该损失值在训练和验证过程中都稳步下降,并在后期趋于平稳,这表明模型在学习烟头的方向属性方面取得了很好的效果。
精确度(precision)和召回率(recall)是衡量模型性能的两个重要指标。精确度反映了模型对烟头的检测准确性,而召回率反映了模型捕捉烟头的能力。从图中可以看出,训练过程中两者都逐渐提升,而且后期曲线趋于平稳。这说明模型在识别和定位烟头方面取得了较好的平衡。
通过细致的训练过程分析,我们不仅可以了解模型性能的当前状态,还可以基于这些信息调整训练策略,以期在实际应用中取得更好的检测效果。这些训练曲线为我们提供了宝贵的直观视图,使我们能够对模型的训练过程有一个全面的把握。在博客中,我们将这些分析细节融入到对YOLOv8模型训练效果的整体评估中,为读者提供对模型性能深入理解的基础。
5.2 混淆矩阵
混淆矩阵是评估分类模型性能的重要工具,尤其是在害虫检测这样的多类别问题中,它能帮助我们深入理解模型在各个类别上的预测准确性。从您提供的混淆矩阵中,我们可以观察到模型在多数类别上的性能表现。
在模型评估过程中,混淆矩阵是衡量分类模型性能的重要工具,尤其是在目标检测任务中,它能够清晰地显示模型在预测不同类别上的准确性。从提供的混淆矩阵可以看出,我们的模型在烟头检测任务上的表现。
首先,我们注意到混淆矩阵的主对角线,即“cigarette”预测为“cigarette”和“background”预测为“background”的数值。对角线上的数值越接近1,表明模型的预测越准确。在本例中,“cigarette”预测为“cigarette”的比率为0.88,而“background”预测为“background”的比率达到了完美的1.00。这意味着模型能够非常准确地区分背景和烟头,对背景的识别几乎没有误差。
然而,模型在将“cigarette”正确分类时还存在一定的改进空间,因为有12%的烟头被误判为背景(如图中左下角的0.12所示)。这可能是由于烟头与背景的融合度较高或者烟头尺寸过小,导致模型难以识别。
此外,混淆矩阵中没有显示“background”被错误分类为“cigarette”的情况,这是一个积极的信号,表明模型在区分非烟头目标时表现出色,没有将其他对象误识别为烟头。
综上所述,模型在背景的检测上表现完美,在烟头的检测上也显示出了较高的准确性,但还有进一步优化的空间。针对烟头被误判为背景的情况,我们可能需要考虑进一步调整模型,或者对烟头的特征进行更细致的学习。可能的策略包括增强烟头的图像特征学习,比如通过改进网络结构来增加对小目标的敏感性,或者使用数据增强技术来扩展烟头样本的多样性。此外,也可以探索更高级的损失函数,专门针对较难检测的烟头样本进行优化。通过这些方法,我们期望在未来能够将烟头的识别率提高至与背景同等的准确度。
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是精确率(Precision)和召回率(Recall)的调和平均值。精确率是指模型正确识别的正例与所有识别为正例的案例之比,而召回率是指模型正确识别的正例与所有实际正例之比。F1-Score对于不平衡的数据集或者需要同时考虑精确率和召回率的任务特别重要。
- mAP(Mean Average Precision):mAP是衡量模型在多个类别上平均检测准确度的指标。它计算了模型在所有类别上的平均精度,是目标检测领域中常用的性能度量。
名称 | YOLOv5nu | YOLOv6n | YOLOv7-tiny | YOLOv8n |
---|---|---|---|---|
mAP | 0.870 | 0.902 | 0.825 | 0.895 |
F1-Score | 0.84 | 0.89 | 0.80 | 0.87 |
(3)实验结果分析:
在我们的实验设计中,我们旨在评估和比较YOLO系列中的不同版本——YOLOv5nu、YOLOv6n、YOLOv7-tiny和YOLOv8n——在相同数据集上的性能。实验的目的是为了确定哪一个算法版本在烟头检测任务上表现最佳。实验设置是统一的,以保证公平性,其中包括相同的训练和评估环境、统一的预处理步骤以及相同的训练周期。
度量指标方面,我们选用了F1-Score和mAP(mean Average Precision)两个指标。F1-Score是精确率和召回率的调和平均,是衡量模型精确性和完整性的重要指标。而mAP则考虑了不同置信度阈值下模型的平均精度,是目标检测领域常用的性能评价指标。这两个指标共同为我们提供了一个全面的视角来评估各个模型版本的性能。
实验结果显示,YOLOv6n在这两个指标上均表现最佳,其mAP达到了0.902,F1-Score为0.89。YOLOv8n的表现紧随其后,mAP和F1-Score分别为0.895和0.87。YOLOv5nu的表现虽然略低,但也十分可观,其mAP为0.870,F1-Score为0.84。YOLOv7-tiny在四者中的表现最差,mAP为0.825,F1-Score为0.80。这些结果意味着随着YOLO版本的更新,模型的性能在多数情况下得到了提升,尽管某些轻量级版本(如YOLOv7-tiny)可能在精度上有所妥协,以便在速度或其他资源限制的场景中使用。
通过以上分析,我们可以得出结论,随着算法的不断迭代和优化,YOLO系列在目标检测任务上的效果越来越好,能够更有效地处理复杂的实际应用场景。这对于未来选择合适的目标检测算法,以及进一步改进和定制算法以适应特定应用需求提供了有价值的参考。
6. 系统设计与实现
6.1 系统架构设计
本系统旨在提供一个实时的吸烟行为检测平台,它能够通过摄像头捕获或上传的文件进行检测,并实时显示检测结果。系统架构设计围绕三个主要部分展开:用户界面(UI)、检测引擎、结果展示与记录。这三个部分协同工作,提供一个流畅且互动性强的用户体验。
在博客的“系统架构设计”部分,我们详细阐述了基于YOLOv8/v7/v6/v5的烟头检测系统的构成,以及它是如何提供高效、准确的烟头检测服务的。本系统采用模块化设计,易于理解、维护和扩展。下面是一些关键组件和它们的作用:
- 核心检测引擎:
YOLOv8v5Detector
类是我们系统的检测引擎,负责加载预训练的深度学习模型,执行图像预处理、预测以及后处理。这里是其加载模型的示例代码:
self.model = YOLOv8v5Detector()
self.model.load_model(model_path=abs_path("weights/emotion-yolov8n.pt", path_type="current"))
- 用户界面管理:
Detection_UI
类管理用户界面,并处理用户输入。它设置了页面布局、侧边栏选项,并调用不同的方法来执行用户的命令。初始化页面和侧边栏配置如下:
def setup_page(self):
st.set_page_config(page_title=self.title, page_icon="
标签:训练,检测,模型,烟头,YOLOv8,吸烟,v6,v7
From: https://www.cnblogs.com/deeppython/p/18083105