基于YOLOv8深度学习的45种交通标志智能检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

简介: 基于YOLOv8深度学习的45种交通标志智能检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

前言

交通标志智能检测与识别系统对于提升道路安全、改善交通管理和推动自动驾驶技术的发展都有至关重要的作用。

首先,对于驾驶员来说,即便在恶劣天气或光线不足的情况下,这个系统都能够准确识别交通标志,及时提供必要的交通信息,从而大大降低交通事故的发生概率。

其次,对于城市交通管理中心,该系统可以实时监控交通标志的状态,快速发现被损坏或被遮挡的标志,确保道路信息的畅通无阻。在自动驾驶领域,一个准确的交通标志识别系统是自动驾驶汽车感知环境的关键,它能够帮助车辆理解和遵守交通规则,使自动驾驶更加安全可靠。

此外,交通标志识别技术还可以应用于智能交通系统(ITS)中,以优化交通流量及减少拥堵;导航软件可以利用识别信息提供更加精准的路线指引;驾驶辅助系统则能利用这一技术提醒驾驶者即将到来的交通条件变化,增强驾驶体验。

总之,随着交通网络的日益复杂和车流量的持续增长,交通标志智能检测与识别的重要性正在不断上升,它的应用对于创建更智能、更安全的道路交通环境至关重要。

博主通过搜集不同种类的交通标志的相关数据图片,根据YOLOv8的目标检测技术,基于python与Pyqt5开发了一款界面简洁的交通标志智能检测与识别系统,可支持图片、视频以及摄像头检测,同时可以将图片或者视频检测结果进行保存

软件初始界面如下图所示:

检测结果界面如下:

一、软件核心功能介绍及效果演示

软件主要功能

1. 可进行45种交通标志的检测与识别,具体交通标志名称见数据集介绍部分;
2. 支持图片、视频及摄像头进行检测,同时支持图片的批量检测
3. 界面可实时显示目标位置目标总数置信度用时等信息;
4. 支持图片或者视频检测结果保存

(1)图片检测演示

点击图片图标,选择需要检测的图片,或者点击文件夹图标,选择需要批量检测图片所在的文件夹,操作演示如下:

点击目标下拉框后,可以选定指定目标的结果信息进行显示。 点击保存按钮,会对视频检测结果进行保存,存储路径为:save_data目录下。

注:1.右侧目标位置默认显示置信度最大一个目标位置。所有检测结果均在左下方表格中显示。

单个图片检测操作如下:

批量图片检测操作如下:

(2)视频检测演示

点击视频图标,打开选择需要检测的视频,就会自动显示检测结果。点击保存按钮,会对视频检测结果进行保存,存储路径为:save_data目录下。

(3)摄像头检测演示

点击摄像头图标,可以打开摄像头,可以实时进行检测,再次点击摄像头图标,可关闭摄像头。

(4)保存图片与视频检测结果

点击保存按钮后,会将当前选择的图片【含批量图片】或者视频的检测结果进行保存。检测的图片与视频结果会存储在save_data目录下。

二、模型的训练、评估与推理

1.YOLOv8的基本原理

YOLOv8是一种前沿的目标检测技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行

其主要网络结构如下:

2. 数据集准备与训练

本文使用的数据集为tt100K交通标志数据集选取其中每类样本数大于100的交通标志图片进行模型训练,并将原始标签转换为yolo格式标签。最终一共包含9738张图片,其中训练集包含6793张图片验证集包含1949张图片测试集包含996张图片.部分图像及标注如下图所示。最终共有45种交通标志参与模型训练,中英文名称对照如下:

模型训练时,使用的名称对照表如下:

其中训练的45个交通标志类别中文名称为:

[‘限速80’, ‘禁止自行车同行’, ‘禁止掉头’, ‘限重55吨’, ‘限速60’, ‘人行横道’, ‘禁止鸣笛’, ‘非机动车行进标志’, ‘禁止左转’, ‘减速让行’, ‘最低限速80’, ‘限高4米’, ‘机动车行驶’, ‘限速70’, ‘禁止驶入’, ‘限高4.5米’, ‘禁止摩托车通行’, ‘禁止大型客车通行’, ‘禁止人力车通行’, ‘十字交叉’, ‘机动车行进标志’, ‘限速30’, ‘禁止机动车通行’, ‘禁止长时间停车’, ‘注意儿童’, ‘禁止货车通行’, ‘禁止某两种车辆通行’, ‘解除限制速度’, ‘限速20’, ‘限重30吨’, ‘限速40’, ‘非机动车行驶’, ‘限速120’, ‘施工’, ‘限高5米’, ‘最低限速60’, ‘注意行人’, ‘限速100’, ‘注意合流’, ‘最低限速100’, ‘禁止右转’, ‘限重20吨’, ‘靠右侧道路行驶’, ‘禁止危险品车辆通行’, ‘限速50’]

图片数据的存放格式如下,在项目目录中新建datasets目录,同时将检测的图片分为训练集与验证集放入TrafficSignData目录下。

同时我们需要新建一个data.yaml文件,用于存储训练数据的路径及模型需要进行检测的类别。YOLOv8在进行模型训练时,会读取该文件的信息,用于进行模型的训练与验证。data.yaml的具体内容如下:

train: E:\MyCVProgram\TrafficSignDetection\datasets\TrafficSignData\images\train
val: E:\MyCVProgram\TrafficSignDetection\datasets\TrafficSignData\images\val
nc: 45
names: ['pl80', 'p6', 'p5', 'pm55', 'pl60', 'ip', 'p11', 'i2r', 'p23', 'pg', 'il80', 'ph4', 'i4', 'pl70', 'pne', 'ph4.5', 'p12', 'p3', 'pl5', 'w13', 'i4l', 'pl30', 'p10', 'pn', 'w55', 'p26', 'p13', 'pr40', 'pl20', 'pm30', 'pl40', 'i2', 'pl120', 'w32', 'ph5', 'il60', 'w57', 'pl100', 'w59', 'il100', 'p19', 'pm20', 'i5', 'p27', 'pl50']

注:train与val后面表示需要训练图片的路径,建议直接写自己文件的绝对路径。

数据准备完成后,通过调用train.py文件进行模型训练,epochs参数用于调整训练的轮数,batch参数用于调整训练的批次大小【根据内存大小调整,最小为1】,代码如下:

# 加载模型
model = YOLO("yolov8n.pt")  # 加载预训练模型
# Use the model
if __name__ == '__main__':
    # Use the model
    results = model.train(data='datasets/TrafficSignData/data.yaml', epochs=350, batch=4)  # 训练模型
    # 将模型转为onnx格式
    # success = model.export(format='onnx')

3. 训练结果评估

在深度学习中,我们通常用损失函数下降的曲线来观察模型训练的情况。YOLOv8在训练时主要包含三个方面的损失:定位损失(box_loss)、分类损失(cls_loss)和动态特征损失(dfl_loss),在训练结束后,可以在runs/目录下找到训练过程及结果文件,如下所示:

各损失函数作用说明:

定位损失box_loss:预测框与标定框之间的误差(GIoU),越小定位得越准;

分类损失cls_loss:计算锚框与对应的标定分类是否正确,越小分类得越准;

动态特征损失(dfl_loss):DFLLoss是一种用于回归预测框与目标框之间距离的损失函数。在计算损失时,目标框需要缩放到特征图尺度,即除以相应的stride,并与预测的边界框计算Ciou Loss,同时与预测的anchors中心点到各边的距离计算回归DFLLoss。这个过程是YOLOv8训练流程中的一部分,通过计算DFLLoss可以更准确地调整预测框的位置,提高目标检测的准确性。

本文训练结果如下:

我们通常用PR曲线来体现精确率和召回率的关系,本文训练结果的PR曲线如下。mAP表示Precision和Recall作为两轴作图后围成的面积,m表示平均,@后面的数表示判定iou为正负样本的阈值。mAP@.5:表示阈值大于0.5的平均mAP,可以看到本文模型45类目标检测的mAP@0.5平均值为0.796,结果还是很不错的。

4. 检测结果识别

模型训练完成后,我们可以得到一个最佳的训练结果模型best.pt文件,在runs/trian/weights目录下。我们可以使用该文件进行后续的推理检测。

图片检测代码如下:

# 所需加载的模型目录
path = 'models/best.pt'
# 需要检测的图片地址
img_path = "TestFiles/4840.jpg"
# 加载预训练模型
# conf  0.25  object confidence threshold for detection
# iou 0.7 intersection over union (IoU) threshold for NMS
model = YOLO(path, task='detect')
# model = YOLO(path, task='detect',conf=0.5)
# 检测图片
results = model(img_path)
res = results[0].plot()
res = cv2.resize(res,dsize=None,fx=0.3,fy=0.3,interpolation=cv2.INTER_LINEAR)
cv2.imshow("YOLOv8 Detection", res)
cv2.waitKey(0)

执行上述代码后,会将执行的结果直接标注在图片上,结果如下:

以上便是关于此款交通标志智能检测与识别系统的原理与代码介绍。基于此模型,博主用pythonPyqt5开发了一个带界面的软件系统,即文中第二部分的演示内容,能够很好的支持图片、视频及摄像头进行检测,同时支持检测结果的保存

相关文章
|
4天前
|
机器学习/深度学习 传感器 数据采集
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
27 5
|
2月前
|
机器学习/深度学习 算法 测试技术
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
本文是关于如何搭建深度学习环境,特别是使用mmdetection进行CPU安装和训练的详细指南。包括安装Anaconda、创建虚拟环境、安装PyTorch、mmcv-full和mmdetection,以及测试环境和训练目标检测模型的步骤。还提供了数据集准备、检查和网络训练的详细说明。
114 5
深度学习环境搭建笔记(二):mmdetection-CPU安装和训练
|
2月前
|
机器学习/深度学习 数据可视化 计算机视觉
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
这篇文章详细介绍了如何通过可视化深度学习中每层特征层来理解网络的内部运作,并使用ResNet系列网络作为例子,展示了如何在训练过程中加入代码来绘制和保存特征图。
67 1
目标检测笔记(五):详细介绍并实现可视化深度学习中每层特征层的网络训练情况
|
2月前
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
149 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
1月前
|
机器学习/深度学习 自然语言处理 并行计算
DeepSpeed分布式训练框架深度学习指南
【11月更文挑战第6天】随着深度学习模型规模的日益增大,训练这些模型所需的计算资源和时间成本也随之增加。传统的单机训练方式已难以应对大规模模型的训练需求。
97 3
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
使用Python实现智能食品质量检测的深度学习模型
使用Python实现智能食品质量检测的深度学习模型
95 1
|
1月前
|
机器学习/深度学习 搜索推荐 安全
深度学习之社交网络中的社区检测
在社交网络分析中,社区检测是一项核心任务,旨在将网络中的节点(用户)划分为具有高内部连接密度且相对独立的子群。基于深度学习的社区检测方法,通过捕获复杂的网络结构信息和节点特征,在传统方法基础上实现了更准确、更具鲁棒性的社区划分。
61 7
|
19天前
|
机器学习/深度学习 传感器 算法
行人闯红灯检测:基于计算机视觉与深度学习的智能交通解决方案
随着智能交通系统的发展,传统的人工交通违法判断已难以满足需求。本文介绍了一种基于计算机视觉与深度学习的行人闯红灯自动检测系统,涵盖信号灯状态检测、行人检测与跟踪、行为分析及违规判定与报警四大模块,旨在提升交通管理效率与安全性。
|
2月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
80 2
|
2月前
|
机器学习/深度学习 运维 监控
深度学习之异常检测
基于深度学习的异常检测是一项重要的研究领域,主要用于识别数据中的异常样本或行为。异常检测广泛应用于多个领域,如网络安全、金融欺诈检测、工业设备预测性维护、医疗诊断等。
141 2