摘要:本文深入研究了基于深度学习的吸烟行为检测系统,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、视频和实时摄像头进行吸烟行为检测,可上传不同训练模型(YOLOv8/v7/v6/v5)进行推理预测,界面可方便修改。本文附带了完整的网页设计、深度学习模型代码和训练数据集的下载链接。
文章目录
网页版-基于深度学习的吸烟行为检测系统(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的吸烟行为检测系统时,我们面临的核心挑战和解决方案如下:
-
检测准确性与实时性的平衡
吸烟行为检测系统的主要目标是实现对吸烟行为的高准确度识别与实时处理。鉴于吸烟行为可能在各种环境下发生,包括不同的光照条件、复杂的背景以及吸烟者的多样姿态,系统需要能够准确地识别这些行为的细微特征。我们通过引入最新的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的吸烟行为检测系统:
-
深度学习模型的选择和优化
- 模型架构:选择YOLOv8作为核心深度学习模型,考虑到其在速度和准确度之间的优异平衡。对于特定需求,我们也会考虑使用YOLOv7、YOLOv6、YOLOv5等其他版本,以便根据具体应用场景选择最合适的模型。
- 数据增强:为了提升模型在各种环境下的泛化能力,我们将采用多种数据增强技术,如随机裁剪、旋转、翻转、色彩调整等,以模拟不同环境下的吸烟行为场景。
- 迁移学习:利用大规模数据集上预训练的YOLO模型作为起点,通过迁移学习技术进行微调,加快训练速度并提升识别性能。
-
技术框架和开发工具
- PyTorch框架:选用PyTorch作为主要的深度学习框架,其提供了灵活的编程环境和强大的GPU加速能力,非常适合于深度学习模型的快速开发和迭代。
- Streamlit网页设计:采用Streamlit构建交互式Web应用,它支持快速开发轻量级的数据应用,非常适合展示吸烟行为检测的结果。
- CSS美化:使用CSS对Streamlit默认界面进行美化,提升用户体验,使界面更加直观和友好。
- PyCharm开发环境:使用PyCharm作为集成开发环境(IDE),其强大的代码编辑、调试和项目管理功能,有助于提高开发效率。
-
功能实现和系统设计
- 多输入源支持:系统将支持多种输入源,包括静态图像、视频文件和实时摄像头捕获,以适应不同的使用场景。
- 模型切换功能:实现一个用户友好的界面,允许用户根据需要选择和切换不同版本的YOLO模型(YOLOv8/v7/v6/v5),以评估和比较各模型的检测效果。
-
数据处理和存储策略
- 高效数据处理:利用PyTorch的DataLoader和预处理功能,实现高效的数据加载和预处理流程,确保系统的实时性能。
- 智能数据存储:设计高效的数据存储方案,对检测结果和历史数据进行有效的组织和索引,便于后续的查询和分析。
-
性能优化和系统测试
- 性能调优:通过模型压缩、精细化参数调整和硬件加速等手段,对系统进行深度优化,以提高运行效率和减少计算资源消耗。
- 全面系统测试:进行全面的系统测试,包括单元测试、集成测试和性能测试,确保系统的稳定性和可靠性。
通过上述方法的实施,我们旨在开发出一个既准确又高效的吸烟行为检测系统,能够满足不同用户在不同环境下的应用
2.4 博文贡献与组织结构
本文的主要贡献在于深入探讨了基于YOLOv8/v7/v6/v5的多吸烟行为检测系统的设计与实现。通过对相关文献的综述、详尽的数据集处理方法、精选的深度学习算法对比,以及用户友好的Web界面设计,本文提供了一个全面的视角来理解和应用现代目标检测技术于生物多样性保护和研究领域。以下是本文的核心贡献:
- 文献综述:对当前吸烟行为检测技术的文献进行了全面的回顾,特别是YOLO系列算法在吸烟行为检测中的应用,为读者提供了一个坚实的理论基础。
- 数据集处理:详细介绍了数据集的选择、预处理、增强技术以及其在训练深度学习模型中的重要性,提升了模型的泛化能力和准确性。
- 算法选择与对比:对YOLOv8、v7、v6、v5等版本进行了深入的比较分析,明确了各版本的优缺点和适用场景,为读者选择合适的算法提供了指导。
- 网页设计:采用Streamlit框架设计了一个美观且用户友好的Web界面,使得吸烟行为检测不仅限于技术人员,对普通用户也同样友好。
- 实验结果与分析:通过一系列的实验,对比了YOLOv7/v6/v5等算法的效果,提供了详尽的性能评估,为读者在实际应用中的算法选择提供了依据。
- 资源分享:分享了完整的数据集和代码资源包,包括模型的预测与训练代码,使读者能够轻松复现实验结果,并在此基础上进行进一步的研究和开发。
后续章节的组织结构如下: 绪论:介绍研究背景、目的和本文的主要贡献;算法原理:详细介绍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):在目标检测任务中,Mean Average Precision(mAP)是评估模型性能的重要标准。它不仅反映了模型对单个类别的识别精度,而且还考虑了所有类别的平均表现,因此提供了一个全局的性能度量。在计算mAP时,模型对于每个类别的预测被单独考虑,然后计算每个类别的平均精度(AP),最后这些AP值的平均数形成了mAP。
名称 | YOLOv5nu | YOLOv6n | YOLOv7-tiny | YOLOv8n |
---|---|---|---|---|
mAP | 0.963 | 0.961 | 0.955 | 0.964 |
F1-Score | 0.94 | 0.94 | 0.94 | 0.94 |
(3)实验结果分析:
在本次实验中,我们对YOLO系列的四个不同版本 —— YOLOv5nu、YOLOv6n、YOLOv7-tiny、YOLOv8n —— 在相同数据集上进行了性能比较。我们的目的是全面评估这些模型在多吸烟行为检测任务上的性能,并分析它们在不同指标上的表现。实验结果的分析不仅可以揭示每个模型的优缺点,也能为选择适合的模型提供依据。
根据实验结果,我们可以看到所有模型的F1-Score都相同,为0.94,这表明在吸烟行为检测任务上,所有模型都达到了较高和相似的准确率。然而,在mAP指标上,虽然四个版本的模型表现都非常接近,但是YOLOv8n以0.964的得分领先,紧随其后的是YOLOv5nu和YOLOv6n,其mAP分别为0.963和0.961。YOLOv7-tiny的mAP稍低,为0.955。
从这些结果来看,尽管各个版本的YOLO模型性能相差不大,但YOLOv8n在mAP上的轻微领先表明其在检测精度上可能具有微弱的优势。由于所有模型的F1-Score都相同,这可能意味着它们在识别正类和负类的能力上是均衡的。
总的来说,虽然各个版本的YOLO在性能上相差不大,但在选择模型时还是需要根据具体应用场景的需求,以及其他因素如模型大小、推理速度等,来综合考虑。我们的实验结果为后续的研究和应用提供了宝贵的参考。
6. 系统设计与实现
6.1 系统架构概览
在本篇博客中,我们将深入探讨基于YOLOv8/v7/v6/v5的多吸烟行为检测系统的系统架构设计部分。该系统架构旨在实现高效、准确地识别多种类吸烟行为,应用于生态研究、自然保护区监控等场景。接下来,我们将结合代码中的部分类和方法,详细介绍系统的设计与实现。我们的系统基于YOLO(You Only Look Once)模型,特别是其v8/v7/v6/v5版本,为了实现吸烟行为的快速和准确识别。系统通过集成YOLO检测器、图像处理技术、以及用户界面设计,提供了一套完整的解决方案。
YOLOv8v5Detector
YOLOv8v5Detector
是本系统的核心组件之一,负责加载预训练的YOLO模型,并执行图像上的对象检测任务。该类通过load_model
方法加载模型权重,并使用predict
方法对输入的图像进行预测,最后通过postprocess
方法处理预测结果,以便于后续的使用和展示。
Detection_UI
Detection_UI
类是系统的用户界面部分,负责处理用户输入(如文件上传、摄像头选择)、展示检测结果、以及用户交互(如设置检测参数)。该类通过setup_page
和setup_sidebar
方法初始化页面布局和侧边栏,允许用户选择模型类型、设置置信度和IOU阈值、选择摄像头或上传文件等。
LogTable & ResultLogger
LogTable
和ResultLogger
类负责记录和展示检测结果。LogTable
用于存储每次检测的详细信息(如检测到的对象、位置、置信度等),并通过add_log_entry
方法添加新的记录。ResultLogger
则用于合并和格式化检测结果,以便在用户界面中展示。
6.2 系统流程
在我们的基于YOLOv8/v7/v6/v5的多吸烟行为检测系统中,我们精心设计了一套高效且强大的系统流程来确保我们的目标检测系统能够准确、快速地识别出视频或图片中的吸烟行为。以下是我们系统的详细流程步骤,我们将通过专业化的程序流程图文字描述来揭示整个系统的运作机制。
-
初始化系统
首先,系统通过Detection_UI
类的初始化来配置所有必要的参数和环境。这包括加载类别标签、初始化颜色列表、设置页面和侧边栏的配置、加载模型等。这一步是为了准备好所有运行前的必要条件,确保系统在开始检测前已经处于最佳状态。 -
加载并配置模型
接下来,系统会根据用户在侧边栏选择的配置,通过YOLOv8v5Detector
类来加载对应的YOLO模型。用户可以选择使用默认的模型文件或上传自定义的模型文件。系统还允许用户设置置信度阈值和IOU阈值,这些都会影响检测的精度和性能。 -
选择输入源
系统支持多种输入源,包括直接从摄像头捕获视频、上传图片文件或视频文件。这一步骤由用户在侧边栏进行选择,并通过process_camera_or_file
方法来处理用户的选择。 -
进行目标检测
- 对于视频流(包括摄像头输入或上传的视频文件),系统会持续捕捉每一帧,并通过
frame_process
方法进行处理。这包括图像的预处理、使用YOLO模型进行目标检测、后处理以及显示检测结果。 - 对于上传的图片文件,系统会将文件读取为图像,同样应用
frame_process
方法进行一次性的目标检测,并展示结果。
- 结果展示与日志记录
无论是实时视频流还是单个图片文件,每次检测完成后,系统都会展示检测结果,包括绘制包围盒、显示检测类别和置信度。同时,LogTable
类被用于记录每一次检测的详细信息,如检测对象、位置、置信度和检测用时等。
- 结果过滤和导出
用户可以通过选择特定的目标来过滤检测结果,系统通过 toggle_comboBox
方法来处理这一功能。此外,用户还可以通过点击导出按钮,将所有检测结果以及相关日志导出为CSV文件,以便于后续的分析和使用。
通过以上步骤,我们的系统能够高效且准确地识别出图片或视频中的多种类吸烟行为,满足用户在吸烟行为检测方面的需求。这一流程不仅展示了系统的强大功能,也体现了我们在系统设计上的精心考虑和优化。
代码下载链接
如果您希望获取博客中提及的完整资源包,包含测试图片、视频、Python文件(*.py)、网页配置文件、训练数据集、代码及界面设计等,可访问博主在面包多平台的上传内容。相关的博客和视频资料提供了所有必要文件的下载链接,以便一键运行。完整资源的预览如下图所示:
资源包中涵盖了你需要的训练测试数据集、训练测试代码、UI界面代码等完整资源,完整项目文件的下载链接可在下面的视频简介中找到➷➷➷
演示及项目介绍视频:https://www.bilibili.com/video/BV1EJ4m157a2/
完整安装运行教程:
这个项目的运行需要用到Anaconda和Pycharm两个软件,下载到资源代码后,您可以按照以下链接提供的详细安装教程操作即可运行成功,如仍有运行问题可私信博主解决:
- Pycharm和Anaconda的安装教程:https://deepcode.blog.csdn.net/article/details/136639378;
软件安装好后需要为本项目新建Python环境、安装依赖库,并在Pycharm中设置环境,这几步采用下面的教程可选在线安装(pip install直接在线下载包)或离线依赖包(博主提供的离线包直接装)安装两种方式之一:
- Python环境配置教程:https://deepcode.blog.csdn.net/article/details/136639396(2,3方法可选一种);
- 离线依赖包的安装指南: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),以进一步提升模型的检测性能和运行效率。
-
多模态融合:考虑到吸烟行为可能与环境因素相关,我们打算采用多模态学习方法,结合图像以外的其他信息,如环境的音频、温湿度等数据,为检测提供更全面的背景信息。
-
跨域适应性:为了增强模型的通用性,我们计划研究跨场景的吸烟行为检测,通过领域自适应技术增强模型在不同环境和光照条件下的适应能力。
-
用户交互体验:我们致力于进一步优化Web应用的界面和交互设计,确保用户无论在何种设备上都能获得流畅且高效的操作体验。
-
实际应用拓展:本研究的最终目标是推动吸烟行为检测技术的社会应用,比如在公共场所进行自动监控以维护无烟环境,或者在健康领域辅助戒烟过程。
综上所述,随着相关技术的不断进步和应用领域的拓展,基于深度学习的吸烟行为检测技术有望在未来在更广泛的领域产生积极影响,特别是在智能监控和公共健康领域。
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. ↩︎
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. ↩︎
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. ↩︎
Aboah A, Wang B, Bagci U, et al. Real-time multi-class helmet violation detection using few-shot data sampling technique and yolov8[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2023: 5349-5357. ↩︎
Zhou D, Kang B, Jin X, et al. Deepvit: Towards deeper vision transformer[J]. arXiv preprint arXiv:2103.11886, 2021. ↩︎