机器人感知 · ROS 2 · 点云与边缘计算

, ,

YOLOv8 8.2 完整实战:环境搭建、数据准备、训练、推理与边缘部署

基于 daved1210/yolov8_8.2.0(Ultralytics YOLOv8 8.2.22)的中文…

基于仓库 daved1210/yolov8_8.2.0(Ultralytics YOLOv8 8.2.22)整理的中文全流程教程。 从 Conda 环境、VOC→YOLO 标注转换、单卡/多卡训练、验证与视频推理,到 ONNX / TensorRT / RKNN 导出,覆盖日常训练与部署的关键路径。

技术范围:目标检测、实例分割、姿态估计、图像分类、旋转框检测与多目标跟踪;包含 CLI、Python API、K 折训练、VOC 转换以及 ONNX / TensorRT / RKNN 部署。

阅读建议:首次使用可按“环境搭建 → 数据准备 → 训练 → 验证 → 推理 → 导出”顺序操作;已有 YOLOv8 经验可直接查看参数速查与边缘部署章节。


目录

  1. 项目概述:这个仓库实现了什么
  2. 仓库结构与自定义增强
  3. 环境搭建(Windows / Linux / GPU)
  4. 数据集准备与 VOC XML 转 YOLO
  5. 如何训练(单卡 / 多卡 / 断点续训)
  6. K 折交叉验证训练
  7. 模型验证
  8. 推理:图片 / 视频 / 姿态
  9. 模型导出与边缘部署
  10. 关键超参数速查
  11. 常见问题与实践建议
  12. 总结

一、项目概述:这个仓库实现了什么

yolov8_8.2.0 是基于 Ultralytics YOLOv8 8.2.x 的完整工程仓库,而不是只有权重文件的 demo。 版本号在源码中声明为 __version__ = "8.2.22",核心能力继承自官方 Ultralytics:

任务能力说明
目标检测
Detect
边界框 + 类别,适合行人、工件、耳机等目标。
实例分割
Segment
在检测基础上输出像素级掩膜。
姿态估计
Pose
人体关键点检测与跟踪,支持骨骼锁定式预测。
图像分类
Classify
整图类别识别,仓库内含 yolov8s-cls.pt
旋转框检测
OBB
适合航拍、仓库货架等倾斜目标。
多目标跟踪
Track
BoT-SORT / ByteTrack 等跟踪器,可直接跑视频。

本仓库的“增量价值”: 在官方框架之上,补充了中文参数注释(use.py)、VOC XML→YOLO 转换、标签统计、 10 折交叉验证拆分与训练脚本、测试视频、以及自定义权重目录 权重文件/lxh/ (含 .pt / .onnx / .engine / .xml / .bin 等导出形态),更贴近本地实战与嵌入式部署。

二、仓库结构与自定义增强

理解目录,能让训练与导出路径不踩坑:

路径 / 文件作用
ultralytics/YOLOv8 核心库:模型、训练、验证、推理、导出、跟踪器、solutions
use.py中文参数手册 + 训练 / 验证 / 预测 / 导出的可复制 CLI 示例
xml转YOLO格式.pyPascal VOC XML 标注批量转为 YOLO class x y w h 标签
查看自定义数据集标签类别及数量.py统计 Annotations 中各类别数量
k折交叉验证.py / k折训练模型.py10 折拆分数据集并循环训练
测试.py检查 CUDA / GPU 名称 / torch CUDA 版本
测试视频/推理用样例视频
权重文件/lxh/自定义最佳权重及多格式导出产物
examples/ONNXRuntime、OpenCV、C++、SAHI、Region Counter 等部署示例
docker/GPU / CPU / Jetson / Conda 等 Dockerfile
docs/完整文档源(数据集、任务、部署指南)
数据流(实战视角)

标注(VOC XML / YOLO txt)
        │  xml转YOLO格式.py / 标签统计
        ▼
数据集 YAML(path / train / val / names)
        │  yolo train 或 k折训练
        ▼
runs/detect/train*/weights/best.pt
        │  val 评估 → predict 推理
        ▼
export:ONNX / TensorRT engine / OpenVINO / RKNN
        │
        ▼
PC 实时推理 · RK3588 · Jetson · 业务系统

三、环境搭建(Windows / Linux / GPU)

3.1 推荐软件版本

组件建议
Python3.8 – 3.12(仓库声明支持)
PyTorch≥ 1.8(建议匹配本机 CUDA 的官方 wheel)
CUDA / cuDNN与显卡驱动、PyTorch 构建版本一致
系统Windows 10/11、Ubuntu 20.04/22.04 均可
可选Anaconda / Miniconda、Git、NVIDIA 驱动

3.2 创建 Conda 环境(仓库注释中的习惯用法)

步骤 1:创建并激活环境

conda create -n yolov8_GPU python=3.10 -y
conda activate yolov8_GPU

步骤 2:安装 PyTorch(示例:CUDA 11.8)

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118

请按本机 CUDA 版本选择对应命令,见 PyTorch 官网

步骤 3:安装本仓库(可编辑模式)

cd yolov8_8.2.0
pip install -e .
# 或直接依赖核心包
# pip install ultralytics

步骤 4:验证 GPU 是否可用

仓库提供 测试.py

python 测试.py

正常时应看到 True、GPU 名称,以及 torch.version.cuda

Windows 小贴士: 训练时若 DataLoader 多进程异常,可将 workers=0。 若 OpenMP 冲突,可设置 KMP_DUPLICATE_LIB_OK=TRUE(仓库注释中也有提及)。

3.3 依赖一览(pyproject.toml)

核心依赖包括:torchtorchvisionopencv-pythonpillowpyyamlmatplotlibscipypandasseaborntqdmthop 等。导出相关可选依赖:

  • onnx:ONNX 导出
  • openvino:Intel OpenVINO
  • tensorrt(环境单独安装):TensorRT engine
  • 日志集成:TensorBoard / Comet / MLflow 等

四、数据集准备与 VOC XML 转 YOLO

4.1 YOLO 检测数据目录约定

data/
  images/          # 图片:xxx.jpg
  labels/          # 标签:xxx.txt(与图片同名)
  Annotations/     # 可选:VOC XML 原始标注
  ImageSets/       # train.txt / val.txt / test.txt(无扩展名 id)
  people.yaml      # 数据集配置(示例名)
  classes.yaml     # K 折脚本使用的类别名

每条标签一行,格式为归一化坐标:

<class_id> <x_center> <y_center> <width> <height>
# 所有值均相对原图宽高,范围 0~1

4.2 数据集 YAML 示例

# data/people.yaml
path: E:/yolov8/yolov8/data
train: images/train
val: images/val
# test: images/test

names:
  0: person
  1: helmet
  # ...

4.3 使用仓库脚本:XML → YOLO

xml转YOLO格式.py 会读取 data/Annotations/*.xmldata/ImageSets/{train,test,val}.txt,写出:

  • data/labels/*.txt:YOLO 标签
  • data/train.txt 等:图片路径列表

脚本中类别列表需改成你的真实类别,示例默认为耳机检测:

classes = ['earphone']  # 改成你的类别顺序

运行:

python xml转YOLO格式.py

4.4 标签类别与数量统计

python 查看自定义数据集标签类别及数量.py
# 默认统计目录:data/Annotations

开训前先看类别是否均衡;长尾类别往往需要更多样本、重采样或类别权重策略。

五、如何训练(单卡 / 多卡 / 断点续训)

仓库推荐优先使用 CLI(与 use.py 注释一致)。先激活环境:

conda activate yolov8_GPU

5.1 单卡训练(最常用)

yolo task=detect mode=train model=yolov8s.pt data=data/people.yaml batch=-1 epochs=1000 imgsz=640 workers=0 cache=True pretrained=True device=0 patience=1000
  • model=yolov8s.pt:从小/中模型起步更稳;精度优先可换 yolov8m/l/x.pt
  • batch=-1:自动 batch(AutoBatch),按显存自适应
  • cache=True:缓存加速读图(内存够时很香)
  • workers=0:Windows 更稳妥
  • 结果默认写入 runs/detect/train*/,最佳权重为 weights/best.pt

5.2 从已有 best 权重继续微调

yolo task=detect mode=train model=runs/detect/train11/weights/best.pt data=data/people.yaml batch=-1 epochs=500 imgsz=640 workers=20 cache=True device=0 patience=200

5.3 多卡训练

yolo task=detect mode=train model=yolov8n.pt data=data/people.yaml batch=32 epochs=100 imgsz=640 workers=16 device=0,1,2,3

5.4 中断恢复(resume)

yolo train resume model=runs/detect/train4/weights/last.pt

last.pt 保存优化器状态,适合意外中断后接着跑;迁移到新数据时更常见是加载 best.pt 重新开训。

5.5 Python API 等价写法

from ultralytics import YOLO

model = YOLO("yolov8s.pt")  # 或 yolov8s.yaml + 预训练权重
results = model.train(
    data="data/people.yaml",
    epochs=100,
    imgsz=640,
    batch=-1,
    device=0,
    workers=0,
    cache=True,
    pretrained=True,
)

六、K 折交叉验证训练

小样本场景下,单次 train/val 划分容易“运气好/运气差”。仓库提供 10 折流程:

  1. 修改 k折交叉验证.py 中的 dataset_pathclasses.yaml 路径
  2. 运行拆分:生成 split_1 ... split_10 与各自 yaml,并写入 data/file_paths.txt
  3. 运行 k折训练模型.py 循环训练每一折
python k折交叉验证.py
python k折训练模型.py

训练脚本核心逻辑(简化):

from ultralytics import YOLO
model = YOLO("checkpoints/yolov8s.pt", task="train")
for dataset_yaml in ds_yamls:
    model.train(data=dataset_yaml, batch=-1, epochs=10, imgsz=640,
                device=0, workers=0, cache=True)

实践建议: K 折用于评估方法稳定性;最终上线模型可用全量数据再训一版,或挑选验证集表现最好的折权重做集成。

七、模型验证

yolo task=detect mode=val model=runs/detect/train/weights/best.pt data=data/people.yaml device=0

关注指标:

  • mAP50:IoU=0.5 时的平均精度,业务上常用
  • mAP50-95:更严格,衡量定位质量
  • Precision / Recall:误检与漏检权衡
  • 速度:结合后续 export 在目标硬件复测

验证侧常见参数(见 use.py):

参数默认说明
conf0.001(val)置信度阈值;预测时常设 0.25~0.5
iou0.6NMS IoU 阈值
max_det300每图最大检测数
halfTrueFP16 加速(硬件支持时)
plotsFalse是否输出可视化曲线/混淆矩阵等

八、推理:图片 / 视频 / 姿态

8.1 检测推理(视频示例)

yolo task=detect mode=predict model=runs/detect/train8/weights/best.pt source=测试视频/2.mp4 device=0 conf=0.4 iou=0.5

指定输入分辨率(例如 1080p 视频):

yolo task=detect mode=predict model=yolov8x.pt source=1.mp4 device=0 imgsz=1080,1920 conf=0.6

使用 TensorRT engine 加速:

yolo task=detect mode=predict model=yolov8x.engine source=1.mp4 device=0 imgsz=1080,1920 conf=0.5

8.2 姿态估计(骨骼)

yolo pose predict model=yolov8x-pose.pt source=测试视频/2.mp4

8.3 Python 推理 API

from ultralytics import YOLO

model = YOLO("权重文件/lxh/best.pt")  # 或 best.engine / best.onnx
results = model.predict(source="测试视频/2.mp4", conf=0.4, device=0, save=True)

for r in results:
    boxes = r.boxes   # 框、置信度、类别
    # r.plot() 可得到绘制结果图

8.4 常用预测参数

参数含义
source图片 / 文件夹 / 视频 / 摄像头(如 0
conf置信度阈值,越高越“保守”
iouNMS 重叠抑制
save / save_txt / save_crop保存可视化、txt 标签、裁剪目标
show实时窗口显示
classes只保留指定类别,如 classes=0
line_thickness框线粗细
vid_stride视频抽帧步长,提速用

九、模型导出与边缘部署

训练得到的 best.pt 适合研究迭代;上线通常需要导出:

# ONNX
yolo task=detect mode=export model=runs/detect/train/weights/best.pt format=onnx

# TensorRT engine(需本机 TensorRT)
yolo task=detect mode=export model=runs/detect/train/weights/best.pt format=engine

# 指定动态输入尺寸示例
yolo task=detect mode=export model=yolov8x.pt format=engine imgsz=1080,1920

# TorchScript
yolo task=detect mode=export model=yolov8n.pt format=torchscript

9.1 导出参数速记

参数说明
formatonnx / engine / torchscript / openvino
halfFP16,减体积、提速
int8INT8 量化,边缘端常用
dynamic动态输入尺寸(ONNX/TensorRT)
simplify简化 ONNX 图
workspaceTensorRT 构建工作空间(GB)

9.2 RK3588 + RKNN(仓库注释中的路径)

典型流程: PyTorch .pt → 导出 .onnx → 在瑞芯微 rknn_model_zoo 中量化转换 → 板端推理。

# 1) 导出 onnx 后,在 Ubuntu + conda 环境中:
conda activate yolov8
cd rknn_model_zoo-1.6.0/examples/yolov8/python
python convert.py yolov8n.onnx rk3588 i8
# 含义:转换脚本 + onnx 路径 + 芯片型号 + int8 量化

仓库 权重文件/lxh/ 中同时保留 best.pt / best.onnx / best.engine / best.xml / best.bin,说明该项目已走过多后端导出链路,可按目标芯片选择对应产物。

9.3 更多部署示例

examples/ 目录提供 ONNXRuntime(Python/C++/Rust)、OpenCV DNN、LibTorch C++、SAHI 切片推理、区域计数等模板,适合接到实际业务工程。

十、关键超参数速查

以下摘自仓库 use.py 中文注释,训练时优先调这几项:

参数常见起点备注
epochs100~300小数据可更大并配合 early stop
imgsz640小目标可试 960/1280,显存与速度换精度
batch16 或 -1-1 为 AutoBatch
lr00.01(SGD)Adam 系列通常更小
lrf0.01最终学习率 = lr0 * lrf
optimizerSGD / AdamW检测任务 SGD 很常用
patience50~200验证指标不提升则早停
close_mosaic10最后 N 个 epoch 关闭马赛克增强
weight_decay0.0005抑制过拟合
box / cls / dfl7.5 / 0.5 / 1.5损失权重,类别极不平衡时可微调 cls

十一、常见问题与实践建议

Q1. 显存不够?

  • 减小 imgszbatch,或使用 batch=-1
  • 换更小模型:n/s 优先
  • 导出时再考虑 FP16/INT8,而不是先上最大模型硬训

Q2. Windows 训练 DataLoader 报错?

workers=0;必要时检查杀毒软件对大量小文件读取的拦截。

Q3. mAP 上不去?

  • 先用 查看自定义数据集标签类别及数量.py 查类别分布与漏标
  • 确认 XML→YOLO 时 classes 顺序与 yaml 的 names 一致
  • 小目标:提高分辨率、检查标注框质量
  • 过拟合:增强数据、早停、增大训练样本多样性

Q4. 推理结果框太多 / 太少?

confiou:框太多升高 conf 或降低 iou 敏感性;漏检则适当降低 conf,并回到验证集看 Recall。

Q5. 直接用官方 pip 包还是本仓库源码?

学习与二次开发建议用本仓库可编辑安装;若只做标准训练推理,也可 pip install ultralytics。本仓库的差异主要在中文实战脚本、K 折流程、导出产物与测试素材

十二、总结

daved1210/yolov8_8.2.0 把 Ultralytics YOLOv8 8.2 的完整能力,收敛成一套可本地落地的中文实战工程: 环境可复现、数据可转换、训练可恢复、验证可量化、推理可跑视频、导出可对接 TensorRT / RKNN。

如果你按本文顺序推进,推荐路径是:

  1. 搭好 GPU 环境并用 测试.py 验收
  2. 整理数据 → XML 转换 → 标签统计 → 写好 yaml
  3. 小模型快速 baseline(如 yolov8s)
  4. 看 val 指标,再考虑换大模型或 K 折评估
  5. 按部署目标 export,并在真实视频上回归 conf/iou

参考仓库:GitHub daved1210/yolov8_8.2.0(私有实践仓)· 上游项目 Ultralytics YOLOv8 · 文档:docs.ultralytics.com
本文根据仓库 README、源码版本号、自定义脚本(use.py / 数据转换 / K 折 / 导出注释)整理,便于复现实验与部署。

评论交流

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注