当前位置: 首页 > news >正文

基于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数据集目录。

数据集结构

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
  1. 加载yolov8s.pt预训练权重。
  1. 按 640 x 640 输入尺寸进行训练。
  1. 使用 YOLOv8 默认检测损失,包括边界框损失、分类损失和 DFL 损失。
  1. 训练过程中保存best.ptlast.pt
  1. 训练结束后在验证集上评估 Precision、Recall、mAP50、mAP50-95。

当前训练配置记录在:

runs/detect/person_car_detect/args.yaml

Faster R-CNN 训练流程

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

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

作者原创项目地址:michael-jay.pages.dev/projects.html

http://www.cnnetsun.cn/news/3719187.html

相关文章:

  • 接 AI API 别只问支不支持新模型,也要看倍率和日志
  • 数字人短视频矩阵方案落地:4个工程级踩坑分析与解决思路
  • 2026一站式AI电商创作平台推荐 全链路能力测评指南
  • Unity UI进阶:UI布局组件(Horizontal/Vertical Layout Group)使用
  • 4大核心技术揭秘:打造英雄联盟终极效率工具League Akari
  • 大模型Demo遍地跑,为什么简历上没权限和日志就挂?
  • 向量数据库实战:选型、调优与落地~系列文章23:向量数据库的成本控制:内存优化、量化压缩、冷热分层策略
  • G-Helper深度解析:华硕笔记本性能调校的进阶实战指南
  • 123、K210的神经网络加速器KPU详解
  • 手把手教你用 Milvus + LangChain 搭建《天龙八部》RAG 知识库
  • 物联网设备硬件级安全防护与SE050安全元件实战
  • html二级下拉菜单代码?别傻了,这代码分分钟让小白原地起飞
  • LangChain 项目复盘:权限和日志才是 Demo 到生产的生死线
  • ExifToolGUI图片元数据管理终极指南:免费开源工具让你的照片管理效率翻倍
  • 航空发动机燃油喷嘴焊完就裂?精密激光焊接三道防线
  • 有哪些主流的研发管理工具
  • 震惊。抓紧学习
  • 实时语音驱动NPC+AI剧情分支引擎:Epic官方认证的AI辅助开发框架首次开源解析
  • 计算机毕业设计之基于Springboot的大学生就业招聘系统
  • MySQL从入门到实战:环境搭建、SQL核心与性能优化指南
  • Orchestra API完全指南:轻松集成项目管理与自动化任务的实用教程
  • Love Iwara完整指南:如何快速搭建跨平台Iwara第三方客户端
  • 我觉得现在一个成功模式可能是这样的-------不靠广告靠价值
  • 终极指南:5个简单步骤让2012-2015款老Mac完美运行最新macOS
  • Ascend-SACT/glm-4.7-flash常见问题解决:8大报错案例与修复方案
  • Python爬虫实战:自动采集Epic免费游戏数据
  • SuperDirt与Tidal集成指南:参数映射与音乐编程实践
  • 解决90%主题安装难题:Merlin WP常见问题与调试技巧
  • 终极写作体验:Long Haul主题的排版设计与阅读时间估算功能
  • XHS-Downloader:面向开发者的结构化内容采集解决方案