基于 YOLOv8 的交通违规检测系统

目录

  1. 项目简介
  2. 深度学习开发流程
  3. 数据集详情
  4. 模型训练与调优
  5. 训练指标说明
  6. 可视化图表含义
  7. 系统功能介绍
  8. 项目技术栈
  9. 项目结构
  10. 快速开始

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

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

相关推荐
腾视科技TENSORTEC3 小时前
私有云时代来临:AI NAS如何重塑你的数字生活
人工智能·科技·ai·nas·企业存储·ainas·家庭存储
旖-旎3 小时前
前缀和(连续数组)(7)
c++·算法·leetcode·前缀和·哈希算法
Allen_LVyingbo3 小时前
“拓扑量子计算被证伪”科学纠偏事件分析
算法·搜索引擎·全文检索·动态规划·创业创新·量子计算
马猴烧酒.3 小时前
【面试八股|操作系统】操作系统常见面试题详解笔记
java·linux·服务器·网络·数据结构·算法·eclipse
忧郁的橙子.3 小时前
13-情绪对话模型-数据工程篇、大模型微调项目实战
人工智能·情绪对话训练
雷焰财经3 小时前
首都在线MaaS+ComfyUI:重构游戏美术生产,打造行业降本提效新标杆
人工智能·重构·游戏美术
AI品信智慧数智人3 小时前
AI赋能文旅:当科技遇见诗与远方,重构旅行新体验
大数据·人工智能
喵飞云智AI研发社3 小时前
全网推广TOP5解析:技术赋能,打造高效获客新路径
大数据·人工智能
m0_743470373 小时前
C++中的状态模式高级应用
开发语言·c++·算法