基于YOLOv8的行人车辆检测系统
一、项目简介
本项目为《基于YOLOv8的行人车辆检测系统》,围绕“行人”和“车辆”两类目标,完成了从数据集整理、模型训练、参数调优、训练结果可视化,到检测系统集成与交互界面开发的一整套流程。
项目不仅实现了基于 YOLOv8 的目标检测训练,还基于 PyQt6 开发了桌面端检测系统,支持图片识别、视频识别、摄像头识别、检测历史管理、模型管理和训练指标展示等功能,能够体现深度学习项目从算法到应用落地的完整过程。
二、项目目标
- 构建一个面向行人与车辆检测任务的多目标检测系统。
- 基于 YOLOv8 完成目标检测模型训练与评估。
- 将训练完成的最佳权重集成到桌面系统中,实现可视化检测。
- 支持中文路径环境下的数据加载、模型训练和结果保存。
三、数据集构建与处理
3.1 数据集类别
本项目数据集共包含 2 个检测类别:
| 类别编号 | 类别名称 | 中文含义 |
|---|---|---|
| 0 | person |
行人 |
| 1 | car |
车辆 |
3.2 数据集结构
数据集按照 YOLO 目标检测标准目录组织:
data/
├── data.yaml
├── images/
│ ├── train/
│ └── val/
└── labels/
├── train/
└── val/
3.3 数据集规模
经统计,本项目数据集规模如下:
| 数据划分 | 图片数量 | 标注数量 | 图片格式 |
|---|---|---|---|
训练集 train |
4463 | 4463 | .jpg |
验证集 val |
496 | 496 | .jpg |
| 总计 | 4959 | 4959 | .jpg |
训练集与验证集比例约为 9:1,适合进行模型训练与验证评估。
3.4 标注格式
标注采用标准 YOLO 格式,每个标签文件对应一张图片,每一行表示一个目标:
<class_id> <x_center> <y_center> <width> <height>
说明:
- 坐标均为相对归一化坐标。
class_id=0表示行人,class_id=1表示车辆。- 标签文件与图片文件一一对应,便于训练时自动匹配。
3.5 数据处理特点
- 使用
data/data.yaml统一配置数据集路径与类别信息。 - 训练脚本运行时会自动生成临时
yaml配置文件,将相对路径转换为绝对路径。 - 针对 Windows 中文路径场景做了兼容处理,避免因路径中含中文导致数据集加载失败。
- 训练集与验证集分目录管理,便于训练、评估和后续扩展。
四、模型训练过程
4.1 训练模型
本项目采用 YOLOv8n 作为基础模型,使用官方预训练权重 yolov8n.pt 进行迁移学习训练。
选择 YOLOv8n 的原因:
- 模型轻量,推理速度快。
- 适合桌面端系统集成与实时检测。
- 在中小规模数据集上能够较好平衡精度与效率。
4.2 训练流程
项目训练流程如下:
- 整理数据集目录,准备
images/train、images/val、labels/train、labels/val。 - 编写
data/data.yaml,定义数据路径与类别名称。 - 在
config/train_config.py中配置训练超参数。 - 在
train.py中调用ultralytics.YOLO启动训练。 - 将所有训练产物统一保存到
train_result/目录下。 - 训练结束后读取
results.csv,生成各项指标可视化图。 - 使用最佳权重
best.pt集成到 PyQt6 检测系统中。
4.3 训练参数
核心训练参数如下:
| 参数 | 值 |
|---|---|
| 模型 | yolov8n.pt |
| 训练轮数 | 100 |
| 批次大小 | 16 |
| 输入尺寸 | 640 |
| 数据加载线程 | 4 |
| 优化器 | AdamW |
初始学习率 lr0 |
0.001 |
最终学习率系数 lrf |
0.01 |
| 权重衰减 | 0.0005 |
早停轮数 patience |
50 |
| 保存周期 | 10 |
4.4 数据增强策略
为提升模型泛化能力,训练阶段启用了以下增强参数:
| 增强方式 | 参数值 |
|---|---|
| Mosaic | 1.0 |
| MixUp | 0.0 |
随机旋转 degrees |
0.0 |
平移 translate |
0.1 |
缩放 scale |
0.5 |
垂直翻转 flipud |
0.0 |
水平翻转 fliplr |
0.5 |
| HSV-H | 0.015 |
| HSV-S | 0.7 |
| HSV-V | 0.4 |
4.5 训练耗时
根据 results.csv 最后一轮记录,100 轮训练总耗时约为:
3449.3 s- 约
57.5 分钟
五、模型训练结果与指标分析
5.1 最佳结果
根据训练结果文件 train_result/pedestrian_vehicle_detection/results.csv,最佳结果出现在第 87 轮:
| 指标 | 数值 |
|---|---|
| Precision | 0.7015 |
| Recall | 0.5335 |
| mAP@0.5 | 0.5988 |
| mAP@0.5:0.95 | 0.3167 |
| Val Box Loss | 1.30381 |
| Val Cls Loss | 0.67313 |
5.2 指标说明
Precision:预测为目标的结果中,真正为目标的比例,反映误检情况。Recall:所有真实目标中,被模型成功检测出来的比例,反映漏检情况。mAP@0.5:在 IoU=0.5 条件下的平均精度,是目标检测中常用核心指标。mAP@0.5:0.95:在更严格的多个 IoU 阈值下的平均精度,更全面反映模型检测能力。Box Loss:边界框回归误差。Cls Loss:分类误差。DFL Loss:分布焦点损失,帮助边界框定位更准确。
5.3 结果分析
- 模型在
mAP@0.5上达到0.5988,说明在行人和车辆检测任务上已具备较好的检测能力。 Precision高于Recall,说明当前模型整体误检控制较好,但仍存在一定漏检空间。mAP@0.5:0.95明显低于mAP@0.5,表明模型在更严格定位精度下仍有进一步优化空间。- 从训练曲线看,损失整体稳定下降,指标在中后期趋于平稳,训练过程基本收敛。
六、训练结果可视化图说明
项目基于训练结果生成了独立指标图,保存在:
train_result/pedestrian_vehicle_detection/metric_charts/
当前生成的图包括:
| 文件名 | 含义 |
|---|---|
01_box_loss.png |
训练集与验证集 Box Loss 变化趋势 |
02_cls_loss.png |
训练集与验证集 Cls Loss 变化趋势 |
03_dfl_loss.png |
训练集与验证集 DFL Loss 变化趋势 |
04_precision.png |
Precision 随 Epoch 变化趋势 |
05_recall.png |
Recall 随 Epoch 变化趋势 |
06_mAP50.png |
mAP@0.5 随 Epoch 变化趋势 |
07_mAP50_95.png |
mAP@0.5:0.95 随 Epoch 变化趋势 |
08_learning_rate.png |
学习率衰减曲线 |
这些图的作用如下:
- 观察损失是否稳定下降,判断训练是否收敛。
- 观察
Precision、Recall、mAP的变化趋势,分析模型效果。 - 通过学习率曲线辅助理解优化器在训练过程中的调整情况。
- 为后续参数调优、模型替换和实验对比提供可视化依据。
七、系统功能设计
本项目在训练完成后,将最佳模型权重集成到桌面端检测系统中,形成完整应用。
当前系统主要功能包括:
- 登录/注册界面。
- 图片检测:加载单张图片,显示检测结果、类别统计、置信度分布、检测详情表格。
- 视频检测:对视频逐帧检测,显示实时检测结果与累计统计。
- 摄像头检测:实时打开摄像头进行目标检测,并支持截图保存。
- 检测历史:记录并查看图片、视频、摄像头检测历史。
- 模型管理:切换模型权重、设置置信度阈值与 IoU 阈值。
- 指标展示:可视化展示训练曲线与核心指标。
八、系统集成过程
本项目不仅完成了深度学习训练,还完成了检测系统的集成开发,主要体现为以下几个阶段:
8.1 数据集构建与处理阶段
- 整理图片与标签目录。
- 配置类别和路径。
- 处理中文路径兼容问题。
- 统一训练与验证集结构。
8.2 模型训练与调优阶段
- 基于 YOLOv8n 预训练权重进行迁移学习。
- 设置训练轮数、批次大小、输入尺寸、优化器与学习率。
- 使用数据增强提高泛化能力。
- 通过
results.csv和指标图分析模型表现。 - 根据 Precision、Recall、mAP 等指标选择最佳权重。
8.3 系统集成与功能开发阶段
- 将
best.pt封装为检测器模块。 - 使用
PyQt6构建可交互桌面界面。 - 使用
OpenCV处理图像、视频和摄像头数据流。 - 使用
Matplotlib展示训练指标与置信度分布。 - 使用
SQLite保存用户信息和检测历史。
九、项目技术栈
本项目采用的主要技术如下:
| 类别 | 技术 |
|---|---|
| 开发语言 | Python 3.9 |
| 深度学习框架 | PyTorch |
| 检测模型 | Ultralytics YOLOv8 |
| 图形界面 | PyQt6 |
| 图像/视频处理 | OpenCV |
| 数值计算 | NumPy |
| 数据分析 | Pandas |
| 可视化 | Matplotlib |
| 配置解析 | PyYAML |
| 本地数据存储 | SQLite |
十、项目结构
项目主要结构如下:
c150/
├── app.py
├── train.py
├── visualize.py
├── config/
│ └── train_config.py
├── data/
│ ├── data.yaml
│ ├── images/
│ │ ├── train/
│ │ └── val/
│ └── labels/
│ ├── train/
│ └── val/
├── train_result/
│ └── pedestrian_vehicle_detection/
│ ├── weights/
│ │ ├── best.pt
│ │ └── last.pt
│ ├── results.csv
│ ├── args.yaml
│ └── metric_charts/
├── ui/
│ ├── login_window.py
│ ├── main_window.py
│ └── pages/
│ ├── image_page.py
│ ├── video_page.py
│ ├── camera_page.py
│ ├── history_page.py
│ ├── model_page.py
│ └── metrics_page.py
└── utils/
├── db.py
├── detector.py
├── mpl_zh.py
├── styles.py
└── workers.py
各模块职责:
train.py:负责训练入口与训练产物保存。visualize.py:负责根据results.csv生成独立指标图。config/train_config.py:集中管理训练超参数。utils/detector.py:封装 YOLOv8 推理与结果绘制。ui/:实现系统界面与功能页面。train_result/:保存权重、训练日志、图表和指标结果。
十一、运行说明
11.1 模型训练
python train.py
11.2 指标图生成
python visualize.py
11.3 系统启动
python app.py
十二、总结
本项目完成了一个较完整的深度学习目标检测应用开发流程,既包括数据集组织、模型训练、参数调优、训练结果分析,也包括桌面系统的功能开发与模型集成。通过将 YOLOv8 训练结果与 PyQt6 可视化界面结合,项目实现了“算法训练 + 应用落地”的完整闭环,具有较好的工程实践意义与展示价值。
















AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)