基于YOLOv8行人车辆检测系统

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

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

目录

  1. 项目概述
  2. 数据集说明
  3. 模型方案
  4. 训练过程
  5. 训练参数
  6. 训练结果
  7. 可视化结果说明
  8. 桌面端系统功能
  9. 技术栈
  10. 项目结构
  11. 环境准备与启动

项目概述

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

  • 使用 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 数据集目录。

数据集结构

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.pt

YOLOv8s 检测模型

训练轮数

100

总训练 Epoch

输入尺寸

640

训练和验证输入尺寸

批大小

16

每批图片数量

优化器

auto

Ultralytics 自动选择

初始学习率

0.01

lr0

最终学习率比例

0.01

lrf

动量

0.937

SGD 动量参数

权重衰减

0.0005

正则化参数

预热轮数

3

warmup_epochs

AMP

开启

混合精度训练

训练设备

CUDA:0

训练日志记录为 RTX 3060 Laptop GPU

输出目录

runs/detect/person_car_detect

YOLOv8 训练结果目录

Faster R-CNN 参数

参数

说明

模型

Faster R-CNN ResNet50 FPN

TorchVision 检测模型

类别数

3

背景、行人、车辆

训练轮数

100

总训练 Epoch

批大小

4

每批图片数量

优化器

SGD

随机梯度下降

初始学习率

0.005

主学习率

动量

0.9

SGD 动量

权重衰减

0.0005

正则化参数

学习率调度

StepLR

每 10 轮衰减

衰减系数

0.1

gamma

置信度阈值

0.5

评估和推理过滤阈值

IoU 阈值

0.5

匹配阈值

输出目录

runs/fasterrcnn/person_car_detect

Faster R-CNN 训练结果目录

训练结果

YOLOv8 验证结果

YOLOv8 最优权重为:

runs/detect/person_car_detect/weights/best.pt

整体结果:

指标

数值

Precision

0.82942

Recall

0.65837

mAP50

0.74918

mAP50-95

0.45874

推理速度

约 1.9 ms / image

训练耗时

约 5.172 小时

分类别结果:

类别

Images

Instances

Precision

Recall

mAP50

mAP50-95

person

1,712

6,999

0.792

0.553

0.651

0.346

car

4,954

53,876

0.849

0.748

0.824

0.550

Faster R-CNN 训练结果

Faster R-CNN 最优权重为:

runs/fasterrcnn/person_car_detect/weights/best.pth

最佳性能出现在第 78 轮:

指标

数值

Best Epoch

78

F1 Score

0.7074

Precision

0.7112

Recall

0.7036

最终第 100 轮结果:

指标

数值

F1 Score

0.7046

Precision

0.7089

Recall

0.7004

Total Loss

0.2504

Classifier Loss

0.0663

Box Regression Loss

0.1427

Objectness Loss

0.0042

RPN Box Loss

0.0371

模型对比

对比项

YOLOv8

Faster R-CNN

结论

整体指标

mAP50 = 0.7492

F1 = 0.7074

YOLOv8 整体得分更高

Precision

0.8294

0.7112

YOLOv8 误检更少

Recall

0.6584

0.7036

Faster 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.png

Precision-Recall 曲线

P_curve.png

Precision 随置信度变化曲线

R_curve.png

Recall 随置信度变化曲线

F1_curve.png

F1 分数随置信度变化曲线

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.png

F1 分数变化曲线,并标注最佳轮次

results.csv

每轮训练指标

training_history.json

完整训练历史

training_log.txt

训练日志

summary_report.txt

训练结果摘要

模型对比文件

目录:

runs/comparison/

文件

说明

model_comparison.png

YOLOv8 与 Faster R-CNN 指标对比图

comparison_report.txt

模型对比文字报告

comparison_data.json

模型对比结构化数据

桌面端系统功能

桌面端系统入口:

detection_ui.py

图片检测

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

视频检测

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

摄像头检测

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

历史记录

  • 历史记录保存在 detection_history.json
  • 支持在界面中查看检测时间、输入来源、行人数、车辆数和总数。
  • 支持导出为 CSV。
  • 支持导出为 JSON。

技术栈

类别

技术

编程语言

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/                                   # 重新训练时需要准备的数据集目录

环境准备与启动

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

参数说明:

参数

说明

--weights

Faster 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

本项目为个人原创,结构清晰,功能完整,适合计算机视觉方向课程设计、毕业设计和项目演示使用。有定制化需求可以评论或私信作者。

目录
相关文章
|
8天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2188 12
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
8天前
|
云安全 人工智能 安全
|
8天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max-Preview深度全解析:2.4万亿参数旗舰MoE模型+Token Plan限时优惠完整落地指南
2026年7月,全新旗舰级混合专家大模型Qwen3.8-Max-Preview正式开放抢先体验,作为通义千问Qwen3系列规格最高、综合推理能力顶尖的新一代模型,该模型总参数量达到2.4万亿(2.4T),是当前线上可调用的原生多模态旗舰模型,综合推理水准对标海外顶级Fable 5模型,在复杂工程开发、长文档深度分析、多步骤智能体自治、跨境多语言创作、海量数据挖掘五大高难度业务场景实现跨越式性能提升。
986 1
|
10天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
988 44
|
8天前
|
人工智能 自然语言处理 数据挖掘
最新版通义千问(Qwen3.8-Max-Preview)功能介绍
2026年,通义千问正式推出全新旗舰级大模型 **Qwen3.8-Max-Preview 预览版**,作为首款突破万亿参数规格的新一代基座模型,该模型总参数量达到**2.4万亿**,采用全新迭代的MoE混合专家架构,综合推理性能、长文本处理、多模态理解、复杂任务规划能力全面超越前代Qwen3.7-Max版本,整体实力跻身全球第一梯队,可对标海外顶级旗舰模型,是当前面向复杂工程开发、多智能体协同、超长文档解析、专业办公自动化场景的最优国产基座模型。
997 0
|
6天前
|
自然语言处理 测试技术 API
通义千问Qwen3.8-Max-Preview全功能解析:2.4万亿参数旗舰模型深度使用指南
在大模型技术持续迭代的当下,通义千问推出的Qwen3.8-Max-Preview作为新一代旗舰预览版模型,凭借2.4万亿参数的超大规模、多模态融合能力与全场景适配特性,成为开发者与企业用户探索AI应用的核心工具。该模型采用稀疏混合专家(MoE)架构,是通义千问首个突破万亿参数的多模态模型,可同时处理文本、图像、视频与文档等多种数据形态,在全栈代码开发、复杂逻辑推理、长文档分析与多智能体协作等场景实现跨越式升级。本文将全面拆解Qwen3.8-Max-Preview的核心功能,详解API调用流程与配置方法,覆盖多场景实战技巧,帮助用户快速掌握这款旗舰模型的使用方法,充分释放其性能潜力。
480 1
|
9天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南
Qwen3.8-Max-Preview是通义千问Qwen3系列旗舰MoE大模型,参数达2.4万亿,综合推理能力居行业第一梯队。支持思考/快速双模式,擅长大模型五大高难场景。现于阿里云百炼Token Plan、Qoder及QoderWork上线体验,个人版低至39元/月。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
689 1
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南