wx供重浩:创享日记
对话框发送:625头盔
获取完整源码源文件+标注好的数据集(在源码文件夹->yolov5-5.0->VOCdevkit)+优秀论文+答辩PPT及文稿等

在这里插入图片描述


有偿59yuan配置环境、让它跑起来、主要文件和参数说明(详见文章开头)


一、环境安装配置等请详见该教程点击查看

二、下载该源码解压后从PyCharm中打开

三、下载安装相关包开始训练和识别,可以参考教程点击查看


设计总说明

在许多非机动车交通事故中,未佩戴头盔是造成驾驶人受伤或死亡的主要原因,检测和惩处此类骑手对于降低道路交通事故严重性与保障人生命财产安全具有重要意义。针对该问题,目前交管部门主要采取交警现场执法这种监管方式,该方式需要投入巨大的人力物力,且效率低下。随着深度学习和目标检测技术的发展,越来越多的基于深度学习的智能系统应用于交通识别的场景中,因此,本文研究并设计了基于深度学习的电动车头盔佩戴检测系统,主要基于改进及训练后的YOLOv5模型对未佩戴头盔该违规行为进行识别,该系统可以辅助交管部门对非机动车进行监管,具有一定的现实意义与实用价值。

本设计的主要标准是算法准确性和实时性。算法准确性要求检测结果正确率高,误报率低;实时性则要求算法能够在短时间内完成检测并输出结果。本设计的设计原则是综合考虑算法的准确性和实时性,选用适合的深度学习模型进行训练,并结合数据集特点进行优化。同时,要充分考虑实际使用场景中可能出现的干扰及操作的便捷性,针对性地进行算法优化及可视化设计。综上所述,本设计选择Pytorch对YOLOv5模型进行训练,根据数据集和实际场景骑手头部目标较小的特点,使用Mosaic-9数据增强和添加CBAM注意力机制对原模型进行改进。
本设计的具体步骤如下:
(1)数据采集:本次电动车头盔佩戴检测数据集由MS COCO大型目标检测数据集和互联网中收集的非机动车道交通情况的数据集组合而成。
(2)数据标注:利用labelimg标注工具对数据集中的佩戴头盔、未佩戴头盔和非机动车三类进行标注,并进行格式转换和划分,得到训练数据集。
(3)模型训练:选用YOLOv5框架训练模型,并使用优化算法对模型进行调参和优化。
(4)分析改进:针对数据集特点和实际应用场景下的目标特点,提出并进行Mosaic-9数据增强和添加CBAM注意力机制优化。
(5)实验验证:对不同场景下目标进行实验验证,评估算法的准确性和实时性。并且基于PySide6实现可视化操作界面。

本设计最终实现了基于YOLOv5的电动车头盔佩戴检测算法,该算法能够在实时性和准确性方面达到较高的水平。实验结果表明,改进后的模型在保持实时性为49FPS的情况下,均值平均精确度相比原始的YOLOv5模型从原来的83.3%提升到了85.3%,精确率从 83.8%上升到了86.5%,召回率从78.4%上升到79.4%。相较于原先的模型,改进后的 YOLOv5模型在小目标检测上优势明显,能在保持YOLOv5检测实时性的同时,提高是否佩戴头盔和是否为非机动车的检测和分辨效果。同时,针对实际使用场景中可能的干扰因素,本设计还进行了一定的优化改进,提高了算法的鲁棒性和稳定性。


论文目录

在这里插入图片描述
在这里插入图片描述


YOLOv5模型结构

在这里插入图片描述


YOLOv5检测流程

在这里插入图片描述


数据集分析和算法改进

本章首先对数据集和YOLOv5模型进行了分析,虽然YOLOv5是一种性能优异的通用目标检测算法,但在特定数据集上,其可能存在着一些问题,例如目标数量不均衡、目标过小等。这些问题可能会影响模型在该数据集上的检测效果和性能表现。为了解决这些问题,本章基于分析,提出了相关的改进措施。

3.1 头盔佩戴数据集分析
本次电动车头盔佩戴检测数据集由MS COCO大型目标检测数据集和网络中收集的非机动车道交通情况的数据集组合而成。通过labelimg软件对所有收集的图片进行标注,先标注为XML格式,再通过Python脚本转换为YOLO格式,并将其进行划分,代码详解附录B。处理完成的数据集一共有1164张图片用于训练,299张图片用于验证。其中检测的类别包含电动车及摩托车(two_wheeler)、佩戴头盔(helmet)和未佩戴头盔(without)三类,每个类别的实例数量如图3-1所示。其中,电动车及摩托车(two_wheeler)类共有3604个,佩戴头盔(helmet)类共3087个,未佩戴头盔(without)类共1760个。具体而言,数据集中未佩戴头盔类的检测实例数量较少,导致类别不均衡问题,可以通过数据增强处理来改善此问题。另外,数据集中存在许多较小的目标,占比约为44.52%。在这种情况下,可以添加CBAM注意力机制以改进小目标检测效果。总之,在解决目标检测问题时,需要针对数据集中的具体情况进行相应的处理和优化,以提高模型的检测准确率和性能。
在这里插入图片描述
3.2 YOLOv5分析
YOLOv5通过使用路径聚合网络和改进的网络骨架,显著提高了小物体检测效果。同时,对于大目标检测,该模型采用了多尺度训练和PAN模块来提高检测精度。多尺度训练可以从不同的尺度下学习到更多特征信息,而PAN模块则将不同尺度的特征信息融合起来,有效提高了检测精度。
然而, 由于小目标的面积较小且分辨率低,YOLOv5模型容易忽略或误分类这些目标。此外,该模型采用的anchor-based方法限制了检测框的大小和形状,因此在小目标检测方面表现不如一些anchor-free方法。这些问题可能导致在检测密集小物体时存在定位失误的问题,并且还容易将背景错误判别为物体。针对这些问题,可以尝试使用其他更适合小目标检测的模型或方法,或者采用更加细致和精确的参数调整方式来改进模型性能。

3.3 YOLOv5改进
由上述对于数据集和YOLOv5模型的分析,得知检测类别数量不均衡且数据集中的小目标较多,因此,针对具体问题提出以下改进方法。
3.3.1 Mosaic-9数据增强
为了解决图3-1中的数据不均衡问题,本文选择采用数据增强方法以增加数据量。数据增强是一种预处理技术,可以通过微小的变换操作使神经网络将其视为全新的图片,从而减少过拟合并提高模型效果。本文采用了Mosaic-9数据增强方法,将9张图片随机缩放、翻转、调整色域等,然后拼接起来。在实际应用中,数据增强是一种简单有效的方法,可用于解决数据不足和数据不均衡等问题,提高模型的表现和泛化能力。图3-2展示了Mosaic-9数据增强在本次设计的数据集上的效果图。
在这里插入图片描述
3.3.2 添加CBAM注意力机制
通过对数据集的分析得知小目标对象占到了44.52%,并且道路交通背景较为复杂,作为检测对象的骑手头部被遮挡情况较多,在此问题下,若要提高目标检测和定位的精度,可以将CBAM注意力机制引入YOLOv5网络主干。CBAM模块可以增强网络在关键区域的响应,更好地捕捉目标物体的细节和特征,并引入上下文信息来更好地识别和定位目标物体。然而CBAM模块需要额外的计算量来计算通道和空间注意力权重,这会导致在处理大型图像集时网络速度下降。在YOLOv5网络中添加CBAM模块需要更长的训练时间来学习注意力权重,因此模型的训练时间会有所增加,与此同时,其需要更多的存储空间来存储注意力权重,这会增加训练和推理的内存需求。
在这里插入图片描述


模型训练与检验

本文利用PyTorch框架实现YOLOv5模型的改进,并在此基础上对模型性能和检测效果进行了分析。PyTorch是Facebook开源AI框架之一,它具有易学易用、可读性高、支持动态计算图和GPU加速等优点,且拥有强大的社区支持。本章将讨论训练和实验所使用的硬件平台以及对改进前后的模型进行比较分析。

4.1 训练硬件平台
本次实验中的所有数据皆在以下硬件平台上运行所得。
(1)CPU:Intel® Core™ i5-8265U CPU @ 1.60GHz 1.80 GHz
(2)运行内存:8.00 GB
(3)GPU:NVIDIA GeForce MX250,2GB显存,浮点计算速度约为1.5 TFLOPS

4.2 训练结果分析
在上述硬件设备基础上,本文通过100轮训练对改进前后的模型进行实验,使用精确率、召回率和 作为模型的评价指标。
4.2.1 训练过程对比
如图4-1所示,纵坐标为 ,横坐标为训练轮数。红色的曲线为改进前模型在训练时期的 的变化曲线,蓝色的曲线为改进后模型在训练时期的 的变化曲线。从图中可以看出改进后模型的 在训练期间一直比改进前模型高。
在这里插入图片描述
图4-2为验证集cls_loss变化图,cls_loss是分类损失函数,用于度量预测的类别标签与实际标签之间的差异。YOLOv5使用交叉熵损失函数计算cls_loss。该损失函数基于预测类别概率和实际标签之间的交叉熵来衡量预测结果的准确性。训练后期改进后模型的cls_loss要比改进前的低,因此改进后模型的分类效果要更好。图4-3为box_loss变化图,表示的是模型的边界框坐标定位方面的误差,越低表示模型的边界框定位越准。在YOLOv5中使用了CIoU loss来计算box_loss,CIoU loss比原本的损失函数多考虑了边界框的中心点距离和长宽比,能更好的反应预测框和真实框的接近程度,可以看到训练时期改进后模型比改进前的box_loss低,这表明改进后的模型在定位方面更精确。图4-4为obj_loss变化图,表示的是边界框是物体的置信度方面误差,越低表示模型对边界框内是否存在物体的判别能力越强。改进后模型的obj_loss一直比改进前低,这表明改进后模型判别是否存在物体的能力更强,能够减少风景被误判概率。随着训练批次的上升,loss出现了先下降后上升的趋势,这是因为出现了过拟合的现象。为了选取泛化能力最强的模型权重,应该选择loss曲线中最低的点所对应的模型权重作为最佳的模型权重。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.2.2 训练结果对比
图4-5展示了YOLOv5模型改进前后在 指标上的表现。横坐标表示佩戴头盔、未佩戴头盔和电动车三个不同的类别以及所有类别,纵坐标表示预测边界框中IoU大于50%的情况下的均值平均精确度。根据图中数据可知,改进后的模型在整体和每个类别上的均值平均精确率都有所提升。佩戴头盔类的均值平均精确率从81.1%提升到了85.2%,未佩戴头盔类的均值平均精确率从73.4%上升到了75.4%,电动车类的改进前后均为95.4%,而全部类别的均值平均精确率从83.3%提升到了85.3%,提升了2.0%。综上所述,YOLOv5模型的改进使其在物体检测方面表现更加优秀,能够更准确地识别不同类别的物体。
在这里插入图片描述
图4-6为模型改进前后在精确度方面的对比,横坐标代表各个类别,纵坐标代表精确度。由图可知,佩戴头盔类从81.4%提升到85.3%,提升了3.9%;未佩戴头盔类从80.2%提升到84.4%,提升了4.2%;电动车类从89.9%提升到90.0%,基本保持不变。而在全部类别上,改进后模型的精确度为86.5%,比改进前的83.8%有了2.7%的提升。这表明改进后的模型能够更准确地识别不同类别的物体,从而提高了整体的检测性能,使其能够更好地应用于实际场景中的物体检测任务。
在这里插入图片描述
图4-7为模型改进前后在召回率方面的对比,横坐标表示各个类别,纵坐标表示召回率。由图可知,改进后模型在未佩戴头盔类的召回率从64.6%上升到了67.6%,而电动车类的召回率从89.6%上升到了90.2%,但佩戴头盔类的召回率从80.9%下降到了80.6%。综上所述,所有类别的召回率从原来的78.4%上升到了79.4%,通过改进YOLOv5模型,在召回率方面有所提高,从而使其能够更准确地检测不同类别的物体。虽然某些类别的召回率可能会有所下降,但整体上模型的性能仍然得到了显著提升。
在这里插入图片描述
图4-8和图4-9展示了模型改进前后在两个电动车骑行者检测方面的表现对比。其中图4-8显示的是改进前的未佩戴头盔检测效果图,绿色框表示电动车类,0.88和0.87则表示模型认为该框有88%和87%的可能性为电动车;黄色框则表示未佩戴头盔类,0.82和0.81分别表示模型认为该框有82%和81%的可能性为未佩戴头盔。而图4-9则显示了改进后的模型在同一张图片上的检测效果图,紫色框表示电动车类,0.91和0.87则表示改进后的模型对该框的置信度分别为91%和87%。与此同时,未佩戴头盔检测出的置信度分别提升为84%和82%。比较改进前后的检测效果图可以明显的看出改进后的模型相较于改进前模型在电动车类及未佩戴头盔类的检测上有了较大的提升。综上所述,通过改进YOLOv5模型,在物体检测方面取得了显著的提升,能够更准确地识别不同类别的物体并提高整体的检测性能。
在这里插入图片描述
在这里插入图片描述
图4-10展示了未经改进的模型在道路交通图片上的目标检测效果。在该图中,深蓝色边框代表电动车类,数字表示其置信度大小,数字越大代表预测结果越可信。该图中,模型共预测出了4个电动车和摩托车边框。相比之下,图4-11展示了经过改进后的模型在小目标检测上的表现。该图中,本章可以发现改进后的模型总共预测出了6个电动车和摩托车边框,并且相对于改进前的模型,改进后的模型整体置信度有所提高。因此,从这个角度来看,改进后的模型能够更加精准地定位目标。
在这里插入图片描述

其余完整详见下载!!!!

4.3 可视化界面
为了使得检测操作更加便捷,本文基于PySide6开发了一个简单的图片及视频检测的可视化操作界面,由于无法连接交通摄像头进行检测,因此该可视化界面未加入摄像头作为数据源的检测。
PySide6是一个基于Python语言和Qt框架的开源软件库,提供了对Qt6及其功能的完全支持,可用于创建跨平台的桌面应用程序。PySide6提供了大量的模块和类,如QtWidgets、QtCore、QtGui、QtNetwork等,可以通过这些模块和类来实现各种操作,使得Python开发人员得以使用Qt框架构建功能丰富的GUI应用程序。
因此本文基于PySide6进行相关开发,首先根据逻辑及界面需求,使用Qt Designer设计用户界面,并将设计的.ui文件转换为Python文件,接着在PyCharm中创建主程序代码,并导入所需的PySide6模块、自动生成的.py文件和其他必要的库;最后编写Python代码以实现用户界面上的交互行为和逻辑,具体代码详解附录C。如图4-13为电动车头盔佩戴检测可视化界面,底部两个按钮可以选择图片检测和视频检测,左上方显示的为供检测的源文件,右上方显示的为检测结果。
在这里插入图片描述
其余完整详见下载!!!!

数据集格式转换和划分代码

import os, random, shutil
 
def moveimg(fileDir, tarDir):
    pathDir = os.listdir(fileDir)  # 取图片的原始路径
    filenumber = len(pathDir)
    rate = 0.2  # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
    picknumber = int(filenumber * rate)  # 按照rate比例从文件夹中取一定数量图片
    sample = random.sample(pathDir, picknumber)  # 随机选取picknumber数量的样本图片
    print(sample)
    for name in sample:
        shutil.move(fileDir + name, tarDir + "\\" + name)
    return
 
def movelabel(file_list, file_label_train, file_label_val):
    for i in file_list:
        if i.endswith('.jpg'):
            filename = file_label_train + "\\" + i[:-4] + '.txt' 
            if os.path.exists(filename):
                shutil.move(filename, file_label_val)
                print(i + "处理成功!")
 
if __name__ == '__main__':
    fileDir = r"C:\Users\XXX\Desktop\hat\JPEGImages" + "\\"  # 源图片文件夹路径
    tarDir = r'C:\Users\XXX\Desktop\hat\JPEGImages_val'  # 图片移动到新的文件夹路径
    moveimg(fileDir, tarDir)
    file_list = os.listdir(tarDir)
    file_label_train = r"C:\Users\86159\Desktop\hat\Annotations_yolo"  # 源图片标签路径
    file_label_val = r"C:\Users\86159\Desktop\hat\Annotations_val"  # 标签
      # 移动到新的文件路径
    movelabel(file_list, file_label_train, file_label_val 
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐