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

YOLOv8n行人检测实战:从数据集准备到模型训练

YOLOv8n行人检测实战:从数据集准备到模型训练

    • 一、为什么选择YOLOv8?
    • 二、环境准备
      • 2.1 环境配置解析
    • 三、安装Ultralytics框架
    • 四、数据集准备与理解
      • 4.1 数据集下载
      • 4.2 数据集结构
      • 4.3 YOLO标签格式解析
    • 五、数据集可视化:理解标注数据
      • 5.1 可视化效果
    • 六、多数据集融合训练
      • 6.1 多数据集融合的优势
    • 七、模型训练与参数解析
      • 7.1 关键参数解析
      • 7.2 训练过程监控
    • 八、训练优化技巧
    • 九、模型部署实战
      • 9.1 RK3588边缘设备部署
    • 十、总结与扩展
    • 十一、参考链接

行人检测是计算机视觉领域的核心任务之一,在自动驾驶、安防监控、智慧城市等领域有广泛应用。本文将带你手把手实现YOLOv8n行人检测模型的完整训练流程。

一、为什么选择YOLOv8?

YOLO(You Only Look Once)是当前最先进的实时目标检测算法之一。最新版本YOLOv8在精度和速度上都实现了突破:

  • 🚀 极速推理:640x640分辨率下可达300+FPS
  • 🎯 更高精度:mAP指标较前代提升10-15%
  • 🔧 易用性:简洁的API和丰富的预训练模型
  • 📦 轻量化:YOLOv8n仅6MB大小,适合边缘设备部署

二、环境准备

mkdir PedestrianDet
cd PedestrianDet
docker run --gpus all --shm-size=32g -it \-e NVIDIA_VISIBLE_DEVICES=all --privileged --net=host \-v $PWD:/home -w /home --name PedestrianDet nvcr.io/nvidia/pytorch:24.03-py3 /bin/bash

2.1 环境配置解析

  1. GPU支持--gpus all确保容器可以访问主机所有GPU
  2. 共享内存--shm-size=32g解决PyTorch多进程数据加载问题
  3. 目录映射-v $PWD:/home将当前目录映射到容器内
  4. 基础镜像:使用NVIDIA官方PyTorch镜像确保CUDA环境兼容性

💡 为什么需要大共享内存?
PyTorch的DataLoader使用共享内存加速数据加载,行人检测数据集通常较大,32GB设置可避免BrokenPipeError错误。

三、安装Ultralytics框架

git clone https://github.com/mikel-brostrom/ultralytics.git
cd ultralytics
git checkout 8e17ff56a9db8933a1962b88e05547dd2cce9c48
pip3.10 install .
pip3 install opencv-python==4.7.0.72 -i https://mirrors.aliyun.com/pypi/simple/
pip3 install opencv-contrib-python==4.7.0.72 -i https://mirrors.aliyun.com/pypi/simple/
pip3 install opencv-python-headless==4.7.0.72 -i https://mirrors.aliyun.com/pypi/simple/

⚠️ 为什么需要三个OpenCV包?

  • opencv-python:主包包含基础功能
  • opencv-contrib-python:提供额外模块(如SIFT特征)
  • opencv-python-headless:无GUI支持,避免Docker环境下的显示问题

四、数据集准备与理解

4.1 数据集下载

mkdir -p /home/datasets/coco2017/# 从这个链接下载labels1.zip和images.zip到/home/datasets/coco2017/并解压
https://aistudio.baidu.com/datasetdetail/136065

4.2 数据集结构

/home/datasets
└── coco2017├── images│   └── 000000581899.jpg└── labels└── 000000581899.txt

4.3 YOLO标签格式解析

每个.txt文件对应一张图像,格式为:

<class_id> <x_center> <y_center> <width> <height>
  • 归一化坐标:所有值在0-1之间,相对于图像宽高
  • 一个目标一行:允许多个检测目标

五、数据集可视化:理解标注数据

cd /home/
cat> vis.py <<-'EOF'
import sys
import cv2
import os
import numpy as npdef visualize_yolo_dataset(image_path):# 生成标签文件路径 (将/images/替换为/labels/,扩展名改为.txt)label_path = image_path.replace('images', 'labels').replace('.jpg', '.txt')if not os.path.exists(label_path):print(f"Error: Label file not found at {label_path}")return False# 读取图像image = cv2.imread(image_path)if image is None:print(f"Error: Failed to load image at {image_path}")return Falseimg_height, img_width = image.shape[:2]# 定义类别颜色映射 (可根据需要扩展)class_colors = {0: (0, 255, 0),    # 行人 - 绿色1: (0, 0, 255),    # 汽车 - 红色2: (255, 0, 0),    # 自行车 - 蓝色# 添加更多类别...}# 读取并处理标签文件with open(label_path, 'r') as f:lines = f.readlines()for line in lines:data = line.strip().split()if len(data) < 5:continueclass_id = int(data[0])# 转换YOLO格式坐标 (归一化) 为像素坐标x_center = float(data[1]) * img_widthy_center = float(data[2]) * img_heightwidth = float(data[3]) * img_widthheight = float(data[4]) * img_height# 计算矩形框坐标x_min = int(x_center - width/2)y_min = int(y_center - height/2)x_max = int(x_center + width/2)y_max = int(y_center + height/2)# 确保坐标在图像范围内x_min = max(0, x_min)y_min = max(0, y_min)x_max = min(img_width - 1, x_max)y_max = min(img_height - 1, y_max)# 获取类别颜色 (默认为白色)color = class_colors.get(class_id, (255, 255, 255))# 绘制边界框cv2.rectangle(image, (x_min, y_min), (x_max, y_max), color, 2)# 绘制类别标签label = f"Class {class_id}"cv2.putText(image, label, (x_min, y_min - 5),cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 1)# 保存结果cv2.imwrite('out.jpg', image)print("Visualization saved to out.jpg")return Trueif __name__ == "__main__":# 示例使用image_path = sys.argv[1]visualize_yolo_dataset(image_path)
EOF
python3.10 vis.py /home/datasets/coco2017/images/000000581899.jpg

5.1 可视化效果

请添加图片描述

🧠 为什么需要可视化?

  1. 验证标签文件是否正确
  2. 检查边界框是否准确标注行人
  3. 确认图像与标签的对应关系
  4. 发现数据集潜在问题(如漏标、错标)

六、多数据集融合训练

cd /home/
cat> persion.yaml <<-'EOF'
path: /home/datasets/
train:- Caltech/images- crowdhuman/train/- WiderPerson/images- VOC/images/train2007- VOC/images/val2007- VOC/images/val2012- VOC/images/train2012- coco2017/images
val:- crowdhuman/val/images
names:0: person
EOF  

6.1 多数据集融合的优势

  1. 场景多样性:不同数据集覆盖不同场景(街道、人群、室内等)
  2. 光照变化:适应各种光照条件
  3. 尺度变化:包含远/近不同距离的行人
  4. 遮挡处理:提高对部分遮挡行人的识别能力

七、模型训练与参数解析

cd /home/
cat> train.py <<-'EOF'
from ultralytics import YOLO# 初始化模型(使用YOLOv8n架构)
model = YOLO('yolov8n.yaml') # 开始训练
results = model.train(data="persion.yaml",   # 配置文件路径epochs=100,            # 训练轮数imgsz=640,             # 输入图像尺寸device="cuda",         # 使用GPU加速pretrained=False       # 从零开始训练
)
EOF
python3.10 train.py

7.1 关键参数解析

  1. epochs=100
    行人检测需要充分学习,100轮可平衡训练时间和精度

  2. imgsz=640

    • 原始YOLOv8设计尺寸
    • 兼顾精度和速度的最佳平衡点
    • 高分辨率提升小目标检测能力
  3. pretrained=False
    从零训练避免预训练模型的类别偏差

7.2 训练过程监控

训练启动后,终端将显示实时指标:

Epoch   gpu_mem       box_loss   cls_loss   dfl_loss  Instances       Size0/99     7.58G      0.12345    0.05678    0.08901         32        640: 1/99     7.60G      0.09876    0.04321    0.07654         29        640:...
  • box_loss:边界框回归损失(越小越好)
  • cls_loss:分类损失(越小越好)
  • dfl_loss:分布焦点损失(YOLOv8特有)

八、训练优化技巧

  1. 学习率调整

    model.train(..., lr0=0.01, lrf=0.01)
    
    • 初始学习率(lr0)设为0.01
    • 最终学习率(lrf)为初始的1%
  2. 早停机制

    model.train(..., patience=10)
    

    连续10轮验证集精度无提升时自动停止

  3. 数据增强

    model.train(..., hsv_h=0.015, hsv_s=0.7, hsv_v=0.4)
    

    启用HSV色彩空间增强,提升光照鲁棒性

九、模型部署实战

训练好的模型可部署到多种平台:

# 导出ONNX格式
model.export(format='onnx')# 使用OpenVINO优化
model.export(format='openvino')

9.1 RK3588边缘设备部署

在RK3588上实现YOLOv8n高效推理包含:

  1. 模型量化(FP16/INT8)
  2. NPU硬件加速
  3. 后处理优化

十、总结与扩展

通过本教程,你已完成:

  1. Docker环境配置 ✅
  2. YOLOv8框架安装 ✅
  3. 多源行人数据集准备 ✅
  4. YOLOv8n模型训练 ✅

十一、参考链接

  1. 行人检测-Caltech Pedestrian Dataset 数据集下载及格式转换
  2. Caltech_Pedestrain_Detection_Benchmark数据集获取并转换
  3. 使用yolov8训练Caltech Pedestrain行人数据集详细步骤
  4. 在RK3588上实现YOLOv8n高效推理

相关文章:

YOLOv8n行人检测实战:从数据集准备到模型训练

YOLOv8n行人检测实战&#xff1a;从数据集准备到模型训练 一、为什么选择YOLOv8&#xff1f;二、环境准备2.1 环境配置解析 三、安装Ultralytics框架四、数据集准备与理解4.1 数据集下载4.2 数据集结构4.3 YOLO标签格式解析 五、数据集可视化&#xff1a;理解标注数据5.1 可视化…...

国标GB28181设备管理软件EasyGBS远程视频监控方案助力高效安全运营

一、方案背景​ 在商业快速扩张的背景下&#xff0c;连锁店门店数量激增&#xff0c;分布范围广。但传统人工巡检、电话汇报等管理方式效率低下&#xff0c;存在信息滞后、管理盲区&#xff0c;难以掌握店铺运营情况&#xff0c;影响企业效率与安全。网络远程视频监控系统可有…...

网络寻路--图论

所以我们固定题中M条边&#xff08;因为这M条一定联通&#xff09; P8605 [蓝桥杯 2013 国 AC] 网络寻路 - 洛谷 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<int,int> pii; int n,m; int d[N],u[N],v[N]…...

LangChain4j 学习教程项目

LangChain4j 学习教程 项目地址项目简介主要功能使用的技术和库项目环境配置环境要求 依赖版本每天学习内容和目标Day 01Day 02Day 03Day 04Day 05Day 06Day 07Day 08Day 09Day 10Day 11Day 12重点学习内容 RAG 经过为期12天&#xff08;日均1小时&#xff09;的LangChain4j源码…...

【Go语言基础【15】】数组:固定长度的连续存储结构

文章目录 零、概述一、数组基础1、数组的本质&#xff1a;固定长度的连续存储结构2、声明与初始化3、访问与修改元素 二、数组拷贝与传参1、 值拷贝特性2、指针数组的拷贝3、函数传参&#xff08;值传递&#xff09; 三、数组遍历四、多维数组五、数组与切片的区别 零、概述 数…...

【读论文】U-Net: Convolutional Networks for Biomedical Image Segmentation 卷积神经网络

摘要1 Introduction2 Network Architecture3 Training3.1 Data Augmentation 4 Experiments5 Conclusion背景知识卷积激活函数池化上采样、上池化、反卷积softmax 归一化函数交叉熵损失 Olaf Ronneberger, Philipp Fischer, Thomas Brox Paper&#xff1a;https://arxiv.org/ab…...

Komiko 视频到视频功能炸裂上线!

Komiko 平台作为行业的创新先锋&#xff0c;近日宣布推出全新的视频到视频&#xff08;Video-to-Video&#xff09;功能&#xff0c;这一举措犹如一颗重磅炸弹&#xff0c;瞬间在漫画、动画和插画创作的世界里掀起了惊涛骇浪&#xff0c;进一步巩固了其作为 AI 驱动的一体化创作…...

Linux 文件系统与 I/O 编程核心原理及实践笔记

文章目录 一、理解文件1.1 狭义理解1.2 广义理解1.3 文件操作的归类认识1.4 系统角度&#xff1a;进程与文件的交互1.5 实践示例 二、回顾 C 文件接口2.1 hello.c 打开文件2.2 hello.c 写文件2.3 hello.c 读文件2.4 输出信息到显示器的几种方法2.5 stdin & stdout & st…...

vite+tailwind封装组件库

前言 演示视频 https://www.bilibili.com/video/BV1EST3zPEyP/?spm_id_from333.1387.homepage.video_card.click 参考 https://juejin.cn/post/7112295067682865166 https://juejin.cn/post/7046187185615142949 代码仓库 https://gitee.com/malguy/vite-components-li…...

Gin框架实战指南:从入门到进阶

Gin框架实战指南&#xff1a;从入门到进阶 在当今的后端开发领域&#xff0c;Gin框架以其高性能、简洁易用的特点&#xff0c;赢得了众多Go语言开发者的青睐。本文将带你深入探索Gin框架的方方面面&#xff0c;从基础的安装与使用&#xff0c;到响应处理、请求参数解析、中间件…...

【Java学习笔记】包装类

包装类&#xff08;Wrapper&#xff09; 1. 介绍 &#xff08;1&#xff09;针对八种基本数据类型相应的引用类型 --> 包装类 &#xff08;2&#xff09;有了类的特点&#xff0c;就可以调用类中的方法 2. 分类和继承关系 基本数据类型包装类父类booleanBooleanObjectc…...

【高效开发工具系列】Blackmagic Disk Speed Test for Mac:专业硬盘测速工具

博客目录 一、Blackmagic Disk Speed Test 概述二、软件核心功能解析三、v3.3 版本的新特性与改进四、实际应用场景分析五、使用技巧与最佳实践六、与其他工具的比较及优势 一、Blackmagic Disk Speed Test 概述 Blackmagic Disk Speed Test 是 Mac 平台上广受专业人士青睐的一…...

QtDBus模块功能及架构解析

Qt 6.0 中的 QtDBus 模块是一个用于进程间通信&#xff08;IPC&#xff09;的核心模块&#xff0c;它基于 D-Bus 协议实现。D-Bus 是一种在 Linux 和其他类 Unix 系统上广泛使用的消息总线系统&#xff0c;允许应用程序和服务相互通信。 一、QtDBus模块主要功能&#xff1a; 1…...

光学字符识别(OCR)理论概述与实践教程

一、 光学字符识别(OCR)理论基础 OCR,即Optical Character Recognition,旨在通过计算机视觉和模式识别技术,将图像中包含的文本信息转换为机器可编辑、可搜索的文本数据。这项技术是实现信息数字化、自动化处理纸质或图像化文档的关键。 1. OCR处理管线 OCR系统通常采用…...

关键字--sizeof

sizeof 是 C 中的一个编译时运算符&#xff0c;用于获取一个类型或对象在内存中所占的字节数&#xff08;单位&#xff1a;字节&#xff0c;byte&#xff09;。 用法 获取类型的大小&#xff1a; std::cout << sizeof(int) << std::endl; // 输出int类型的字节数…...

Ubuntu20.04启动python的虚拟环境

如果你使用 mkvirtualenv 来创建虚拟环境&#xff0c;说明你已经安装了 virtualenvwrapper&#xff0c;这是一个用于管理 Python 虚拟环境的工具。 激活虚拟环境 要激活你使用 mkvirtualenv 创建的虚拟环境&#xff0c;按照以下步骤操作&#xff1a; 1.确保已经安装了 virtu…...

网页在线客服系统自动欢迎语实现方案(PHP+MySQL)

一、实现思路 在网页在线客服系统中实现自动欢迎语&#xff0c;主要需要以下几个步骤&#xff1a; 在数据库中存储欢迎语内容判断用户是否为首次访问或新会话在适当时机自动发送欢迎消息 演示网站&#xff1a;gofly.v1kf.com 二、数据库设计 首先需要扩展数据库结构&#xff1a…...

UniRig:如何在矩池云一站式解决 3D 模型绑定难题

在 3D 动画制作中&#xff0c;绑定&#xff08;Rigging&#xff09;是一个至关重要但复杂耗时的步骤。它包括为 3D 模型创建骨架并分配蒙皮权重&#xff0c;以实现流畅的动画效果。由清华大学与 Tripo 联合开发的 UniRig 框架&#xff0c;为这一难题提供了全新的解决方案。 什…...

用函数实现模块化程序设计(适合考研、专升本)

函数 定义&#xff1a;本质上是一段可以被连续调用、功能相对独立的程序段 c语言是通过“函数”实现模块化的。根据分类标准不同函数分为以下几类。 用户角度&#xff1a;库函数、自定义函数 函数形式&#xff1a;有参函数、无参函数 作用域&#xff1a;外部函数、内部函数 …...

玩转抖音矩阵:核心玩法与高效运营规则

一、 抖音矩阵&#xff1a;流量协同的生态网络 抖音矩阵&#xff0c;本质是运营一个相互关联、互相支持的抖音账号群。核心目标在于通过账号间的深度协同&#xff08;内容、流量、粉丝&#xff09;&#xff0c;打破单个账号的流量天花板&#xff0c;实现11>2的效果。它不仅…...

spring:继承接口FactoryBean获取bean实例

spring框架提供接口FactoryBean获取bean实例。 实现步骤&#xff1a; 实现接口FactoryBean。 在xml文件中配置实现接口FactoryBean的类。 调用接口FactoryBean中方法getObject&#xff0c;获取bean实例。 实现接口类 package com.itheima.factory;import org.springframework…...

字符串字典序最大后缀问题详解

字符串字典序最大后缀问题详解 一、问题定义与背景1.1 问题描述1.2 实际应用场景 二、暴力解法及其局限性2.1 暴力解法思路2.2 代码示例2.3 局限性分析 三、双指针算法&#xff1a;高效解决方案3.1 算法核心思想3.2 算法步骤3.3 代码实现3.4 与暴力解法对比 四、复杂度分析4.1 …...

VScode打开后一直显示正在重新激活终端 问题的解决方法

一、问题 本人打开“.py”文件后&#xff0c;同时会出现以下两个问题。 1、VScode一直循环在”正在重新激活终端“ 2、日志显示intellicode报错&#xff1a; Sorry, something went wrong activating IntelliCode support for Python. Please check the “Python” and “VS I…...

pe文件结构(TLS)

TLS 什么是TLS? TLS是 Thread Local Storage 的缩写&#xff0c;线程局部存储。主要是为了解决多线程中变量同步的问题 如果需要要一个线程内部的各个函数调用都能访问&#xff0c;但其它线程不能访问的变量&#xff08;被称为static memory local to a thread 线程局部静态变…...

二进制安全-OpenWrt-uBus

1 需求 需求&#xff1a;ubus list 需求&#xff1a;ubus -v list 需求&#xff1a;ubus -v list zwrt_router.api 2 接口 rootOpenWrt:/# ubus Usage: ubus [<options>] <command> [arguments...] Options:-s <socket>: Set the unix domain …...

分页查询的实现

第一步&#xff1a;导入pom依赖 <!--配置PageHelper分页插件--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version><exclusions>…...

中型零售业数据库抉择:MySQL省成本,SQL SERVER?

针对中型零售企业&#xff08;20台固定POS数十台移动POS&#xff0c;含库存管理与结算业务&#xff09;的操作系统与数据库选型&#xff0c;需平衡性能、成本、扩展性及运维效率。结合行业实践与系统需求&#xff0c;建议如下&#xff1a; &#x1f5a5;️ ​​一、操作系统选型…...

使用 Windows 完成 iOS 应用上架:Appuploader对比其他证书与上传方案

iOS 应用上架流程对很多开发者来说都是一道复杂关卡&#xff0c;特别是当你并不使用 Mac 电脑时。虽然 Apple 一直强调使用其原生工具链&#xff08;Xcode 和 Transporter&#xff09;&#xff0c;但现实是大量开发者正在寻找更灵活的替代方案。 今天我将从证书申请和 IPA 上传…...

IDEA中的debug使用技巧

详细教学视频见b站链接&#xff1a;IDEA的debug调试 CSDN详细博客文章链接&#xff1a;debug文章学习 以下为个人学习记录总结&#xff1a; idea中的debug模式界面如下&#xff1a; 现在详细介绍图标作用&#xff1a; 图标一&#xff08;Show Execution Point&#xff09;&…...

RockyLinux9.6搭建k8s集群

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...