首页 > 其他分享 >基于深度学习的夜视行人检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

基于深度学习的夜视行人检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

时间:2024-04-05 16:59:50浏览次数:29  
标签:训练 检测 模型 YOLOv8 夜视 v5 v7 行人

摘要:在本博文中,我们深入探讨了基于YOLOv8/v7/v6/v5的夜视行人检测系统,这一系统集成了多版本的YOLO算法,核心采用YOLOv8,并整合了YOLOv7YOLOv6YOLOv5算法,用于进行细致的性能指标对比分析。我们详尽地回顾了国内外在该领域的研究现状,深入讨论了数据集处理方法、算法原理、模型构建及训练过程,同时展示了如何通过Streamlit构建交互式Web应用界面。该Web应用界面支持上传图像、视频以及实时摄像头数据进行夜视行人检测,使用户能够上传不同版本的训练模型(YOLOv8/v7/v6/v5)进行推理预测,且界面设计灵活易于修改。为了方便读者深入理解和实践,本博文还附带了完整的网页设计方案、深度学习模型的代码以及训练数据集的下载链接,旨在提供一个全面而详细的学习和应用平台。

@

目录

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


完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷
演示与介绍视频https://www.bilibili.com/video/BV1qr42147YC/
YOLOv8/v7/v6/v5项目合集下载https://mbd.pub/o/bread/mbd-ZZ2YmJtp
YOLOv8和v5项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Ykpds
YOLOv7项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Yl5lq
YOLOv6项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Yl55p

        若您想获得博文中涉及的实现完整全部资源文件(包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里已打包上传至博主的面包多平台,见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:


1. 网页功能与效果

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

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

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

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

        在我们的系统中,开启摄像头实时检测功能允许用户直接通过网页界面访问摄像头,实时显示和识别画面中的夜视行人,提供即时反馈。而选择图片检测选择视频文件检测功能则让用户能够上传本地的图片或视频文件,系统将自动分析并展示识别结果,无论是静态图像还是动态视频均能精确识别。

        为了满足不同场景下的需求,系统还设计了选择不同训练好的模型文件功能,用户可以根据自己的需要选择不同版本的YOLO模型进行识别,从而在准确度和处理速度之间找到最佳平衡。在效果展示方面,系统支持检测画面和原始画面的同时或单独显示,增强了用户体验,使用户能够直观地比较检测结果与原始画面之间的差异。通过可点击下拉框单独标记特定目标并显示结果的设计,用户可以专注于感兴趣的夜视行人类型,提高了识别的针对性和效率。同时,所有检测结果都会保存在页面表格显示,并且用户还可以动态调整检测算法的置信度阈值和IOU阈值,这些灵活的配置选项大大提升了系统的实用性和准确性。

        最后,为了便于用户将检测结果用于进一步分析或存档,系统提供了功能强大的结果导出选项。用户可以将检测结果的表格输出到csv文件,或将标记后的检测结果导出为avi图像文件,这些导出功能的加入极大地增强了系统的应用价值。综上所述,基于YOLOv8/v7/v6/v5的夜视行人检测系统通过其全面的功能和卓越的用户体验,不仅能够满足专业领域内的高标准需求,也为广大用户提供了一种便捷、高效的夜视行人检测工具。


2. 绪论

2.1 研究背景及意义

        夜视行人检测技术在安全监控、自动驾驶系统、夜间救援操作等领域扮演着至关重要的角色。随着人工智能和计算机视觉技术的迅速发展,基于深度学习的目标检测算法,特别是YOLO(You Only Look Once)系列算法,已成为解决夜视行人检测问题的有效手段。夜间行人检测面临的挑战主要源于低光照环境下目标的识别难度大、行人与背景的对比度低以及复杂环境中的各种干扰。这些因素都大大增加了检测的难度,对算法性能提出了更高的要求。

        近年来,研究社区针对夜视行人检测进行了广泛的研究。YOLO系列算法的不断迭代和改进为夜视场景下的行人检测提供了新的解决方案[1]。例如,YOLOv4的引入大幅提高了检测的准确性和速度,而YOLOv5及其后续版本则进一步优化了模型结构[2][3],提高了模型的泛化能力和在低光照条件下的表现。除了YOLO系列,其他如Faster R-CNN、SSD等算法也在不断地优化中,旨在提高夜视环境下的检测性能[4]

        同时,其他研究团队专注于通过融合多种感知信息来提升夜视行人检测的性能。例如,一些研究结合了红外成像技术与传统的可见光成像技术,通过深度学习模型进行特征融合,显著提高了在极低照度条件下的行人检测能力[5]。此类方法通常依赖于先进的融合网络架构,如注意力机制和多模态特征融合网络,以实现不同类型图像数据的有效融合。

        在这一背景下,本博客的目的是探讨基于YOLOv8/v7/v6/v5的夜视行人检测系统的研究背景及其意义。通过综合运用最新的深度学习算法、优化的数据集处理方法以及先进的技术手段,本研究旨在解决夜间行人检测中遇到的一系列挑战,提高检测的准确性、效率和鲁棒性。我们的工作不仅关注算法本身的改进,也着眼于如何将这些技术应用到实际场景中,为相关领域的发展做出贡献。

2.2 国内外研究现状

        在夜视行人检测的领域内,近年来的研究进展主要集中在提高检测算法的准确度、速度以及对低照度环境的适应性上。随着深度学习技术的快速发展,一系列基于深度学习的算法被提出,并不断针对夜视场景进行优化。

        首先,YOLO系列作为实时目标检测的先驱,其最新版本YOLOv81在夜视行人检测中表现出色。YOLOv8继承了YOLOv4和v5的优点,如使用跨阶段部分网络(CSPNet)来降低计算复杂度,同时引入了更高效的特征融合技术以及针对小目标的改进算法,这对于在夜视条件下检测行人尤为重要。

        同时,其他研究团队专注于通过融合多种感知信息来提升夜视行人检测的性能。例如,一些研究结合了红外成像技术与传统的可见光成像技术,通过深度学习模型进行特征融合,显著提高了在极低照度条件下的行人检测能力。此类方法通常依赖于先进的融合网络架构,如注意力机制和多模态特征融合网络,以实现不同类型图像数据的有效融合。

        另外,随着对抗性攻击和防御技术在深度学习领域的研究兴起,一些工作开始探索对抗性训练在提高夜视行人检测鲁棒性方面的应用。这些研究表明,通过在训练过程中引入对抗性扰动,可以使得深度学习模型更加鲁棒,从而提高在复杂夜视场景下的检测性能。

        数据集的构建和扩展也是当前研究的热点之一。由于高质量的夜视行人检测数据集相对稀缺,一些工作致力于通过合成数据增强、跨域适应等技术,扩大训练数据的规模和多样性,从而提升模型的泛化能力和在实际应用中的表现。

        综合以上算法的创新点,我们可以看到目标检测技术在网络架构、损失函数设计、训练策略以及应用方法上都有了显著的进步。对于夜视行人检测这一具体任务,这些算法的创新之处为解决实际问题提供了多样化的思路和方法。无论是YOLO系列在实时性和精确度的平衡上,还是Transformer系列在处理全局信息上的优势,亦或是RetinaNet在解决类别不平衡问题上的创新,都极大地丰富了夜视行人检测技术的研究和应用前景。

2.3 要解决的问题及其方案

2.3.1 要解决的问题

        在开发基于YOLOv8/v7/v6/v5的夜视行人检测系统时,我们面临了一系列具体的挑战和问题,同时也设计了相应的解决方案来应对这些问题。以下是系统开发过程中的主要关注点及其解决策略:

  1. 夜视行人检测的准确性和速度

        夜间行人检测的主要挑战在于如何在低光照条件下实现高准确度的识别与实时处理。由于夜间光照不足,行人的可见特征减少,这就要求我们的模型能够在这种条件下依然准确识别行人。此外,考虑到实际应用场景(如安全监控、自动驾驶等)往往要求实时或接近实时的处理速度,优化模型的推理速度也至关重要。

  1. 环境适应性和模型泛化能力

        不同的夜间环境(如城市道路、乡村小径等)会呈现不同的光照条件和背景复杂度。此外,天气变化(如雨、雾)也会影响检测效果。因此,我们的系统需要具备强大的环境适应性和模型泛化能力,以保证在各种夜间条件下都能维持高准确率。

  1. 用户交互界面的直观性和功能性

        基于Streamlit开发的Web应用界面需要简洁直观,使用户能够轻松上传图像、视频或通过摄像头实时获取图像进行行人检测。同时,界面还应支持不同模型文件的切换功能,让用户可以根据需要选择不同版本的YOLO模型进行检测。

  1. 数据处理能力和存储效率

        系统需处理大量的图像和视频数据,这就要求具备高效的数据处理能力。同时,考虑到存储效率和数据安全性,我们需要设计高效的数据存储解决方案,并实施适当的数据保护措施。

  1. 系统的可扩展性和维护性

        未来可能需要扩展系统以支持更多的功能或集成新的检测模型。因此,系统的架构设计需考虑到可扩展性和维护性,确保能够轻松地添加新功能或更新模型。

2.3.2 解决方案

        针对夜视行人检测系统的设计与实现,我们提出了一系列解决方案,旨在应对准确性、速度、环境适应性、用户交互以及数据处理等方面的挑战。这些解决方案结合了当前最先进的深度学习技术和用户友好的网页设计,确保了系统既高效又实用。

  1. 深度学习模型的选择和优化: 选用了YOLOv8/v7/v6/v5系列模型作为我们系统的核心,这些模型因其在速度和准确度之间良好的平衡而著称。考虑到夜视行人检测的特殊需求,我们对模型进行了专门的优化,以适应低光照环境下的检测任务。为了提升模型在各种夜间光照条件下的泛化能力,我们采用了多种数据增强技术,包括随机裁剪、缩放、旋转和色彩调整等,模拟不同夜间环境中的行人图像。然后通过在大规模视觉数据集上预训练的模型作为起点,我们采用迁移学习技术,针对夜视行人检测的特定数据集进行微调,这样不仅加快了模型的训练速度,也显著提高了识别性能。

  2. 技术框架和开发工具: 我们选择PyTorch作为深度学习的主要框架,并利用Streamlit来设计一个美观、直观且功能丰富的网页界面。这使得用户可以轻松地上传图片、视频或通过实时摄像头进行夜视行人检测,同时也能够便捷地切换不同的模型文件以适应不同的识别需求。PyCharm作为我们的开发IDE,为我们的代码编写、调试和版本控制提供了极大的便利。

  3. 功能实现和系统设计: 我们的系统支持多种输入源,并实现了动态模型切换功能,这不仅提高了系统的灵活性和适用范围,也优化了用户体验。为了保护用户信息,我们还特别设计了安全的用户登录和注册界面,采用了加密技术进行信息保护,并支持用户管理和权限控制。

  4. 数据处理和存储策略: 利用PyTorch的数据加载和预处理机制,实现了高效的数据处理流程,确保了系统的实时响应能力。同时,设计了高效的数据存储方案,对检测结果和历史数据进行有效组织和索引,便于用户查询和分析。

        通过实施上述解决方案,我们成功开发出了一个既准确又高效的夜视行人检测系统。该系统不仅能满足不同用户在多变环境下的应用需求,还提供了友好的用户体验和强大的数据处理能力,展现了深度学习技术在实际应用中的巨大潜力。

2.4 博文贡献与组织结构

        本文的核心贡献可以概括为以下几个方面:

  1. 综合性文献综述:本文提供了一个广泛而深入的文献综述,涵盖了目标检测领域的最新进展,尤其是YOLO系列在夜视行人检测任务中的应用。这为研究者和开发者提供了宝贵的参考,帮助他们更好地理解当前技术的发展趋势和挑战。

  2. 数据集处理:针对夜视行人检测的特殊要求,本文介绍了一系列数据集处理和优化技术,包括图像增强、数据增强等,旨在提高模型在低光照条件下的性能。

  3. 算法选择与优化:本文不仅介绍了选择YOLOv8/v7/v6/v5等算法的理由,还详细对比了这些算法在夜视行人检测任务上的效果。通过实验验证,本文为选择最合适的模型提供了有力的证据和指导。

  4. 网页设计与实现:文章详细介绍了如何使用Streamlit设计一个美观、用户友好的网页应用,使非技术用户也能轻松进行夜视行人检测。这部分的内容不仅包括界面设计的细节,还包括后端与深度学习模型集成的技术指导。

  5. 实验结果与分析:通过对YOLOv7/v6/v5等算法进行细致的比较分析,本文提供了一系列实验结果,证明了所选模型在夜视行人检测任务上的有效性和优越性。

  6. 资源共享:为了促进研究和开发的进一步工作,本文提供了完整的数据集和代码资源包,包括模型训练和预测的完整代码,以及数据处理和优化的脚本。

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


3. 数据集处理

        在本文中,我们详细介绍了一个专为夜视行人检测任务而构建的数据集,这个数据集是我们研究工作的基石。数据集包含了总计5,725张图像,其中4,032张用于模型训练,1,104张用于验证,以及589张用于最终测试。通过这样的分配,我们确保了模型在训练过程中可以学习到丰富的特征,并且在后期能够通过独立的测试集合进行公正的性能评估。博主使用的类别如下:

Chinese_name = {'person': "行人"}

        图像均在不同的夜间环境下捕获,包含城市街道、郊外道路和其它场合的场景。这种多样性确保了数据集能够模拟真实世界中的各种夜视条件,为模型提供了广泛的学习样本。每张图像中的行人都被精确地标注,以红色矩形框表示。这些标注不仅准确地描绘了行人的位置,也提供了关于目标尺寸、姿态和比例的重要信息。

        深入分析数据集的分布情况,我们发现行人的检测框大多集中在图像的中心区域。这种分布特性指导我们在预处理阶段,可能需要针对图像中心区域进行优化处理,以便更好地捕捉和识别行人。同时,标注框的尺寸分析显示,大多数检测框的高度大于宽度,呈现出人类直立姿态的自然比例。不过,这些框的尺寸相对较小,这表明我们需要确保模型能够有效地检测到在图像中可能显得较远或较小的行人目标。

        为了加强模型的泛化能力,我们对数据集应用了一系列的预处理和增强技术。预处理步骤包括对图像进行标准化,以消除不同摄像设备带来的差异。数据增强包括随机裁剪、缩放、旋转以及色彩调整等方法,这些方法能够模拟行人在各种夜间光照和环境条件下的外观,从而提高模型对不同环境的适应性和鲁棒性。

        在所有图像中,行人目标都标记为单一的“person”类别。这一单类别设计简化了模型的任务,使其能专注于提取行人的特征,而不必区分多种不同的目标。每个标注框内的数字可能表示模型对该目标的置信度,反映了检测算法在实际应用中的可靠性。

        本数据集的构建综合考虑了实际应用中行人检测的各种挑战,特别是在夜间条件下的各种复杂场景。这使得我们的夜视行人检测系统不仅能够在实验条件下表现良好,而且在部署到真实世界场景时,也能展现出强大的检测和追踪能力。通过这些图像和标注数据的详细介绍,我们希望为读者提供一个全面的数据集概览,以便更好地理解模型训练和评估的背景。


4. 原理与代码介绍

4.1 YOLOv8算法原理

        在探讨YOLOv8算法的原理时,我们首先需要理解YOLO(You Only Look Once)系列算法的核心理念,即在单次前向传播过程中同时进行目标的定位和分类。这种一步到位的检测方式使得YOLO算法在速度和效率上有着显著的优势。YOLOv8作为这一系列中的最新迭代,不仅继承了前代YOLO算法的这些优点,而且在结构设计和性能上都有了显著的改进,从而进一步提升了检测的准确性和速度。

        YOLOv8算法的结构可以分为三个主要部分:Backbone(主干网络)、Neck(连接网络)和Head(检测头)。在Backbone部分,YOLOv8采用了CSP(Cross Stage Partial networks)结构,这种结构有效地平衡了模型的学习能力和参数量。CSP结构通过部分跨阶段连接,促进了梯度的直接传播,这对于深层网络的学习是极为有益的。它还减少了计算量,因为它允许网络在少量的参数下进行更深层次的特征学习。

        Neck部分则是负责提取不同尺度特征并进行融合的关键模块。YOLOv8的Neck部分利用了SPP(Spatial Pyramid Pooling)结构和FPN(Feature Pyramid Networks)技术。SPP能够提取多尺度的上下文信息,这对于检测不同尺寸的目标至关重要。而FPN采用了一个自顶向下的结构,将高层的语义信息传递到低层,从而实现了从粗到细的特征融合。

        在Head部分,YOLOv8采取了自适应标签分配(adaptive label assignment)策略,这是一种更为灵活的标签分配方式,允许模型根据目标的不同特性自动调整标签。这意味着算法能够根据目标的大小、形状以及其在图像中的上下文信息,动态地选择最合适的锚点,这种策略能够有效地减少标签分配误差,提升模型的性能。

        YOLOv8还引入了AutoML技术,在算法的设计和优化过程中自动寻找最优的模型参数和结构。这种技术可以减轻手动调参的工作量,确保了YOLOv8在不同的检测场景下都能达到最佳性能。此外,YOLOv8还支持云端训练和边缘计算,使得算法可以在资源受限的设备上进行训练和推断,同时还可以利用云端的强大计算能力进行大规模的训练任务。

        综上所述,YOLOv8通过其独特的结构设计,不仅继承了YOLO系列的高速检测特性,而且还通过CSP网络结构和先进的特征融合技术,显著提升了对于各种尺寸目标的检测能力。这些技术的融合使得YOLOv8在目标检测任务中,无论是在准确度还是速度上,都表现出了卓越的性能。

4.2 模型构建

        在本章节中,我们将深入介绍构建夜视行人检测模型的代码流程和结构。本系统的模型构建过程利用了Python编程语言的高级功能,结合了计算机视觉库OpenCV和机器学习库PyTorch,通过精心设计的类和方法实现了一个高效且准确的夜视行人检测模型。

        首先,我们利用OpenCV,这是一个强大的计算机视觉库,它为我们处理图像和视频提供了必要的工具。OpenCV在模型训练和评估中的作用不可或缺,尤其是在进行图像的预处理和增强时。随后,我们将模型的核心建立在PyTorch框架之上。PyTorch是目前深度学习研究和实践中最受欢迎的框架之一,因其出色的灵活性和强大的功能被广泛使用。在代码中,我们通过select_device函数选择最合适的硬件设备来运行我们的模型,这保证了无论在GPU还是CPU上,模型都能以最佳状态运行。

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

        在代码中,我们设定了使用GPU或CPU作为模型运算的设备,这一选择取决于PyTorch能否检测到可用的GPU。在初始化(init)过程中,我们为模型设置了默认参数,并准备了类别名称列表。这些名称是用于在预测时标注出各个检测到的物体的类别。我们使用Chinese_name字典将类别ID映射为对应的中文名称,使得模型的输出更易于理解。

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基类,体现了面向对象编程的一个优点——代码复用。通过继承,我们能够将通用的逻辑(如加载模型、预处理图像等)放在基类中,而将特定的逻辑(如调用YOLO模型进行预测)在子类中实现。在load_model方法中,模型从给定的路径加载。加载后,我们对模型进行预热,即在选择的设备上运行一个前向传播,以确保模型运行时的性能。在preprocess方法中,我们将图像转换为模型预期的格式,虽然这里的代码保持原始图像不变,但这提供了进行如归一化、缩放或裁剪等预处理步骤的可能性。

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)

        predict方法是模型预测的核心,它将预处理后的图像作为输入,调用YOLO模型进行物体检测,并返回检测结果。在postprocess方法中,我们对模型的输出进行解析和格式化,将其转换为包含类别名称、边界框坐标、置信度分数以及类别ID的字典列表。这样的输出格式便于后续的分析和可视化。通过调用set_param方法,用户可以根据需要动态调整模型参数,如置信度阈值和IOU阈值,进一步优化模型的性能。

        整体而言,这段代码通过精心设计的类结构和方法,实现了一个完整的夜视行人检测流程,从图像输入到预测输出,每一个环节都经过了优化和定制,以确保模型能够在实际应用中达到最佳的识别效果。

4.3 训练代码

        在深入探究构建深度学习模型的代码时,理解每一行代码的目的及其在整个训练流程中的作用至关重要。本博客将详细分析用于夜视行人检测的YOLO模型的训练过程。以下表格详细介绍了YOLOv8模型训练中使用的一些重要超参数及其设置:

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

        环境设置与模型加载:首先,我们需要导入用于构建和训练模型的必要库。这包括os和torch,后者是构建深度学习模型的主要工具,提供了GPU加速及自动微分等强大功能。yaml用于处理配置文件,这些文件通常包含有关训练数据、模型参数等重要信息。YOLO类来自ultralytics库,是针对YOLO模型训练和推理流程的一个封装。abs_path函数用于处理文件路径,确保无论在哪个工作环境中,代码都能正确地找到文件位置。

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

        接下来,我们定义了用于训练过程的关键变量。device变量确保模型能够利用GPU进行训练,如果GPU不可用,则回退到CPU。

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

        数据集准备:变量workers定义了在数据加载过程中用于加速读取的进程数。而batch设置了每个批次处理的图像数量,这直接影响内存消耗和训练速度。数据集的路径是通过data_path变量指定的,它使用abs_path函数从相对路径转换为绝对路径,并通过replace函数统一了路径格式。在实际训练过程中,这保证了模型能够正确地访问到数据集。

workers = 1  # 工作进程数
batch = 8  # 每批处理的图像数量
data_name = "NightVision"
data_path = abs_path('datasets/NightVision/nightvision.yaml', path_type='current')  # 数据集的yaml的绝对路径
unix_style_path = data_path.replace(os.sep, '/')

        我们通过读取并更新数据集的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)

        训练模型:最后,我们加载了预训练的YOLO模型,并调用其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  # 指定训练任务的名称
)

        此代码段揭示了如何使用YOLO模型的训练机制,其中包含了多个层面的设置。所有这些设置都被细致地调整和优化,以期在实际应用中获得最好的夜视行人检测效果。通过该训练流程,研究人员和实践者可以对YOLO模型进行训练和微调,进而在各种环境中实现准确的夜视行人检测。


5. 实验结果与分析

5.1 训练曲线

        在我们的夜视行人检测项目中,利用YOLOv8模型的训练是实现高准确度检测的关键环节。通过对模型训练过程中的损失函数和性能指标进行深入分析,我们能够洞察模型的学习效率以及潜在的优化方向。

        具体来看,训练的box_loss从一个较高的值逐渐下降,并在后期趋于平稳。这意味着模型在定位行人边界框的任务上逐渐变得更加精确。类似地,cls_loss,即分类损失,也表现出了同样的下降趋势,说明模型在区分行人和背景方面的能力在增强。dfl_loss,代表目标的方向和关键点的定位损失,在训练过程中同样显著下降,表明模型对于行人的姿态和方向变得更敏感。

        验证损失(val/box_loss、val/cls_loss和val/dfl_loss)虽然波动性更大,但整体趋势仍然是下降的,尤其是在早期迭代时。这些波动可能源于验证集样本的多样性和复杂性。即便如此,验证损失的下降表明模型在未见过的数据上的泛化能力正在提升。

        关于模型性能的指标,我们看到precision和recall两个指标在训练过程中有着显著的上升趋势,接近于稳定在较高的水平。高precision表明模型在判定一个区域包含行人时较少出错,而高recall表示模型能够检测到大多数实际的行人目标。这对于夜视行人检测来说尤为重要,因为在夜间条件下减少误报和漏检对于系统的实用性至关重要。

        另外两个重要的评价指标mAP50和mAP50-95也随着迭代次数的增加而上升。mAP50是指在50%的IoU(交并比)阈值时的平均精度,它的上升表明模型在较宽松的匹配标准下表现良好。而mAP50-95,是在从50%到95%不同IoU阈值的平均精度,它的提高表明模型在更严格的标准下同样表现出色。特别是在夜视条件下,这意味着模型对行人的检测不仅频繁而且准确,能够处理各种大小和姿态的行人目标。
        总体来说,这些损失和性能指标的图表展示了YOLOv8模型在夜视行人检测任务上训练过程中的优秀性能,以及在应对这一挑战性任务时的稳定进步。通过对这些指标的细致分析,我们可以进一步优化模型架构和训练策略,以达到更高的检测精度和实用性。

5.2 混淆矩阵

        混淆矩阵是评估分类模型性能的重要工具,它显示了模型预测和实际标签之间的关系。在我们的夜视行人检测任务中,混淆矩阵提供了一个清晰的视图,反映了模型在区分行人和背景类别上的效果。

        观察上图的混淆矩阵,我们可以看出模型在检测“person”类别(即行人)时表现出色。矩阵的左上角单元格显示,模型将88%的行人正确分类,这一高比例的真正例(True Positives)表明模型具有强大的行人识别能力。右上角的单元格显示了模型在预测背景时的准确性,达到了100%,这表明模型在判断一个区域不包含行人时非常准确,没有将任何背景误判为行人。

        然而,左下角的单元格显示了12%的行人被错误地分类为背景(False Negatives)。虽然这个误判率不算高,但仍显示出模型在特定情况下可能会错过一些行人目标。这可能是由于夜间图像的质量、行人在场景中的覆盖程度或模型对某些特征的敏感性不足造成的。

        混淆矩阵的归一化处理使得评估结果不受类别样本不均衡的影响,从而可以公正地比较不同类别的检测性能。归一化也有助于我们更准确地解读模型的性能,特别是在不同类别的样本数量可能有显著差异时。
        在实际应用中,这样的混淆矩阵表明模型在夜间环境中对行人的检测已经相当准确,且非常少地将背景误分类为行人。这种准确性对于夜间监控系统尤为重要,因为它减少了误报,使得监控更加可靠。但是,模型仍然需要在减少漏检方面进行改进,因为每一个漏检的行人都可能是监控系统的一个重大疏漏。

        总的来说,通过深入分析混淆矩阵,我们可以确认模型在夜视行人检测任务上的高精度,并可以基于这些结果来进一步优化模型,比如通过改进图像预处理、调整分类阈值或增强模型对特定特征的学习。这些细致的分析为提升夜视行人检测系统的性能奠定了坚实的基础。

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.899 0.910 0.885 0.907
F1-Score 0.86 0.86 0.86 0.87

(3)实验结果分析

       在本研究中,我们设计了一系列的实验来评估和对比YOLO系列几个版本在夜视行人检测任务上的性能。实验目的是要确定哪个版本的YOLO模型在处理低光照、高动态范围的场景中检测行人时最为有效。实验设置保持一致,所有模型均在同一数据集上训练和评估,以确保比较的公正性。在度量指标方面,我们选择了F1-Score和mAP(mean Average Precision)作为评估标准。F1-Score是精确度和召回率的调和平均,而mAP则是在多个IoU(交并比)阈值下平均精度的平均值,两者共同衡量了模型的检测性能。

       在我们的实验中,YOLOv5nu、YOLOv6n、YOLOv7-tiny和YOLOv8n这四个模型展示了其在夜视行人检测任务上的实力。实验结果显示,YOLOv6n在mAP指标上以0.910的成绩领先,紧随其后的是YOLOv8n和YOLOv5nu,分别以0.907和0.899的成绩表现出强劲的检测能力。而YOLOv7-tiny则略低一些,为0.885。这个结果表明,在更广泛的IoU阈值下,YOLOv6n和YOLOv8n能够更加准确地识别行人目标。mAP的高分意味着这些模型在定位准确性和预测信心方面达到了较高的水准,这在夜间行人检测的复杂条件下尤其重要。

       至于F1-Score,所有四个模型都展现出相似的表现,其中YOLOv5nu、YOLOv6n和YOLOv7-tiny都得到了0.86的分数,而YOLOv8n以略高的0.87领先。F1-Score的统一表明,在精确度和召回率之间,这些模型取得了良好的平衡。特别是,YOLOv8n在综合这两方面上的微小优势,可能源于它在网络架构或优化算法上的改进。

       YOLOv6n的优秀表现可能得益于其设计时对特定夜视环境的考虑,例如通过改进的锚框策略、更好的特征提取网络来捕获行人在低照度下的细节。而YOLOv8n的表现则提示我们,尽管它在F1-Score上略有提升,但在mAP上与YOLOv6n相比仍有微小差距。这可能是因为YOLOv8n在追求速度优化的同时,牺牲了一些定位准确性。

        YOLOv7-tiny作为小型化的版本,其性能略低可能是由于模型简化导致的特征提取能力下降。这种设计选择使得模型更适合在资源受限的设备上运行,虽然可能会以牺牲一定的检测精度为代价。

       这些实验结果为我们提供了宝贵的见解,表明了不同的YOLO版本之间在夜视行人检测任务上的性能差异,并指导我们如何根据具体的应用需求选择合适的模型。通过深入分析这些指标,我们可以对模型进行细微的调整,以进一步提升夜视行人检测的准确性和可靠性。


6. 系统设计与实现

6.1 系统架构概览

        在我们的博客中,接下来我们深入探讨基于YOLOv8/v7/v6/v5的夜视行人检测系统的架构设计。本系统采用了模块化设计思想,旨在通过清晰定义的组件和接口来提升系统的可维护性和扩展性。下面是系统架构的关键组成部分:

  1. 检测系统类(Detection_UI)
    检测系统类是整个夜视行人检测系统的核心,它负责协调各个组件的交互。这个类通过集成不同的模块,提供了一个用户友好的界面,用于上传图像或视频,选择模型参数,并展示识别结果。它利用了streamlit框架来搭建可交互的Web界面,方便用户操作。

  2. YOLOv8/v5模型检测器(YOLOv8v5Detector)
    YOLOv8v5Detector类扮演了模型检测器的角色,封装了YOLO模型的加载、预处理、预测以及后处理等操作。这个类是我们系统的AI引擎,通过加载预训练的YOLO模型权重来识别图像或视频中的夜视行人。利用这个模块,我们可以轻松地将最新的YOLO模型版本集成到我们的系统中,以便利用其强大的检测能力。

  3. 日志和结果处理
    系统中集成了ResultLoggerLogTable两个类,用于处理和记录识别结果。ResultLogger提供了一个框架来记录每次检测的关键信息,如识别到的夜视行人类别、置信度、位置等。LogTable则负责将这些信息以表格的形式展示和保存,便于用户查看和分析识别结果。

  4. 工具类和辅助方法
    为了提高代码的复用性和减少冗余,系统设计了一系列工具类和辅助方法。例如,abs_pathdrawRectBox分别用于处理文件路径的获取和在图像上绘制识别框。此外,get_camera_namessave_uploaded_file等方法则为系统提供了摄像头管理和文件处理的功能。

  5. UI布局和样式
    通过使用def_css_hitml方法,我们为系统定义了一套统一的CSS样式,保证了用户界面的美观性和一致性。同时,setup_sidebarsetupMainWindow方法则分别负责侧边栏和主窗口的布局设置,使得整个系统界面直观易用。

6.2 系统流程

        在探讨基于YOLOv8/v7/v6/v5的夜视行人检测系统的流程时,我们可以从代码中抽象出一系列关键步骤,这些步骤集成了从图像获取、模型预测到结果展示的整个流程。以下是系统的主要流程步骤,它们体现了系统如何协调不同的组件以实现夜视行人检测的功能。

  1. 初始化系统设置:系统启动时,SystemController负责初始化所有需要的模块和参数。

  2. 模型和数据准备:在初始化过程中,系统会根据选择的模型类型(例如YOLOv8/v5),加载对应的模型权重。同时,系统还会处理输入数据,这可能包括从摄像头捕获的实时图像、上传的图片文件或视频文件。

  3. 侧边栏配置:用户可以通过侧边栏进行一系列配置,包括选择模型文件、设置置信度阈值、IOU阈值、选择输入源(摄像头或文件)等。这些配置将直接影响检测结果的准确性和效率。

  4. 运行检测:用户点击“开始运行”按钮后,根据输入源的不同,系统会调用process_camera_or_file方法。这个方法负责处理来自摄像头的实时流或处理上传的图片和视频文件。对于实时摄像头输入,系统会不断从摄像头捕获帧,对每一帧调用frame_process方法进行预处理、模型预测、后处理,并将结果显示在页面上。对于上传的图片文件,系统将读取图片文件,同样通过frame_process方法进行处理,并将检测结果展示出来。对于上传的视频文件,系统会按帧读取视频内容,每一帧都经过frame_process方法处理,检测结果随视频播放展示。

  5. 显示检测结果:无论是实时视频流、图片还是视频文件,处理后的图像以及检测到的对象信息(如类别、置信度等)都会通过Streamlit的组件在用户界面上展示。同时,系统提供了过滤功能,允许用户专注于特定类型的检测结果。

  6. 日志记录与导出:系统会将检测结果记录到日志中,并允许用户导出结果为CSV格式的文件,方便后续分析和报告。

  7. 用户界面交互:用户还可以通过侧边栏和其他界面元素,如进度条、按钮等,与系统进行实时交云,调整设置或重新运行检测。

        这一系列流程确保了夜视行人检测系统能够在各种夜间环境下准确快速地识别行人,为降低事故发生率和提高夜间行走人员的安全提供了技术支持。


代码下载链接

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

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

演示与介绍视频https://www.bilibili.com/video/BV1qr42147YC/
YOLOv8/v7/v6/v5项目合集下载https://mbd.pub/o/bread/mbd-ZZ2YmJtp
YOLOv8和v5项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Ykpds
YOLOv7项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Yl5lq
YOLOv6项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Yl55p

完整安装运行教程:

        这个项目的运行需要用到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模型进行细致的比较和优化,我们不仅显著提升了在低光照环境下行人检测的准确率和实时性,还提高了系统的整体稳定性和可靠性。这一成果在安全监控、自动驾驶辅助系统以及夜间行人保护等领域具有重要的实际应用价值。

        经过一系列的实验验证,我们所开发的系统在夜视行人检测的准确性和处理速度上都达到了令人满意的水平。此外,我们还提供了完整的数据集处理流程、模型训练和预测的代码,使后续的研究者和开发者能够便捷地复现和参考,为未来在该领域的探索提供了坚实的基础。尽管取得了一定的成果,但夜视行人检测作为一个复杂多变的任务,仍然面临着许多挑战和改进空间。在未来的工作中,我们计划从以下几个方向进行探索:

  • 模型优化:继续探索更深层次的网络结构和优化策略,如神经网络架构搜索(NAS)技术,以进一步提升模型的性能和效率。
  • 多模态融合:考虑结合红外、热成像等其他模态信息,采用多模态学习方法进行行人检测,以更全面地适应不同的夜间环境和复杂场景。
  • 跨域适应性:研究在不同环境条件下(如不同城市、不同季节的夜间环境)的行人检测,通过领域自适应技术提高模型在多变环境中的泛化能力。
  • 用户交互体验:进一步优化系统的用户界面和交互设计,使其更加友好和直观,以满足更广泛用户的需求。
  • 实际应用拓展:探索夜视行人检测在更多实际应用场景中的应用,如城市安全监控、智能交通管理等,以发挥其最大的社会和经济价值。

        总之,随着技术的不断进步和应用场景的不断拓展,基于深度学习的夜视行人检测技术将在保障人身安全、促进智能交通发展等领域发挥更加重要的作用。我们相信,在不久的将来,这一技术将带来更广泛的社会影响和经济效益。


  1. Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016. ↩︎

  2. Murthy, Jamuna S., et al. "Objectdetect: A real-time object detection framework for advanced driver assistant systems using yolov5." Wireless Communications and Mobile Computing 2022 (2022). ↩︎

  3. Tan, Mingxing, and Quoc Le. "Efficientnet: Rethinking model scaling for convolutional neural networks." International conference on machine learning. PMLR, 2019. ↩︎

  4. Zhang, Shifeng, et al. "Bridging the gap between anchor-based and anchor-free detection via adaptive training sample selection." Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2020. ↩︎

  5. He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016. ↩︎

标签:训练,检测,模型,YOLOv8,夜视,v5,v7,行人
From: https://www.cnblogs.com/deeppython/p/18098979

相关文章