news 2026/10/8 18:44:56

YOLO交通标志检测完整项目:Python源码、数据训练与PyQt5系统构建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO交通标志检测完整项目:Python源码、数据训练与PyQt5系统构建

YOLO交通标志检测完整项目:Python源码、数据训练与PyQt5系统构建

本项目使用YOLO和PyQt5构建交通标志检测系统,支持图片、文件夹、视频和摄像头输入,输出目标框、类别、置信度及结果表格。我是孔一学长,这篇按工程实现过程介绍项目组成、数据接入、模型训练、结果验证与界面集成,方便做课设的同学逐项对照文件。

项目功能与运行效果

项目有YOLOv8s、YOLO11s、YOLO26s三个独立版本,共用同类界面功能。下面是YOLO11运行图:主区域绘制目标框,左侧展示检测信息,下方表格记录结果,右侧提供输入选择、模型选择和保存按钮。

完整演示采用YOLO11版,展示单图、文件夹批量、结果保存及连续视频检测:

https://www.bilibili.com/video/BV1oLpM6CEpL/

除演示功能外,程序还有摄像头输入入口。各版本实际检测效果以对应训练权重为准。

系统如何分层,代码分别负责什么

工程分为数据与模型文件、模型推理、结果处理、PyQt5交互几部分。训练阶段将数据变成权重,运行阶段加载权重处理新输入,再把结果显示到界面中。

工程任务主要文件处理内容
数据定义myvoc.yaml数据路径与45类标签
模型训练train.py加载初始权重并执行训练
模型评估val.pybest.pt复评与指标保存
运行交互main.py、ui.py输入选择、推理、显示与保存
配置管理项目配置.yaml、config_utils.py权重路径、阈值及界面资源

构建顺序是先准备数据与模型训练入口,再保存和验证权重,最后让界面调用同一条预测链路。界面显示所需的类别、坐标等内容来自模型返回值。

准备环境并确认启动入口

项目推荐Python 3.11,依赖包括PyTorch、PyQt5、OpenCV和PyYAML。完整包已带ultralytics源码,运行时保持项目目录完整,并核对本机PyTorch与计算环境。

python-mpipinstall-rrequirements.txt python train.py --check-only python main.py

--check-only检查训练入口所需模型能否加载,不开始正式训练。main.py启动界面前,还要确保配置中的正式权重存在,例如YOLO11默认指向runs/train/exp_yolo11s_main200/weights/best.pt。

直接查看运行效果可以使用已有权重;重新训练则会产生新的实验文件。两种操作对应不同入口,第一次运行建议先用随包测试图确认界面流程。

具体支持哪些交通标志

类别范围由myvoc.yaml中的45个标签和项目配置.yaml中的显示名称共同确定。三版配置核对一致。下面按用途列全中文名称,分组只是文档组织方式,模型类别数仍为45。

  • 限速与解除限速(10类):限速80、限速60、限速70、限速30、解除40限制速度、限速20、限速40、限速120、限速100、限速50。

  • 最低时速(3类):最低80时速、最低60时速、最低100时速。

  • 限高与限重(6类):限重55t、限高4m、限高4.5m、限重30t、限高5m、限重20t。

  • 车辆通行限制(9类):禁止非机动车进入、禁止驶入、禁止二轮摩托车、禁止小型客车、禁止人力车、禁止机动车、禁止载货汽车、禁止载货汽车和拖拉机、禁止运输危险物车辆。

  • 转向、停车与鸣笛限制(5类):禁止掉头、禁止鸣笛、禁止左转、禁止车辆临时或长时停放、禁止右转。

  • 通行与车道指示(6类):人行横道、非机动车车道、机动车行驶、机动车车道、非机动车行驶、靠右行驶。

  • 警示与让行(6类):减速让行、十字交叉、注意儿童、施工、注意行人、注意合流。

模型一次预测返回框位置和这45类中的类别。新增一种标志时,需要补充相应图像与标注并更新训练配置;现有工程中的名称表用于显示。日常读代码只需在这一处核对顺序,后面的重点是数据、训练与应用怎样连接。

接入数据集与训练配置

数据集共9738张道路图像、45类标志。myvoc.yaml指定datasets/dataset作为根目录,images和labels分别保存图像与检测标签。

划分图像数
train6793
val1949
test996

三个版本使用相同的数据划分规模。接入自定义数据时,应核对路径、图像与标签的对应关系以及类别编号;随后再同步数据配置与模型训练任务。

这张类别分布图按标注目标数统计,一张图像可以包含多个目标。类别数量并不均匀,因此新增实验时,除了总量,也要查看关注类别的样本。

用真实样本理解图像与标签

runs/val/exp_yolo11s_main200/val_batch0_labels.jpg把验证样本和真实标注排在一起。图中既有白天道路,也有夜间路口,标志经常位于画面远处;这里显示的是数据标签,不是预测成功率。

以左上角98112.jpg为例,对应datasets/dataset/labels/val/98112.txt中的真实内容如下:

15 0.955077 0.391276 0.022137 0.027344

检测标签采用class_id x_center y_center width height五列。后四列是归一化坐标,此处类别15在项目中显示为限高4.5m。每个目标写一行,因此多目标图像会有多行标签;读取数据时依靠同名文件把图像和标注配对。

写数据接入逻辑时,可以从一个样本先检查路径和框位置,再检查整批。上图的夜间场景、小尺寸标志和同屏多个标志,也给后续验证提供了具体观察对象。

训练输入尺寸设为640。脚本使用旋转、平移、尺度变化、Mosaic与MixUp等增强;其水平和垂直翻转配置对方向性标志需要单独检查,避免改变原有语义。

预处理链路及可视化

数据指标图表/process_vis.py保留了预处理步骤可视化。下图把原始图像、LetterBox尺寸处理、RGB转换、0—1数值归一化和反归一化检查放在一起;最后一步用于核对显示,不是训练输入的一次额外处理。

图上方是整图,中间是同一区域的放大,下方是像素分布。原图缩到640后,远处小标志会损失部分细节。做尺寸实验时,应同时比较指标和样本预测,不能仅凭缩放后的图看起来清晰就判断模型效果。

从增强参数到实际训练批次

img_augment_vis.py另存了单目标增强图。这里使用类别14的目标裁剪,展示几何变化及模糊的外观,帮助理解每个操作改变什么。

正式训练参数包括degrees=10、translate=0.1、scale=0.5、perspective=0.001、mosaic=1.0和mixup=0.1,close_mosaic=10。可视化脚本与训练入口是两份代码,图中的高斯模糊不作为已开启训练参数的证据。

下面是runs/train/exp_yolo11s_main200/train_batch0.jpg,由训练过程实际保存。可以看到多图拼接、旋转或翻转后的道路,以及对应框的位置。

检查增强需要同时看图像与标签:目标发生位移或缩放时,框也应随之变化;涉及左右转向、靠右行驶等类别时,还要核查方向语义。这里只呈现已有配置和批次,不把某项增强直接写成指标提升原因。

执行模型训练,检查留下的产物

YOLO11训练入口加载本地yolo11s.pt,再调用model.train()。关键参数如下,另外两版同样设置200轮、640输入和16批量。

参数配置
epochs / imgsz / batch200 / 640 / 16
optimizer / lr0SGD / 0.01
momentum / weight_decay0.937 / 0.0005
warmup_epochs / close_mosaic3 / 10
seed / deterministic0 / True

执行python train.py会写入训练目录。想保留既有结果,可用--name指定新的实验名;如果验证新实验,需要同步修改val.py中的权重和输出路径。

训练完成后,best.pt与last.pt保存模型权重,results.csv与results.png记录各轮数值和训练曲线。图中可以直接看到损失变化与检测指标趋稳的过程。

在PyQt5中接入预测和结果保存

训练好的权重通过项目配置.yaml指定,config_utils.py解析项目相对路径。界面选择图片或获取视频帧后,进入main.py的detect_pic():

self.results=self.yolo(img_path,conf=self.model_conf,iou=self.model_iou)[0]

程序读取boxes.xyxy、boxes.cls和boxes.conf,绘制框与文字并填入表格。中文名称通过配置中的类别表转换,保持与模型类别顺序一致即可。视频和摄像头通过采集及定时刷新继续送帧。

CSV保存由save_current_result()完成:读取当前表格非空行,以utf-8-sig编码写入outputs/detection_results.csv,再次保存覆盖同名文件。它保存的是表格当前内容,不是自动追加整段视频的全部历史预测。

若启动后没有检测框,先检查输入、权重路径和置信度设置;若保存失败,检查表格有无内容与输出路径写权限。这样可以区分预测、显示和文件写入各自的问题。

验证模型并比较三个版本

python val.py加载本版best.pt,设置split=val、conf=0.001、iou=0.60,输入640、batch16,输出总体和分类别评价结果。

模型PrecisionRecallmAP50mAP50-95
YOLOv8s74.15%67.43%75.11%56.31%
YOLO11s81.67%74.89%83.28%63.23%
YOLO26s82.82%80.41%87.12%65.41%

上表来自各版evaluation_metrics.json。Precision观察预测正确性,Recall观察目标召回情况,mAP50-95综合多个框匹配严格程度;这些数值属于验证集复评,不能写成测试集成绩。

矩阵横轴为真实类别,纵轴为预测类别。总体指标之外,可以结合非对角线与背景相关项继续检查误分类、误检或漏检。界面默认conf0.5、iou0.5,与评估参数用途不同。

PR曲线与逐图验证

同一复评目录的BoxPR_curve.png展示Precision与Recall的变化关系。图例0.833是YOLO11的mAP50四舍五入,详细数值保留上表83.28%。

横轴是Recall、纵轴是Precision,灰线是类别曲线,蓝线为总体展示。定位问题时,总体表用于版本比较,曲线用于看阈值变化下的取舍,混淆矩阵用于查看类别错误,三者各有用途。

val_batch0_pred.jpg与前文val_batch0_labels.jpg使用同一批图像,可以按文件名对照。预测图里的类别旁有置信度,不能与真实标签混为一谈。

逐图核查时先看框的位置,再看类别与置信度,最后找真实标注存在而预测未出现的目标。先定位到样本和错误类型,再调整对应环节。修改模型后保留同一批检查图,便于比较新旧结果。

完整包的文件位置和版本范围

主要目录如下,训练材料、运行材料与使用说明都能在各自位置找到:

项目根目录/ ├─ main.py / ui.py / ui/ 界面入口与组件 ├─ 项目配置.yaml 权重路径、阈值、中文类别 ├─ config_utils.py 配置读取与路径解析 ├─ myvoc.yaml 45类数据集定义 ├─ datasets/dataset/ images与labels及数据划分 ├─ train.py / val.py / predict.py ├─ runs/train/ 训练曲线与weights/best.pt ├─ runs/val/ 复评指标与混淆矩阵 ├─ test_images/ / test_video.mp4 ├─ outputs/ 检测结果CSV ├─ 数据指标图表/ 架构及数据统计图 └─ 【打开后必看-带你一步步运行使用】/

当前提供三个s规模基础版本,均有代码、数据、权重及训练验证产物。YOLO11可对应本文演示,YOLOv8用于版本对照,YOLO26在本次验证中的总体指标较高;版本比较采用上表的同一验证口径。

项目适合目标检测课程设计、三版本实验与PyQt5开发练习。阅读源码时,可以按数据定义、训练、权重复评、界面推理和结果保存依次运行,检查每一阶段的输出。

项目代码获取

完整资料包含源码、45类数据集、三版本权重、实验结果、测试素材与使用说明。同一项目库还可以查看其他视觉项目方向。

https://smallerkong.com/s/cs-yolo-traffic-8c51bc
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 18:44:52

Python爬虫实战:打造网页快照归档器,用XPath提取正文与长图截图

最近总在整理自己的收藏夹,发现一个很扎心的事实:很多当年认真保存的文章,链接已经打不开了;有些技术文档还活着,但页面被改版得面目全非,旧版本再也找不回来。我后来琢磨了一个Python爬虫小项目&#xff0…

作者头像 李华
网站建设 2026/10/8 18:44:11

IDA自动命名规则全解析:读懂sub_、loc_与off_前缀,快速上手逆向分析

每次拿到一个陌生二进制,第一件事就是按F5看伪代码。可屏幕刷出来满屏的sub_401000、loc_4082A0、byte_4134DC时,多少人会头皮发麻?这些名字看着像乱码,其实它们是 IDA 自动生成的默认命名规则,一套信息密度极高的“地…

作者头像 李华
网站建设 2026/10/8 18:41:48

技术专家路线被低估?真正的影响力来自让价值被看见

去年和一个做后端架构的朋友吃饭,他诉苦说自己在技术专家这条线上干了快十年,从普通开发一路做到架构师,结果年初绩效评定时,领导给他的反馈是“技术深度没问题,但影响力不够”——理由是没有带过完整团队,…

作者头像 李华
网站建设 2026/10/8 18:41:14

观《伏羲》纪录片 ——以“三生”之眼看华夏文明的精神原乡?

“文明算法 体”CA辅助创作:2026年的中秋、国庆几天时间,观看了央视纪录片《伏羲》。六集篇幅,沿着文明萌发、生长、流变的脉络,完成了一次对中华民族人文始祖的寻根之旅。葫三生作为一个关注伏羲、三生原理的学习研究者&#xff…

作者头像 李华
网站建设 2026/10/8 18:40:04

0元搭了240篇文章的AI知识库,比付费版查得更准

每个月续费的时候我都会犹豫一下。打开账单,那个 AI 知识库会员又扣了三百多块。不多,但每次看到这笔钱,我心里都会冒出一个念头:这个月我打开过它几次?答案是:不超过三次。而且其中两次搜出来的东西&#…

作者头像 李华