基于 YOLOv8 的交通标志识别系统一、项目简介本项目以清华大学与腾讯联合发布的 TT100K 数据集为基础采用 YOLOv8n 模型完成交通标志的训练与推理并基于 PyQt6 开发了一套完整的桌面端可视化识别系统。整个开发流程涵盖数据集构建与处理、模型训练与调优、系统集成与功能开发三个核心阶段可识别限速牌、禁止标志、指示标志、警告标志等共 45 种常见中国交通标志。二、数据集2.1 数据集来源TT100KTsinghua-Tencent 100K由清华大学与腾讯联合发布是目前规模最大的中国道路交通标志检测数据集之一图片均来源于腾讯街景实拍具备较强的场景多样性与实际应用价值。2.2 数据规模项目数值图片总数约 100,000 张单图分辨率2048 × 2048 像素含标志样本数约 30,000 张标注实例总数约 100,000 个本项目使用类别数45 种训练集 / 验证集 / 测试集按官方划分2.3 类别说明本项目选取了数据集中频次较高的 45 种标志进行训练按功能分为以下几类限速系列plpl5、pl20、pl30、pl40、pl50、pl60、pl70、pl80、pl100、pl120禁止系列pp3、p5、p6、p10、p11、p12、p13、p19、p23、p26、p27、pn、pne、pg限速解除pmpm20、pm30、pm55指示系列ii2、i2r、i4、i4l、i5、ip最低限速ilil60、il80、il100限高系列phph4、ph4.5、ph5警告系列ww13、w32、w55、w57、w59其他pr402.4 数据预处理原始数据集已转换为 YOLO 格式每张图片对应一个.txt标注文件格式为类别 cx cy w h坐标归一化至 0-1目录结构如下TT100K-YOLO格式/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ └── labels/ ├── train/ ├── val/ └── test/训练时还使用了以下数据增强策略以提升模型在复杂道路场景下的泛化能力增强方式参数HSV 色调抖动h0.015, s0.7, v0.4随机水平翻转概率 0.5随机缩放scale0.5随机平移translate0.1Mosaic 拼接概率 1.0三、模型训练3.1 基础架构选用 YOLOv8nnano作为骨干网络在 ImageNet 预训练权重基础上进行迁移学习。YOLOv8n 参数量极小推理速度快适合部署在边缘设备或对实时性有要求的场景中。3.2 训练参数参数值基础模型yolov8n.pt训练轮次epochs100批次大小batch16输入分辨率imgsz640 × 640优化器SGD初始学习率lr00.01最终学习率lrf0.01动量momentum0.937权重衰减weight_decay0.0005预热轮次warmup_epochs3预热动量warmup_momentum0.8早停耐心值patience20训练设备GPUCUDA混合精度AMP开启NMS IoU 阈值0.73.3 损失函数YOLOv8 的总损失由三部分加权构成Box Loss边框回归损失权重 7.5采用 CIoU约束预测框与真实框的位置精度Cls Loss分类损失权重 0.5交叉熵损失衡量类别预测正确率DFL Loss分布焦点损失权重 1.5对边框边缘分布建模提升定位精度3.4 学习率策略训练前 3 个 epoch 执行线性 Warmup使学习率从 0 平滑上升至 0.01此后按余弦退火方式逐步衰减最终收敛至接近初始学习率乘以 lrf 的数值防止后期震荡。四、训练指标以下为模型在验证集上的最优指标取各轮次峰值指标数值mAP5073.3%mAP50-9555.2%Precision精确率75.2%Recall召回率65.8%mAP50IoU 阈值为 0.5 时的平均精度反映模型整体检测能力mAP50-95在 0.5~0.95 多个 IoU 阈值下的均值评估定位精度更严格Precision所有预测为正样本中真实为正的比例越高误检越少Recall所有真实正样本中被成功检测到的比例越高漏检越少训练从第 1 个 epoch 的 mAP50≈6.3% 出发经过约 80 个 epoch 基本收敛最终稳定在 mAP50≈73%说明迁移学习与增强策略组合对该数据集适配良好。五、可视化图说明训练完成后运行目录runs/train/tt100k_yolov8/下会生成以下可视化文件文件名含义results.png综合训练曲线包含各损失与 mAP 随 epoch 的变化趋势training_loss.png训练集三项损失box/cls/dfl的变化曲线validation_loss.png验证集三项损失的变化曲线曲线与训练集接近说明无明显过拟合mAP_curves.pngmAP50 与 mAP50-95 随训练进程的上升曲线P_curve.png不同置信度阈值下 Precision 的变化反映误检风险R_curve.png不同置信度阈值下 Recall 的变化反映漏检风险PR_curve.pngPrecision-Recall 曲线面积即 AP越靠近右上角越好F1_curve.pngF1 分数随置信度变化的曲线峰值对应最佳置信度阈值confusion_matrix.png混淆矩阵绝对数值展示各类别的预测分布confusion_matrix_normalized.png归一化混淆矩阵按行归一化后更直观对比各类别准确率labels.jpg数据集标注分布图含类别频次直方图与边框中心/尺寸热图labels_correlogram.jpg标注属性相关性矩阵分析 cx/cy/w/h 之间的分布关系learning_rate.png三组参数组pg0/pg1/pg2的学习率调度曲线box_loss_comparison.png训练集与验证集 box_loss 的对比曲线detection_metrics.pngPrecision、Recall、mAP 三条曲线并列展示precision_recall_trajectory.pngPrecision 与 Recall 随 epoch 的轨迹对比training_dashboard.png训练全局仪表板汇总所有关键指标final_metrics_summary.png最终最优指标的柱状图汇总train_batch*.jpg随机训练批次样图含标注框用于检查数据增强效果val_batch*_labels.jpg验证集真实标签可视化val_batch*_pred.jpg验证集模型预测结果可视化与 labels 对比可直观判断检测质量六、系统功能识别系统基于 PyQt6 开发采用深空蓝主题提供完整的图形界面操作体验包含以下六个功能模块图片识别支持文件选择与拖拽导入一键触发 YOLOv8 推理结果以标注图、统计摘要表、详细数据表含坐标、面积、置信度及置信度分布直方图四种形式呈现并可将标注图与识别结果分别导出为图片文件和 CSV 表格。视频识别加载本地视频文件后可指定每 N 帧执行一次推理以平衡性能与帧率实时渲染带标注的视频帧右侧同步显示当前帧统计与累计检测数据支持导出当前帧为图片。摄像头识别通过摄像头 ID 连接本地摄像头实时推流检测支持一键开关检测模式、截图保存并可将本次会话统计写入历史记录。检测历史所有检测结果均持久化至本地 SQLite 数据库历史页面支持按类型筛选图片/视频/摄像头、关键词搜索、导出 CSV 及清空操作点击任一行可展开详细记录。模型管理可浏览并替换权重文件异步验证模型是否可正常加载支持动态调整置信度阈值、IoU 阈值、最大检测数等推理参数保存后即时生效。指标展示自动读取runs/train/tt100k_yolov8/results.csv以交互式图表展示训练曲线训练/验证损失、mAP、P/R及最佳指标柱状图汇总。七、技术栈类别技术深度学习框架PyTorch 2.x目标检测模型Ultralytics YOLOv8图像处理OpenCV数据分析Pandas、NumPy可视化Matplotlib、Seaborn桌面 UI 框架PyQt6数据库SQLite内置运行环境Python 3.9八、项目结构c108/ ├── app.py # 程序入口 ├── login_window.py # 登录/注册窗口 ├── main_window.py # 主窗口侧边栏 页面堆栈 ├── train_yolov8.py # 模型训练脚本 ├── data_tt100k.yaml # 数据集配置文件 ├── requirements.txt # 依赖列表 │ ├── pages/ # 各功能页面 │ ├── image_page.py # 图片识别页 │ ├── video_page.py # 视频识别页 │ ├── camera_page.py # 摄像头识别页 │ ├── history_page.py # 检测历史页 │ ├── model_page.py # 模型管理页 │ └── metrics_page.py # 训练指标展示页 │ ├── utils/ # 工具模块 │ ├── styles.py # QSS 样式定义 │ ├── database.py # SQLite 数据库操作 │ ├── detector.py # YOLO 推理线程图片/视频/摄像头 │ └── helpers.py # 公共工具函数 │ ├── TT100K-YOLO格式/ # 数据集YOLO 格式 │ ├── images/train|val|test/ │ └── labels/train|val|test/ │ ├── runs/train/tt100k_yolov8/ # 训练输出目录 │ ├── weights/best.pt # 最优权重默认加载 │ ├── weights/last.pt # 最后轮次权重 │ ├── results.csv # 各 epoch 指标记录 │ └── *.png / *.jpg # 可视化图表 │ └── data/ # 运行时生成SQLite 数据库 └── app.db九、启动教程9.1 安装依赖pipinstall-rrequirements.txt9.2 准备数据集仅训练时需要将 TT100K 数据集整理为 YOLO 格式后放置于项目根目录的TT100K-YOLO格式/文件夹中目录结构与data_tt100k.yaml中的配置保持一致。9.3 训练模型可选如需重新训练运行python train_yolov8.py训练完成后最优权重自动保存至runs/train/tt100k_yolov8/weights/best.pt。9.4 启动识别系统python app.py默认账号admin密码admin123首次使用可直接登录也可在登录页注册新账号。系统启动后自动加载runs/train/tt100k_yolov8/weights/best.pt作为默认模型可在【模型管理】页面切换为其他权重文件。本项目为个人原创结构清晰功能完整适合计算机视觉方向课程设计、毕业设计和项目演示使用。有定制化需求可以评论或私信作者。作者原创项目地址michael-jay.pages.dev/projects.html