原创项目合集 基于 YOLOv8 的行人车辆检测系统

基于 YOLOv8 的行人车辆检测系统

一、项目概述

本项目面向道路交通场景中的行人与车辆目标检测任务,完成 YOLOv8 与 Faster R-CNN 两类检测模型的训练、评估、可视化对比,并集成 PyQt5 桌面端检测系统。系统支持图片检测、视频检测、摄像头实时检测、检测数量统计、历史记录保存以及 CSV / JSON 数据导出。

项目以行人和车辆两类目标为检测对象,围绕模型训练、效果评估、模型对比和桌面端应用四个部分展开:

  • 使用 YOLOv8s 完成单阶段目标检测训练,默认作为桌面端系统的推理模型。
  • 使用 Faster R-CNN ResNet50 FPN 完成两阶段检测模型训练,用于和 YOLOv8 进行性能对比。
  • 保存训练日志、指标 CSV、训练曲线、混淆矩阵、PR 曲线、F1 曲线等结果文件。
  • 基于 PyQt5 构建图形界面,提供图片、视频、摄像头三种检测入口。
  • 检测结果包含目标框、类别、置信度、行人数、车辆数和总目标数。

默认桌面端入口为 detection_ui.py,默认加载权重为:

runs/detect/person_car_detect/weights/best.pt

二、数据集说明

本项目使用 YOLO 标注格式的数据集,检测类别为 personcar。当前交付目录主要包含训练产物、模型权重和系统代码,若需要重新训练,需要准备或补齐 data 数据集目录。

基于 YOLOv8 的行人车辆检测系统项目截图1 基于 YOLOv8 的行人车辆检测系统项目截图1 基于 YOLOv8 的行人车辆检测系统项目截图1 基于 YOLOv8 的行人车辆检测系统项目截图2

数据集结构

Faster R-CNN 训练脚本默认读取如下目录结构,YOLOv8 训练也可按相同数据划分准备 data.yaml

data/
├── images/
│   ├── train/          # 训练集图片
│   └── val/            # 验证集图片
└── labels/
    ├── train/          # 训练集标注
    └── val/            # 验证集标注

标注格式

标注文件为 YOLO 格式,每张图片对应一个同名 .txt 文件,每行表示一个目标:

class_id x_center y_center width height

字段说明:

字段说明
class_id类别编号,0 表示行人,1 表示车辆
x_center目标框中心点横坐标,按图片宽度归一化
y_center目标框中心点纵坐标,按图片高度归一化
width目标框宽度,按图片宽度归一化
height目标框高度,按图片高度归一化

数据统计

根据当前项目中的 YOLOv8 训练日志,验证阶段数据统计如下:

统计项数值
检测类别2 类,personcar
验证集图片数4,959 张
验证集目标实例数60,875 个
行人实例数6,999 个
车辆实例数53,876 个
标注格式YOLO 归一化框格式
输入尺寸640 x 640

说明:当前 README 只记录训练日志和项目文件中能够确认的数据。若后续替换数据集,请以实际 data/ 目录和 data.yaml 为准同步更新本节。

三、模型方案

YOLOv8 检测模型

YOLOv8 是本项目桌面端默认使用的检测模型,适合实时检测场景。其整体流程如下:

输入图像
    │
    ▼
YOLOv8 Backbone 特征提取
    │
    ▼
Neck 多尺度特征融合
    │
    ▼
Detect Head 输出目标框、类别和置信度
    │
    ▼
NMS 后处理
    │
    ▼
行人 / 车辆检测结果

本项目中 YOLOv8 的主要作用:

  • 训练 personcar 两类目标检测权重。
  • 提供桌面端图片、视频和摄像头实时检测能力。
  • 输出检测框、类别标签、置信度和数量统计。
  • 生成混淆矩阵、PR 曲线、F1 曲线、训练结果曲线等可视化文件。

Faster R-CNN 检测模型

Faster R-CNN 用于模型对比实验和批量图片检测。项目采用 TorchVision 中的 Faster R-CNN ResNet50 FPN,并将分类头替换为 3 类输出:

输入图像
    │
    ▼
ResNet50 + FPN 特征提取
    │
    ▼
RPN 候选框生成
    │
    ▼
RoI Align 特征对齐
    │
    ▼
分类分支 + 边界框回归分支
    │
    ▼
置信度过滤与结果输出

Faster R-CNN 训练时会将 YOLO 标注转换为 x_min, y_min, x_max, y_max 格式,并将类别编号转换为 TorchVision 检测模型所需的标签编号,其中 0 作为背景类,1 表示行人,2 表示车辆。

四、训练过程

YOLOv8 训练流程

  1. 读取数据集配置文件 data.yaml
  2. 加载 yolov8s.pt 预训练权重。
  3. 按 640 x 640 输入尺寸进行训练。
  4. 使用 YOLOv8 默认检测损失,包括边界框损失、分类损失和 DFL 损失。
  5. 训练过程中保存 best.ptlast.pt
  6. 训练结束后在验证集上评估 Precision、Recall、mAP50、mAP50-95。

当前训练配置记录在:

runs/detect/person_car_detect/args.yaml

Faster R-CNN 训练流程

  1. 读取 data/images/traindata/labels/train 作为训练集。
  2. 读取 data/images/valdata/labels/val 作为验证集。
  3. 加载 COCO 预训练权重:
fasterrcnn/fasterrcnn_resnet50_fpn_coco-258fb6c6.pth
  1. 替换检测头,使模型输出背景、行人、车辆 3 类。
  2. 使用 SGD 优化器和 StepLR 学习率衰减策略训练 100 轮。
  3. 每轮训练后计算 Precision、Recall、F1。
  4. 按 F1 分数保存最优模型 best.pth,同时保存最后一轮模型 last.pth
  5. 输出训练日志、CSV 指标、JSON 历史记录和可视化曲线。

五、训练参数

YOLOv8 参数

参数说明
模型yolov8s.ptYOLOv8s 检测模型
训练轮数100总训练 Epoch
输入尺寸640训练和验证输入尺寸
批大小16每批图片数量
优化器autoUltralytics 自动选择
初始学习率0.01lr0
最终学习率比例0.01lrf
动量0.937SGD 动量参数
权重衰减0.0005正则化参数
预热轮数3warmup_epochs
AMP开启混合精度训练
训练设备CUDA:0训练日志记录为 RTX 3060 Laptop GPU
输出目录runs/detect/person_car_detectYOLOv8 训练结果目录

Faster R-CNN 参数

参数说明
模型Faster R-CNN ResNet50 FPNTorchVision 检测模型
类别数3背景、行人、车辆
训练轮数100总训练 Epoch
批大小4每批图片数量
优化器SGD随机梯度下降
初始学习率0.005主学习率
动量0.9SGD 动量
权重衰减0.0005正则化参数
学习率调度StepLR每 10 轮衰减
衰减系数0.1gamma
置信度阈值0.5评估和推理过滤阈值
IoU 阈值0.5匹配阈值
输出目录runs/fasterrcnn/person_car_detectFaster R-CNN 训练结果目录

六、训练结果

YOLOv8 验证结果

YOLOv8 最优权重为:

runs/detect/person_car_detect/weights/best.pt

整体结果:

指标数值
Precision0.82942
Recall0.65837
mAP500.74918
mAP50-950.45874
推理速度约 1.9 ms / image
训练耗时约 5.172 小时

分类别结果:

类别ImagesInstancesPrecisionRecallmAP50mAP50-95
person1,7126,9990.7920.5530.6510.346
car4,95453,8760.8490.7480.8240.550
基于 YOLOv8 的行人车辆检测系统项目截图1 基于 YOLOv8 的行人车辆检测系统项目截图1 基于 YOLOv8 的行人车辆检测系统项目截图2 基于 YOLOv8 的行人车辆检测系统项目截图3

Faster R-CNN 训练结果

Faster R-CNN 最优权重为:

runs/fasterrcnn/person_car_detect/weights/best.pth

最佳性能出现在第 78 轮:

指标数值
Best Epoch78
F1 Score0.7074
Precision0.7112
Recall0.7036

最终第 100 轮结果:

指标数值
F1 Score0.7046
Precision0.7089
Recall0.7004
Total Loss0.2504
Classifier Loss0.0663
Box Regression Loss0.1427
Objectness Loss0.0042
RPN Box Loss0.0371

模型对比

对比项YOLOv8Faster R-CNN结论
整体指标mAP50 = 0.7492F1 = 0.7074YOLOv8 整体得分更高
Precision0.82940.7112YOLOv8 误检更少
Recall0.65840.7036Faster R-CNN 漏检更少
应用倾向实时检测、桌面端推理离线评估、召回优先场景按场景选择

综合当前训练结果,YOLOv8 更适合作为桌面端实时检测模型;Faster R-CNN 在召回率上更高,适合对漏检更敏感的离线检测或对比实验。

七、可视化结果说明

YOLOv8 可视化文件

目录:

runs/detect/person_car_detect/
文件说明
results.png训练损失、验证损失、Precision、Recall、mAP 等指标曲线
results.csv每个 Epoch 的完整训练指标
confusion_matrix.png混淆矩阵
confusion_matrix_normalized.png归一化混淆矩阵
PR_curve.pngPrecision-Recall 曲线
P_curve.pngPrecision 随置信度变化曲线
R_curve.pngRecall 随置信度变化曲线
F1_curve.pngF1 分数随置信度变化曲线
labels.jpg标注分布可视化
labels_correlogram.jpg标注框相关性可视化
train_batch*.jpg训练批次与数据增强可视化
val_batch*_labels.jpg验证集真实标签可视化
val_batch*_pred.jpg验证集预测结果可视化

Faster R-CNN 可视化文件

目录:

runs/fasterrcnn/person_car_detect/
文件说明
training_results.png总损失、分类损失、回归损失、目标性损失、RPN 损失、Precision、Recall、F1 和学习率曲线
f1_curve.pngF1 分数变化曲线,并标注最佳轮次
results.csv每轮训练指标
training_history.json完整训练历史
training_log.txt训练日志
summary_report.txt训练结果摘要

模型对比文件

目录:

runs/comparison/
文件说明
model_comparison.pngYOLOv8 与 Faster R-CNN 指标对比图
comparison_report.txt模型对比文字报告
comparison_data.json模型对比结构化数据

八、桌面端系统功能

桌面端系统入口:

detection_ui.py

图片检测

  • 支持选择本地单张图片进行目标检测。
  • 显示带检测框的结果图。
  • 统计行人数量、车辆数量和总目标数量。
  • 展示每个检测目标的类别和置信度。
  • 图片检测结果会写入 detection_history.json
基于 YOLOv8 的行人车辆检测系统项目截图1

视频检测

  • 支持选择本地视频文件。
  • 对视频帧逐帧执行 YOLOv8 检测。
  • 实时刷新检测画面和数量统计。
  • 可在界面中停止当前检测任务。

摄像头检测

  • 支持选择摄像头编号 0、1、2。
  • 调用本机摄像头进行实时行人车辆检测。
  • 实时显示检测框、类别、置信度和数量统计。

历史记录

  • 历史记录保存在 detection_history.json
  • 支持在界面中查看检测时间、输入来源、行人数、车辆数和总数。
  • 支持导出为 CSV。
  • 支持导出为 JSON。
基于 YOLOv8 的行人车辆检测系统项目截图1

九、技术栈

类别技术
编程语言Python 3.9
深度学习框架PyTorch、TorchVision
YOLO 框架Ultralytics YOLOv8
桌面端框架PyQt5
图像处理OpenCV、Pillow
数据处理NumPy、Pandas、CSV、JSON
可视化Matplotlib
模型类型YOLOv8s、Faster R-CNN ResNet50 FPN

十、项目结构

c88/
├── detection_ui.py                         # PyQt5 桌面端主程序,默认加载 YOLOv8 best.pt
├── detection_history.json                  # 图片检测历史记录
├── train_fasterrcnn.py                     # Faster R-CNN 训练脚本
├── detect_fasterrcnn.py                    # Faster R-CNN 批量检测脚本
├── fasterrcnn_config.py                    # Faster R-CNN 训练配置
├── visualize_fasterrcnn_results.py         # Faster R-CNN 训练曲线和摘要生成脚本
├── compare_models.py                       # YOLOv8 与 Faster R-CNN 指标对比脚本
├── redraw_epoch_plots.py                   # 根据 CSV 重新绘制训练图表
├── requirements_fasterrcnn.txt             # Faster R-CNN 训练相关依赖
├── 训练日志.txt                            # YOLOv8 训练日志
├── yolov8s.pt                              # YOLOv8s 预训练权重
├── yolov8s-cls.pt                          # YOLOv8 分类权重文件
├── yolo11n.pt                              # YOLO 系列权重文件
├── yolo11m.pt                              # YOLO 系列权重文件
├── fasterrcnn/
│   └── fasterrcnn_resnet50_fpn_coco-258fb6c6.pth
│                                             # Faster R-CNN COCO 预训练权重
├── runs/
│   ├── detect/person_car_detect/
│   │   ├── weights/
│   │   │   ├── best.pt                     # YOLOv8 最优权重,桌面端默认加载
│   │   │   └── last.pt                     # YOLOv8 最后一轮权重
│   │   ├── results.csv                     # YOLOv8 每轮训练指标
│   │   └── *.png / *.jpg                   # YOLOv8 训练与验证可视化结果
│   ├── fasterrcnn/person_car_detect/
│   │   ├── weights/
│   │   │   └── best.pth                    # Faster R-CNN 最优权重
│   │   ├── results.csv                     # Faster R-CNN 每轮训练指标
│   │   ├── training_history.json           # Faster R-CNN 训练历史
│   │   ├── training_results.png            # Faster R-CNN 训练曲线
│   │   └── summary_report.txt              # Faster R-CNN 训练摘要
│   └── comparison/
│       ├── model_comparison.png            # 两类模型对比图
│       ├── comparison_report.txt           # 两类模型对比报告
│       └── comparison_data.json            # 两类模型对比数据
├── vis_output/                             # 检测可视化输出图片
└── data/                                   # 重新训练时需要准备的数据集目录
基于 YOLOv8 的行人车辆检测系统项目截图1

十一、环境准备与启动

1. 创建 Python 环境

建议使用 Python 3.9,并优先使用独立虚拟环境。

cd <项目根目录>

2. 安装依赖

先安装 Faster R-CNN 训练依赖:

python -m pip install -r requirements_fasterrcnn.txt

再安装桌面端和 YOLOv8 推理所需依赖:

python -m pip install ultralytics PyQt5 opencv-python

如需使用 GPU,请确保本机 PyTorch、CUDA 和显卡驱动版本匹配。

3. 启动桌面端系统

python .\detection_ui.py

启动后可在界面中选择:

  • 图片检测
  • 视频检测
  • 摄像头检测
  • 历史记录查看与导出

4. 重新训练 YOLOv8

如果需要重新训练 YOLOv8,请先准备数据集和 data.yaml,再执行:

yolo detect train model=yolov8s.pt data=<数据集目录>\data.yaml epochs=100 batch=16 imgsz=640 project=runs/detect name=person_car_detect

训练完成后,桌面端默认读取:

runs/detect/person_car_detect/weights/best.pt

5. 训练 Faster R-CNN

请先按 [数据集结构](#数据集结构) 准备 data/ 目录,然后执行:

python .\train_fasterrcnn.py

训练输出目录:

runs/fasterrcnn/person_car_detect/

6. Faster R-CNN 批量检测

python .\detect_fasterrcnn.py --weights runs/fasterrcnn/person_car_detect/weights/best.pth --source data/images/val --output runs/fasterrcnn/detect --conf 0.5

参数说明:

参数说明
--weightsFaster R-CNN 权重路径
--source待检测图片文件或图片目录
--output检测结果输出目录
--conf置信度阈值

7. 生成可视化和对比结果

生成 Faster R-CNN 训练图表和摘要:

python .\visualize_fasterrcnn_results.py

生成 YOLOv8 与 Faster R-CNN 对比图表:

python .\compare_models.py

根据现有 CSV 重新绘制训练图:

python .\redraw_epoch_plots.py

本项目为个人原创,结构清晰,功能完整,适合课程设计、毕业设计和个人学习使用。如需购买项目成品或定制化需求可以联系作者。

微信二维码
Jay 微信二维码