一、项目简介

本项目为《基于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 训练流程

项目训练流程如下:

  1. 整理数据集目录,准备 images/trainimages/vallabels/trainlabels/val
  2. 编写 data/data.yaml,定义数据路径与类别名称。
  3. 在 config/train_config.py 中配置训练超参数。
  4. 在 train.py 中调用 ultralytics.YOLO 启动训练。
  5. 将所有训练产物统一保存到 train_result/ 目录下。
  6. 训练结束后读取 results.csv,生成各项指标可视化图。
  7. 使用最佳权重 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 学习率衰减曲线

这些图的作用如下:

  • 观察损失是否稳定下降,判断训练是否收敛。
  • 观察 PrecisionRecallmAP 的变化趋势,分析模型效果。
  • 通过学习率曲线辅助理解优化器在训练过程中的调整情况。
  • 为后续参数调优、模型替换和实验对比提供可视化依据。

七、系统功能设计

本项目在训练完成后,将最佳模型权重集成到桌面端检测系统中,形成完整应用。

当前系统主要功能包括:

  • 登录/注册界面。
  • 图片检测:加载单张图片,显示检测结果、类别统计、置信度分布、检测详情表格。
  • 视频检测:对视频逐帧检测,显示实时检测结果与累计统计。
  • 摄像头检测:实时打开摄像头进行目标检测,并支持截图保存。
  • 检测历史:记录并查看图片、视频、摄像头检测历史。
  • 模型管理:切换模型权重、设置置信度阈值与 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 可视化界面结合,项目实现了“算法训练 + 应用落地”的完整闭环,具有较好的工程实践意义与展示价值。

Logo

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

更多推荐