基于YOLOv8深度学习的智慧交通一盔一带自动检测与语音报警系统
道路交通安全管理是智能交通系统(ITS)研究的核心内容之一;驾驶员的安全行为(如佩戴头盔和系安全带等)不仅能够降低交通事故伤亡程度,并且在预防事故的发生中发挥着决定性作用。为了提升道路交通安全监管效能,
本研究致力于开发一种基于YOLOv8深度学习模型的‘一盔一带’智能自动检测及语音报警系统。
该系统整合了先进的计算机视觉技术和目标检测算法,
实现了实时监控驾驶员头盔佩戴和安全带使用状态的目的
我们精心构建并标注了“一盔一带”数据集,并涵盖“驾驶员佩戴头盔”、“驾驶员未佩戴头盔”、“驾驶员已系安全带”以及“驾驶员未系安全带”这四个类别下的图像数据。通过YOLOv8目标检测算法对模型进行了系统的训练与优化工作,在提升检测精度的同时也显著提升了推理速度表现。实验结果表明该模型具有显著性能优势,在mAP@0.5指标上表现优异,并且在推理速度方面也优于传统目标检测方法,在准确识别驾驶员安全状态方面展现出更强的能力
利用PyQt5框架构建可视化的交互界面, 力求打造直观易用的人机交互界面, 同时配合先进的语音合成技术, 特别针对未正确佩戴头盔或未系好安全带的驾驶员, 提供实时语音警示功能, 从而显著提升道路安全管理系统的智能化水平以及操作可行性
算法流程
建议:详细分析项目的算法流程,并系统地研究其核心逻辑。从数据导入和预处理阶段入手,在核心算法的设计阶段及优化过程中展开探讨。每个环节都将通过清晰的结构和简洁明了的语言进行展示,并深入揭示技术背后的原理以及实现思路。

硬件环境
我们采用了两种硬件平台架构作为支撑开展系统调试与训练工作:其中① A Series中的Acer Nitro 16笔记本电脑是主要设备之一。

(2)惠普 HP暗影精灵10 台式机:

当前硬件配置配备了充足的计算能力, 可充分支持大规模图像数据集的训练及高效的运算需求. 借助GPU加速技术的应用, 模型训练所需时间大幅缩减. 通过在两种不同硬件平台上进行测试与优化, 能够从多方面验证系统的性能、兼容性以及稳定性的综合表现. 该方法不仅显著增强了系统在不同场景下的适应能力和广泛的适用范围, 同时降低了开发成本并提高了运行效率, 从而为其在实际应用中的部署提供了可靠的技术保障.
模型训练
Tipps:模型的训练、评估与推理
1.YOLOv8的基本原理
YOLOv8作为最先进的物体检测模型,在Yolo系列历史版本的基础上进行了全面革新,并新增了若干创新组件以显著提升了检测速度与精度。该模型特别适合用于目标检测、图像分割以及人体姿态估计等应用场景,并通过设计三个关键组件实现了高效多平台支持:一个是全新的主干网络架构;另一个是采用Anchors-free设计的新式探测器;第三个是新型损失函数的设计。

在YOLO系列中崭露头角的YOLOv8被视为最高版本,在多个关键指标上全面超越当前的对象检测与实例分割技术。它汲取了前驱者如Yolov5、Yolov6以及YoloX等在设计理念上的精华,并基于对改进型Yolov5架构的全面优化而构建。同时保留了工程化设计中简洁明快的特点。
Yolov8模型网络结构图如下图所示:

2.数据集准备与训练
本研究采用了包含了头盔和安全带的数据集,并通过Labelimg标注工具对每张图像中的目标边界框及其类别进行了标注。在此数据集上运用YOLOv8n模型进行了训练。训练结束后,我们对模型在验证集上的性能进行了全面评估与对比分析。整个流程包括数据准备、模型训练以及模型评估三个阶段。本次研究的主要目标类别集中在头盔和安全带领域。该数据集共计包含6880张图像的具体分布如下所示:
其中,
- 头盔类图片占比45%
- 安全带类图片占比35%
- 其他类别图片占比20%
训练数据集包含了4816张图像样本,在这一过程中承担着数据学习与参数调优的任务。
验证数据集共有1376张图片信息,并通过检验模型对新样本的学习效果来规避过拟合问题。
测试数据集中含有688张图片内容,则主要用于全面考察模型的推广能力。
数据分布情况统计图表

部分数据集图像如下图所示:

部分标注如下图所示:

这种数据分配策略确保了在整个模型训练过程中的均衡性特征,在保证 YOLOv8n 模型开发与性能评估方面提供了可靠的技术支撑。
图片数据的具体存储格式如下:在项目根目录下创建一个datasets子目录,并将所有检测到的图片按照训练集与验证集的比例分配至该datasets目录中。

接下来需要创建一个data.yaml文件,并将其主要用于存储训练数据的路径信息以及指定模型需要执行检测的任务分类信息。YOLOv8在执行模型训练的过程中会自动读取该配置文件的内容,并据此完成相应的模型训练与验证工作。

该文件具体说明了用于模型训练与验证的数据集路径,并指出了需要被检测的目标类别
在数据准备完成之后(或者:在数据准备完成之后),我们可以通过运行train.py文件来进行模型训练(或者:我们可以通过执行train.py文件来进行模型训练)。其中:epochs参数被用来调节(或者:epochs参数被用来调节)整个训练周期的数量(或者:整个训练周期的数量)。而batch参数则被用来设定(或者:则被用来设定)每个批量处理的数据量(或者:每个批量处理的数据量)。需要注意的是:batch参数是根据内存容量来决定(或者:batch参数是根据内存容量来决定),并且最低设置为1(或者:并且最低设置为1)。
CPU/GPU训练代码如下:

导入名为 yolov8n.pt 的预训练YOLOv8模型文件到系统中
3.YOLOv8模型训练结果与性能评估
在深度学习的过程中,在大多数情况下我们通过分析损失函数下降的趋势来评估模型的表现与效果。对于 YOLOv8 模型来说,在其训练过程中主要包含了三类关键损失:用于定位的目标边界(box_loss)、分类目标存在的信心度(cls_loss)以及动态特征检测中的精细调整(dfl_loss)。这些关键损失参数的有效优化对于提升目标检测系统的性能至关重要。
损失函数作用说明:
(1)定位损失(box_loss)衡量了预测边界与其标注边界之间的差异(GIoU),其值越低则表明边界匹配效果越好。
(2)分类损失(cls_loss)评估了锚框与其对应标注类别的一致性或匹配程度,则值越高表明分类结果更为准确。
(3)动态特征损失(dfl_loss)通过DFLLoss计算出预测边界与其目标边界间的回归误差,并根据特征图的不同尺度进行加权处理以优化检测精度。
训练和验证结果文件存储:
训练完成后,相关的训练过程和结果文件会保存在 runs/ 目录下,包括:

(1)该类损失曲线图表中展示了模型的训练过程。
(2)该性能评估曲线图表详细展示了mAP、精确率和召回率的变化趋势。
(3)混淆矩阵表格清晰地列出了模型的分类结果。
(4)Precision-Recall (PR) 曲线图表展示了模型在不同阈值下的表现。
损失曲线(Loss Curve)和性能指标分析:

训练指标:
train/box_loss:
定义为衡量预测边界框与真实边界框之间差异的数值指标。
其反映了模型在边界框回归任务上的表现程度。
观察到该指标值持续降低直至趋于平稳状态。
该模型中的训练损失(train/cls_loss):
定义:用于衡量预测结果与真实标签之间的差异程度的损失函数。
特征:随着训练过程的推进呈现急剧下降并稳定下来的状态。
意义:这表明该模型在进行目标分类任务时表现出色,并且其学习效果逐渐收敛。
train/dfl_loss:
含义:Distribution Focal Loss用于优化边界框的预测分布。
趋势:该指标呈逐渐下降趋势并趋于稳定状态。
Validation Metric:
val/box_loss:
Meaning: The boundary box regression loss measured on the validation set, similar to the training set's box_loss, but used to assess the model's generalization capability. The trend shows a gradual decline, indicating an improvement in predicting unseen data targets.
改写说明
val/dfl_loss:
定义为在验证集上计算得到的分布聚合损失项;
其趋势显示为逐步下降趋势,并由此可推断出该模型在验证集上对分布预测的能力逐渐增强。
性能指标:
metrics/precision@B:
意义:训练过程中的精确率(precision),具体体现为预测为目标类别的样本中实际被正确识别为该类别的比例。
变化趋势:随着模型训练的深入,在测试集上的精确率逐步提升,并最终趋于稳定状态。
metrics/recall(B):其意义在于衡量训练过程中系统对于真实目标的识别能力,在此指标下可计算出系统在全部真实目标中有多少比例被正确识别出来。观察数据趋势显示该值持续提高,进一步验证了模型在识别真实目标方面的性能不断增强。
metrics/mAP50(B):
含义方面,在验证集上采用IoU阈值为0.5计算得出mAP@0.5指标反映了模型在目标检测任务中的平均精度。
趋势方面,则显示出从开始阶段较慢增长到后期呈现显著增长并最终达到相对平稳状态的变化模式。
验证集上计算得到的平均精度:
含义:该指标表示在验证集上计算得到的平均精度。
具体而言,在多个交并比(IoU)阈值下的平均精度被定义为mAP@0.5-0.95(B)。
趋势:该指标呈逐步上升趋势但略低于0.5水平的表现。
这与预期结果一致。
此外,在不同IoU阈值下进行检测性能评估时,
该模型的表现呈现逐步增强的趋势。
总结:
(1)损失持续下降:训练集和验证集的损失指标(box_loss、cls_loss、dfl_loss)均持续下降并趋于平稳状态。
(2)性能显著提升:精确率(Precision)、召回率(Recall)以及mAP@0.5和mAP@0.5:0.95等指标均显著提升。
(3)验证结果与训练结果高度一致:验证集的趋势与训练集高度一致,表明模型未出现明显的过拟合迹象。
Precision-Recall(P-R)曲线分析:

本节将介绍各分类模型的性能表现。其中蓝色线条标注的是类别"Helmet"(配戴头盔),代表该分类模型的Precision-Recall曲线。(1)这一部分对应于类别"Helmet"(配戴头盔),展示了其Precision-Recall曲线。(2)此处计算得到的mAP@0.5值为0.846。
橙色线条 (No helmet, 0.733)
(1)代表类别‘未佩戴头盔’对应的Precision-Recall曲线。
(2)该类别的mAP@0.5值为0.733。
(3)由于该曲线数值偏低,在某种程度上表明‘未佩戴头盔’这一类别在检测性能上稍显不足。
绿色线条标记了类别“No seatbelt”(未系安全带),其对应的数值为0.952;该分类任务中“未系安全带”类别的Precision-Recall曲线表现优异;其对应的平均精度值(mAP@0.5)达到了0.952;该分类器在“未系安全带”类别上的检测性能优异
一条关键线条 (Seatbelt, 0.944)
(1)represents the Precision-Recall curve for the category 'Seatbelt' corresponding to "properly fasten seatbelts".
(2)The area under this curve (mAP@0.5) is 0.944
深蓝色加粗线条 (all classes, 0.869)
(1)标识各类别整体的PR曲线下面积。
(2)该曲线下的面积值为0.869。
总结:该模型在安全带检测任务中的表现最为出色(No seatbelt: 0.952, Seatbelt: 0.944),而头盔检测任务的表现较为逊色(No helmet: 0.733)。整体平均精度维持在较高水平(mAP@0.5: 0.869)。
混淆矩阵 (Confusion Matrix) 研究
混淆矩阵是用作评估分类模型性能的重要工具,它展示了各个类别中的预测结果与实际分布之间的比较

结论:该模型在安全带检测任务中的表现尤为出色,在头盔检测方面仍存在一定的混淆现象。为提高其准确度,应通过优化数据分布及特征提取等方式进一步提升其准确度。
4.检测结果识别
模型在完成训练后, 我们将获得一个性能最佳的最佳模型best.pt文件, 该文件位于runs/train/weights目录中. 该文件可用于后续的推理检测工作. imgTest.py 图片检测代码如下:

加载所需的库:
(1)通过ultralytics获取YOLO模型类,并用于目标检测操作。
(2)利用OpenCV库实现图像处理功能,并展示图像内容。
指定模型与图像的存储位置:
(1)path = ‘models/best.pt’:将预训练的专业模型存储于该位置,并用于物体检测任务。
(2)img_path = “TestFiles/imagetest.jpg”:设定图像文件位于TestFiles文件夹中的imagetest.jpg中。
加载预训练模型:
(1)根据指定路径加载YOLO模型,并将检测任务配置为目标检测 (detect)。
(2)配置目标检测的置信度阈值参数conf,并同时将非极大值抑制(NMS)的交并比(IoU)阈值参数iou设为所需数值。
进行图片检测:(1)执行目标检测于给定的图片;其中的结果字段存储了相关检测信息。
(1)res = results[0].plot():通过调用OpenCV库中的plot函数呈现检测到的数据于图像中。
(2)cv2.imshow(“YOLOv8 Detection”, res):通过调用OpenCV库实现展示检测结果的功能,并设置窗口标题为"YOLOv8 Detection"。
(3)cv2.waitKey(0):通过调用OpenCV库中的waitKey函数实现对用户的按键事件的等待响应。
执行imgTest.py代码后,会将执行的结果直接标注在图片上,结果如下:

这段输出由YOLOv8模型对图片'imagetest.jpg'执行检测操作,并展示了相应的结果信息
图像信息:
(1)处理的图像路径为:TestFiles/imagetest.jpg。
(2)图像尺寸为480×640像素。
检测结果:2个未佩戴头盔(No helmets)
处理速度:
(1)预处理时间: 3.5 毫秒
(2)推理时间: 39.5 毫秒
(3)后处理时间: 101.5 毫秒
实验结果表明该系统能够准确识别未配戴头盔的目标,并表现出良好的实时处理能力。建议进一步在更多应用场景和类别上进行测试;并进一步验证模型的泛化能力;同时建议优化推理与后处理时间来提升整体效率。
运行效果
– 运行 MainProgram.py

主要功能:
(1)该系统可在现实环境中应用头盔和安全带;
(2)该系统不仅能够处理图片、视频流以及摄像头捕获的画面,并且还具备批量处理图片的能力;
(3)该界面能够动态呈现目标位置、目标总数以及其可信度和耗时等关键信息;
(4)该系统能够存储来自图片或视频分析的结果。
2.检测参数设置:

(1)可信度门槛:目前设定了一个标准值为0.25,请检测系统仅输出那些可信度达到或超过25%的目标;可信度越高,则模型对检测结果的信心越强。
(2)交集与并集比率门槛:目前设定为一个较高的标准值为0.70,请系统只将满足这一条件的有效目标纳入最终结果;其中IoU是指检测框与真实框重叠区域占其自身面积的比例,在一定程度上反映了两框之间的相似程度;数值越大则表示重叠程度越高。
两个关键参数在目标检测系统中被广泛应用,在优化后可以直接直接影响模型在检测过程中所达到的精确度与误报率
语音提醒(Voice Reminder):
(1)异常语音提醒:(警告:有交通违法行为,请注意!)

这张图表通过YOLOv8模型实现了目标检测技术的应用,并展示了系统的整体架构设计。以下是对各字段含义的简要说明:

(1)这表明模型完成检测所需的时间仅为0.062秒。
(2)这揭示了该模型具有极高的实时性,并且检测速度极快。
当前检测的目标数量为1,并且它表示这是本次目标识别过程中的第一个目标
该菜单提供多种选项:(1)用户可以选择要查看的目标类型;(2)当前设置为“全部”,显示所有目标信息
3.检测结果说明:

这张图表呈现了基于YOLOv8模型的目标识别系统的检测结果界面。请参考以下各字段的具体含义说明。
目标设定:
(1)呈现与检测相关的指标设置界面。
结果(Result):该系统正在高亮显示“驾驶员未未系安全带”的情况。表示该系统正在突出显示"NO SEATBelt"这一情况。
置信度(Confidence):
(1)这表明模型对于目标属于"驾驶员未系安全带"这一类别的识别达到了87.26%的可信程度。
(2)置信度不仅体现了模型对该结果的信任程度,并且随着数值升高,则越能体现出该结果的可信性。
(1)xmin: 399, ymin: 196:该区域在图像中的起始点位于(xmin, ymin)位置。
(2)xmax: 573, ymax: 317:该区域在图像中的结束点位于(xmax, ymax)位置。
这些坐标标记在图像中的检测区域边界,并确定了"驾驶员未系安全带"的状态。
这张图呈现了检测系统的具体结果,并详细列出了所探测的目标类型、每个目标的置信度值以及它们在图像中的位置坐标。此类界面常用于展示模型在图像中定位并识别出的目标,并提供相关的定位信息和置信度评分。
4.图片检测说明
(1)佩戴头盔

(2)未佩戴头盔

(3)未系安全带

(4)已系安全带

单击图片按钮以打开,并选择待检测的图片;或单击文件夹按钮以打开,并选择包含批量待检测图片的文件夹。
操作步骤如下:
(1)单击目标下拉框以选择指定目标的相关结果信息将被显示。
(2)单击保存按钮以执行保存操作:将对检测结果进行存储;存储路径设置在save_data目录中。
系统在图片中检测到了头盔和护具,并记录了检测结果。具体来说,系统识别了总数为X的目标,在Y的时间内完成任务,并根据Z的置信度进行了分类。此外,系统还获取了每个目标的精确位置坐标信息。
5.视频检测说明

启动视频操作流程
执行保存操作
检测结果:系统实时对视频进行分析,并识别出头盔与护具后予以标注。通过表格展示了视频中各检测结果的置信度及位置坐标信息。
该界面展示了系统在视频帧中进行多目标检测的能力,并具备准确识别头盔和护腰带的能力,在结果中提供了详细的分析数据以及相应的置信度评估信息。
6.摄像头检测说明

单击摄像头按钮以启动摄像头;通过该按钮可启动摄像头;能够对所拍图像进行实时识别;再次单击该按钮将关闭摄像头
系统通过摄像头实现实时监控,并对骑行者的一盔一带进行识别出状态监测。动态更新摄像头画面的同时完成标记处理工作,在图像底端展示乳腺癌X光片定位信息。测试数据表中完整保存了各帧次的检测结果详单。
7.保存图片与视频检测说明

点击保存按钮后会触发系统对当前所选项目(包括批量处理)进行检测并将分析结果存储起来。
检测所得的所有分析结果都会被存储在指定的save_data目录中。
以下是需要存储的结果文件:

(1)图片保存

(2)视频保存

– 运行 train.py
1.训练参数设置

(1)对应于data_yaml_path中的数据集:数据将对应于存储在data.yaml文件中的数据集配置。
(2)被设定为训练150轮:训练任务将被设定为总共运行150个 epoch。
(3)每个批次包含4张图像,并确定其批量大小:每个批次包含4张图像,并确定其批量大小。
(4)训练结果将被存储在名为train_v8的目录中:训练完成后,结果将被存储在名为train_v8的特定目录中。
(5)采用随机梯度下降法(SGD)作为优化器:优化算法选择随机梯度下降法(SGD)进行参数更新。
然而,在多数深度学习任务中,GPU通常能够带来更高的训练效率。但是一些特定场景下,则受限于硬件配置或者其他因素,用户不得不在CPU上完成模型训练。
相较于CPU,在训练深度学习模型时,GPU通常会耗时更多;尤其是针对如YOLOv8这类计算密集型模型而言。除非特殊情况要求,在一般情况下建议选择GPU以提高效率。
2.训练日志结果

这张图展示了使用YOLOv8进行模型训练的详细过程和结果。
(1)模型经过了约2.29小时完成了总共150轮的训练。
(2)在本次训练中使用了配备着16GB显存空间的NVIDIA GeForce RTX 4070 Ti SUPER卡。
(3)该模型展现出较高的训练效率归功于YOLOv10模型的优化设计以及高性能硬件的支持。
mAP指标包括两个关键部分:
(1)mAP@ IoU= 0.5: 86.9%, 表示当IoU设定为0.5时, 系统的平均检测精确度达到了86.9%。
(2)mAP@ IoU= 0.5~0.95: 52.7%, 表示当IoU范围覆盖从0.5至0.95时, 系统在此区间内的平均检测精确度约为52.7%。
速度:
(1)0.1ms 预处理时间
(2)0.8ms 推理时间
(3)0.6ms 后处理时间
结果被保存:(1)Results stored in runs\detect\train_v8:验证结果位于 runs\detect\train_v8 目录下。
完成情况:(1)其中Process exited with exit code 0表明整个验证流程已顺利完成未出现错误信息
总结:
在安全带检测任务中表现出色的该模型,在头盔检测任务方面仍有提升空间。通过针对性优化数据集与训练策略的结合使用, 模型能够实现更高的综合检测性能, 尤其是在关键指标mAP@50-95上的表现更加卓越.
