基于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

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

目录
相关文章
|
3月前
|
前端开发 BI 数据处理
财通证券 x Quick BI:传统业务数字化升级,沉淀300+营销目标场景
财通证券携手瓴羊构建数据中台,打通多系统“数据孤岛”,打造300+市场标签,依托Quick BI实现零代码分析与智能营销,推动APP用户占比从15%跃升至50%,实现数据驱动的精细化运营与组织升级。
|
2月前
|
人工智能 分布式计算 大数据
活动报名 | Agentic Lakehouse Meetup · 北京站,从开源技术创新到多模态数据智能化
8月14日,阿里云在北京举办“Agentic Lakehouse”技术活动,聚焦开源大数据生态如何支撑AI Agent全生命周期。
374 2
活动报名 | Agentic Lakehouse Meetup · 北京站,从开源技术创新到多模态数据智能化
|
2月前
|
消息中间件 人工智能 监控
高并发下 AI Agent 策略:分布式 Agent 系统的架构设计
本文探讨AI Agent在高并发场景下的系统架构挑战与设计策略,涵盖事件驱动架构、消息队列调度、Agent池化、模型服务独立部署、Continuous Batching、RAG优化、上下文管理及成本控制等核心要点,助力构建稳定高效的生产级智能体系统。
395 1
|
5天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
|
12天前
|
人工智能 API 调度
Windows 本地 AI 漫剧全自动生产线部署完整教程(零基础、全指令、带源码、模型配置、排错方案)
本文详解Windows下本地部署AI漫剧全流程:涵盖硬件要求(RTX3060/4050起)、Python/CUDA/ComfyUI环境配置、剧本解析、批量API调度、GPU监控与FFmpeg后期处理,提供可直接复用的脚本与故障排查方案,兼顾个人创作与计算机毕设需求。(239字)
|
存储 传感器 人工智能
中小制造工厂数字化瓶颈破局:AI 流程精细化 + 工业自动化一体化落地架构实践
离散制造企业普遍存在产线自动化与管理系统数据割裂、管理颗粒粗放、人工流程成本高的痛点。本文基于产学研落地项目,介绍AI 驱动企业管理流程自动化整套技术架构,结合AI 精细化分析细化管理颗粒度能力,联动现场工业自动化设备,搭建工业自动化与企业管理流程一体化云边协同方案,给出轻量化分步落地路径与真实工厂量化收益数据,面向制造 IT、智能制造架构师提供可复用落地思路。
|
2月前
|
人工智能 算法 大数据
为什么物流公司都在卷“算法”?大数据如何让配送路线越跑越聪明
为什么物流公司都在卷“算法”?大数据如何让配送路线越跑越聪明
183 3
|
2月前
|
人工智能 运维 API
大模型企业本地化部署与数据安全实践:RAG 回答如何提供引用证据链
本文探讨企业大模型本地化部署中RAG问答的“证据链”实践:如何让AI回答附带可追溯的引用依据(文件名、版本、章节、生效时间等),提升制度、合同等关键场景的可信度与合规性,兼顾数据安全与业务落地。
240 1