基于 YOLOv8 的交通违规检测系统(全套源码+数据集)

1. 项目简介

本系统以 YOLOv8 为核心检测引擎,面向城市道路监控场景,实现对行人、非机动车、摩托车等目标的交通违规行为自动检测与分类。系统支持图片、视频、实时摄像头三种输入模式,并配有完整的 PyQt6 图形化操作界面,涵盖检测、统计、历史管理、指标可视化等功能,完整还原了深度学习项目从数据到系统的落地全链路。

可检测的违规类型:

类别 中文含义
Crossing_Violation 路口闯红灯
Crosswalk_Violation 斑马线违规
Helmet_Violation 骑行未戴头盔
Normal 正常合规行为
Passenger_Violation 非机动车违规载人
Pedestrian_Violation 行人综合违规
Trafficlight_Violation 不遵守交通灯信号

2. 深度学习开发流程

原始数据采集
    │
    ▼
数据标注(Roboflow)
    │
    ▼
数据增强与集成(翻转 / 旋转 / 亮度 / 裁剪 / 色调抖动)
    │
    ▼
数据集划分(训练集 4,666 张 / 验证集 390 张)
    │
    ▼
模型选型(YOLOv8s 预训练权重迁移学习)
    │
    ▼
超参数配置(优化器 AdamW / 学习率 / 批大小 / 数据增强策略)
    │
    ▼
模型训练(100 Epochs,GPU 加速)
    │
    ▼
训练过程监控(Loss 曲线 / mAP 曲线 / 学习率衰减)
    │
    ▼
模型评估(精确率 / 召回率 / mAP@50 / mAP@50-95 / F1)
    │
    ▼
最优权重保存(best.pt)
    │
    ▼
系统集成(PyQt6 UI + 多模态检测 + 历史管理 + 指标展示)

3. 数据集详情

3.1 基本信息

项目 内容
数据集来源 城市道路交通监控视频帧 + 静态场景图片
标注工具 Roboflow(在线标注与增强平台)
标注格式 YOLO 格式(.txt,归一化中心坐标)
检测类别数 7
训练集样本数 4,666 张
验证集样本数 390 张
总样本数 5,056 张
数据增强倍率 约 3 倍(每张原图生成 3 个增强版本)

3.2 类别定义

ID 英文类名 中文含义 场景说明
0 Crossing_Violation 路口闯红灯 非机动车 / 行人在路口闯红灯
1 Crosswalk_Violation 斑马线违规 不走斑马线或在斑马线处违规
2 Helmet_Violation 未戴头盔 骑摩托车 / 电动车时未佩戴头盔
3 Normal 正常合规 合规骑行或正常通行
4 Passenger_Violation 违规载人 非机动车超载乘客
5 Pedestrian_Violation 行人综合违规 行人闯红灯等综合性违规
6 Trafficlight_Violation 交通灯违规 不遵守红绿灯信号通行

3.3 数据来源构成

文件名前缀 内容说明
bicycle_N_jpg 自行车 / 电动车场景(正常)
bicycle_anormal-K-N_jpg 自行车违规场景(K=1~6 代表 6 种违规子类型)
bicycle_normal-K-N_jpg 自行车正常场景(多角度 / 多光照)
bicycle_no5_N_jpg 不戴头盔的骑行场景
motorcycle_N_jpg 摩托车场景
motorcycle_no5_N_jpg 摩托车不戴头盔
scooter_normal-K-N_jpg 踏板车多场景正常行驶
Passenger_N_jpg 违规载人
Pedestrian_ES_N_JPG 行人违规
T000XXX_...-mp4_XXXXXX_jpg 交通监控视频帧提取(含各类违规时刻)

3.4 标注格式说明

每个 .txt 文件与图片一一对应,每行记录一个目标:

<class_id> <cx> <cy> <w> <h>
  • class_id:类别编号(0~6)
  • cx, cy:目标中心点(归一化至 0~1)
  • w, h:目标框宽高(归一化至 0~1)

3.5 数据增强策略

通过 Roboflow 平台对原始图片实施以下增强,提升模型泛化能力:

  • 水平翻转(50% 概率)
  • 亮度与对比度随机扰动
  • 随机旋转与剪切
  • 色调(HSV)抖动
  • Mosaic 拼接增强(概率 1.0)
  • 随机擦除(概率 0.4)

4. 模型训练与调优

4.1 模型选型

采用 YOLOv8s(Small 规格)作为基础架构,在 COCO 预训练权重基础上进行迁移学习。选用 YOLOv8s 的原因:

  • 参数量适中(约 11M),平衡检测精度与推理速度
  • 支持端对端训练,无需复杂后处理
  • 原生支持 YOLO 格式数据集,接入成本低

4.2 训练参数配置

参数 说明
基础模型 yolov8s.pt COCO 预训练权重
训练轮数 (Epochs) 100 充分收敛
批大小 (Batch) 16 显存与速度平衡
输入尺寸 (imgsz) 640 × 640 标准 YOLO 输入分辨率
优化器 AdamW 自适应学习率,收敛更稳定
初始学习率 (lr0) 0.01 预热阶段起始值
终止学习率 (lrf) 0.01 余弦退火终点倍率
动量 (momentum) 0.937 Adam β1 参数
权重衰减 0.0005 L2 正则化,防止过拟合
预热轮数 3 前 3 轮线性预热学习率
混合精度 (AMP) 开启 加速训练、减少显存占用
数据加载线程 4 并行预处理加速
IoU 阈值 0.7 NMS 时判断重叠框的阈值
早停耐心 (patience) 100 与 Epochs 相同,不触发早停
随机种子 0 保证实验可复现

4.3 训练过程

  • 预热阶段(1~3 轮):学习率从接近 0 线性增长至 lr0,防止早期训练震荡。
  • 主训练阶段(4~90 轮):学习率按余弦退火策略逐步下降,Loss 平稳收敛,mAP 持续提升。
  • 精调阶段(91~100 轮):关闭 Mosaic 增强(最后 10 轮),学习率降至极低,进一步精调边界框回归。
  • 最优权重:训练完成后自动保存 best.pt(验证集 mAP50 最高的权重)和 last.pt(最后一轮权重)。

4.4 最终训练指标(第 100 轮)

指标 数值
Precision(精确率) 0.844
Recall(召回率) 0.824
mAP@50 0.865
mAP@50-95 0.483
训练总时长 约 5,735 秒(≈ 95.6 分钟)


5. 训练指标说明

指标 含义
Box Loss 边界框回归损失(DFL Loss),衡量预测框与真实框的位置偏差,越小越好
Cls Loss 分类损失,衡量类别预测误差,越小越好
DFL Loss 分布焦点损失(Distribution Focal Loss),用于更精确地回归边界框坐标
Precision 精确率 = TP / (TP + FP),预测为正样本中真正正样本的比例,越高越好
Recall 召回率 = TP / (TP + FN),真实正样本中被正确检测出的比例,越高越好
mAP@50 在 IoU=0.5 阈值下的平均精度均值,通用检测精度指标,越高越好
mAP@50-95 在 IoU=0.5~0.95(步长 0.05)下的平均精度均值,更严格的精度评估,越高越好
F1 Score Precision 与 Recall 的调和平均,综合评估分类性能,越高越好
Learning Rate 学习率变化曲线,反映优化器调度策略(预热 → 余弦退火)

6. 可视化图表含义

系统内置和独立脚本共生成以下图表,均保存在 train_result/traffic_violation_v1/charts/ 目录:

图表文件 含义说明
01_box_loss.png 训练集与验证集的边界框回归损失对比曲线。两线同步下降表示模型正常收敛;验证集 Loss 明显高于训练集则提示过拟合
02_cls_loss.png 训练集与验证集的分类损失曲线。反映模型对 7 类违规行为的识别能力提升过程
03_dfl_loss.png 分布焦点损失曲线。DFL Loss 下降说明边界框坐标预测越来越精准
04_precision.png 精确率随训练轮次的变化。曲线上标注了最优精确率所在的 Epoch
05_recall.png 召回率随训练轮次的变化。与精确率共同评估检测的全面性
06_map50.png mAP@50 曲线,是最常用的目标检测综合评估指标,标注了最佳点
07_map50_95.png mAP@50-95 曲线,对定位精度要求更高,数值相比 mAP@50 偏低属正常现象
08_f1_score.png F1 综合得分曲线(由 Precision 和 Recall 计算得出),兼顾精确率与召回率
09_learning_rate.png 学习率衰减曲线。可观察预热阶段(前 3 轮快速上升)和余弦退火衰减过程

7. 系统功能介绍

系统采用 PyQt6 构建图形化界面,通过侧边栏导航切换以下六大功能模块:

7.1 图片识别

  • 支持拖拽或文件选择打开图片(JPG / PNG / BMP / WebP)
  • 一键执行 YOLOv8 检测,图上以中文标签 + 彩色边框标注结果
  • 统计卡片展示:检测目标总数、类别数、平均置信度、最高置信度
  • 双 Tab 展示:类别分布表 + 目标详细数据表(含坐标、面积)
  • 支持导出标注图片和检测结果 CSV 文件

7.2 视频识别

  • 打开本地视频文件(MP4 / AVI / MOV / MKV)
  • 可设置每 N 帧检测一次,兼顾速度与精度
  • 实时显示标注画面 + 进度条
  • 右侧实时统计当前帧目标及累计检测情况
  • 检测完成自动写入历史记录

7.3 摄像头识别

  • 选择摄像头编号(0~10),一键启动
  • 实时采集画面并执行目标检测
  • 支持检测开关切换(不检测时仅预览)
  • 截图功能:保存当前帧至 screenshots/ 目录
  • 支持将本次会话结果保存至历史记录

7.4 检测历史

  • 汇总所有图片 / 视频 / 摄像头检测记录
  • 支持按类型筛选(图片 / 视频 / 摄像头)和关键词搜索
  • 点击记录查看详情(时间、模型、类别分布等)
  • 支持导出历史数据为 CSV 文件
  • 支持一键清空历史

7.5 模型管理

  • 支持浏览并切换不同的模型权重文件(.pt / .onnx
  • 自动验证模型文件是否存在
  • 可视化调整推理参数:置信度阈值、IoU 阈值、最大检测数
  • 模型信息展示:路径、类别数、类别列表(中英文对照)

7.6 指标展示

  • 直接读取训练产生的 results.csv,内嵌 Matplotlib 图表
  • 训练曲线:Box Loss、Cls Loss、DFL Loss(训练 vs 验证)、综合性能曲线(mAP / P / R / F1)
  • 指标汇总:末轮关键指标统计卡片 + 综合性能柱状图 + 学习率衰减曲线
  • 支持重新加载数据刷新图表

7.7 登录 / 注册

  • 浅色渐变风格登录界面,支持账号注册
  • 密码 SHA-256 加密存储(data/users.json
  • 注册成功后自动跳转登录页
  • 默认账号:admin / admin123


8. 项目技术栈

类别 技术 / 库
深度学习框架 Ultralytics YOLOv8(基于 PyTorch)
图形界面 PyQt6
图像处理 OpenCV-Python、Pillow
数据处理 Pandas、NumPy
可视化 Matplotlib(嵌入 PyQt6 的 QtAgg 后端)
数据增强 Roboflow 平台
数据存储 JSON 文件(历史记录、用户信息)
开发语言 Python 3.9
运行平台 Windows 10/11(支持 GPU 加速)

9. 项目结构

c139/
│
├── app.py                          # 程序入口,初始化 PyQt6 并启动登录窗口
├── login_window.py                 # 登录 / 注册窗口
├── main_window.py                  # 主窗口(侧边栏 + 页面堆栈)
├── train.py                        # 模型训练脚本
├── visualize_results.py            # 独立训练结果可视化脚本
│
├── config/
│   ├── train_config.py             # 训练超参数集中配置
│   └── label_map.py                # 英文类别名 → 中文显示映射表
│
├── core/
│   ├── detector.py                 # YOLOv8 检测器封装(中文标注绘制)
│   ├── history_manager.py          # 检测历史记录 CRUD & CSV 导出
│   └── user_manager.py             # 用户注册 / 登录 / 密码加密
│
├── pages/
│   ├── image_page.py               # 图片识别页
│   ├── video_page.py               # 视频识别页(多线程)
│   ├── camera_page.py              # 摄像头实时识别页(多线程)
│   ├── history_page.py             # 检测历史记录页
│   ├── model_page.py               # 模型管理 & 参数设置页
│   └── metrics_page.py             # 训练指标可视化页(嵌入 Matplotlib)
│
├── utils/
│   ├── styles.py                   # 全局 QSS 样式表(浅色渐变主题)
│   ├── widgets.py                  # 公共 UI 组件(StatCard / PageHeader / Card)
│   └── data_utils.py               # 数据集工具函数
│
├── datasets/
│   ├── data.yaml                   # YOLO 数据集配置(类别 / 路径)
│   ├── train/labels/               # 训练集标注文件(4,666 个 .txt)
│   └── valid/labels/               # 验证集标注文件(390 个 .txt)
│
├── train_result/
│   └── traffic_violation_v1/
│       ├── weights/
│       │   ├── best.pt             # 验证集最优权重(系统默认加载)
│       │   └── last.pt             # 最后一轮权重
│       ├── results.csv             # 逐轮训练指标记录
│       ├── args.yaml               # 训练参数快照
│       └── charts/                 # 生成的可视化图表(9 张)
│
├── data/
│   ├── history.json                # 检测历史记录(自动生成)
│   └── users.json                  # 用户账号数据(自动生成)
│
└── screenshots/                    # 摄像头截图保存目录(自动生成)

10. 快速开始

环境依赖

pip install -r requirements.txt

启动系统

python app.py

首次启动时系统会自动加载 train_result/traffic_violation_v1/weights/best.pt(若存在),若不存在请进入【模型管理】页面手动指定权重路径。

重新训练

config/train_config.py 中修改超参数后执行:

python train.py

生成训练可视化图表

python visualize_results.py

本系统完整实现了深度学习项目从数据构建 → 模型训练 → 结果评估 → 系统集成的全流程,适用于智慧交通、城市安防等应用场景的二次开发与功能扩展。

本项目为个人原创,结构清晰,功能完整,适合计算机视觉方向课程设计、毕业设计和项目演示使用。有定制化需求可以评论或私信作者。

作者原创项目地址:michael-jay.pages.dev/projects.html

posted on 2026-08-03 16:21  Jay8059  阅读(1)  评论(0)    收藏  举报

导航