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


















