基于仓库 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 经验可直接查看参数速查与边缘部署章节。
目录
- 项目概述:这个仓库实现了什么
- 仓库结构与自定义增强
- 环境搭建(Windows / Linux / GPU)
- 数据集准备与 VOC XML 转 YOLO
- 如何训练(单卡 / 多卡 / 断点续训)
- K 折交叉验证训练
- 模型验证
- 推理:图片 / 视频 / 姿态
- 模型导出与边缘部署
- 关键超参数速查
- 常见问题与实践建议
- 总结
一、项目概述:这个仓库实现了什么
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格式.py | Pascal VOC XML 标注批量转为 YOLO class x y w h 标签 |
查看自定义数据集标签类别及数量.py | 统计 Annotations 中各类别数量 |
k折交叉验证.py / k折训练模型.py | 10 折拆分数据集并循环训练 |
测试.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 推荐软件版本
| 组件 | 建议 |
|---|---|
| Python | 3.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)
核心依赖包括:torch、torchvision、opencv-python、pillow、pyyaml、matplotlib、scipy、pandas、seaborn、tqdm、thop 等。导出相关可选依赖:
onnx:ONNX 导出openvino:Intel OpenVINOtensorrt(环境单独安装):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/*.xml 与 data/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.ptbatch=-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 折流程:
- 修改
k折交叉验证.py中的dataset_path、classes.yaml路径 - 运行拆分:生成
split_1 ... split_10与各自 yaml,并写入data/file_paths.txt - 运行
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):
| 参数 | 默认 | 说明 |
|---|---|---|
conf | 0.001(val) | 置信度阈值;预测时常设 0.25~0.5 |
iou | 0.6 | NMS IoU 阈值 |
max_det | 300 | 每图最大检测数 |
half | True | FP16 加速(硬件支持时) |
plots | False | 是否输出可视化曲线/混淆矩阵等 |
八、推理:图片 / 视频 / 姿态
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 | 置信度阈值,越高越“保守” |
iou | NMS 重叠抑制 |
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 导出参数速记
| 参数 | 说明 |
|---|---|
format | onnx / engine / torchscript / openvino 等 |
half | FP16,减体积、提速 |
int8 | INT8 量化,边缘端常用 |
dynamic | 动态输入尺寸(ONNX/TensorRT) |
simplify | 简化 ONNX 图 |
workspace | TensorRT 构建工作空间(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 中文注释,训练时优先调这几项:
| 参数 | 常见起点 | 备注 |
|---|---|---|
epochs | 100~300 | 小数据可更大并配合 early stop |
imgsz | 640 | 小目标可试 960/1280,显存与速度换精度 |
batch | 16 或 -1 | -1 为 AutoBatch |
lr0 | 0.01(SGD) | Adam 系列通常更小 |
lrf | 0.01 | 最终学习率 = lr0 * lrf |
optimizer | SGD / AdamW | 检测任务 SGD 很常用 |
patience | 50~200 | 验证指标不提升则早停 |
close_mosaic | 10 | 最后 N 个 epoch 关闭马赛克增强 |
weight_decay | 0.0005 | 抑制过拟合 |
box / cls / dfl | 7.5 / 0.5 / 1.5 | 损失权重,类别极不平衡时可微调 cls |
十一、常见问题与实践建议
Q1. 显存不够?
- 减小
imgsz或batch,或使用batch=-1 - 换更小模型:n/s 优先
- 导出时再考虑 FP16/INT8,而不是先上最大模型硬训
Q2. Windows 训练 DataLoader 报错?
设 workers=0;必要时检查杀毒软件对大量小文件读取的拦截。
Q3. mAP 上不去?
- 先用
查看自定义数据集标签类别及数量.py查类别分布与漏标 - 确认 XML→YOLO 时
classes顺序与 yaml 的names一致 - 小目标:提高分辨率、检查标注框质量
- 过拟合:增强数据、早停、增大训练样本多样性
Q4. 推理结果框太多 / 太少?
调 conf 与 iou:框太多升高 conf 或降低 iou 敏感性;漏检则适当降低 conf,并回到验证集看 Recall。
Q5. 直接用官方 pip 包还是本仓库源码?
学习与二次开发建议用本仓库可编辑安装;若只做标准训练推理,也可 pip install ultralytics。本仓库的差异主要在中文实战脚本、K 折流程、导出产物与测试素材。
十二、总结
daved1210/yolov8_8.2.0 把 Ultralytics YOLOv8 8.2 的完整能力,收敛成一套可本地落地的中文实战工程: 环境可复现、数据可转换、训练可恢复、验证可量化、推理可跑视频、导出可对接 TensorRT / RKNN。
如果你按本文顺序推进,推荐路径是:
- 搭好 GPU 环境并用
测试.py验收 - 整理数据 → XML 转换 → 标签统计 → 写好 yaml
- 小模型快速 baseline(如 yolov8s)
- 看 val 指标,再考虑换大模型或 K 折评估
- 按部署目标 export,并在真实视频上回归 conf/iou
参考仓库:GitHub daved1210/yolov8_8.2.0(私有实践仓)· 上游项目 Ultralytics YOLOv8 · 文档:docs.ultralytics.com
本文根据仓库 README、源码版本号、自定义脚本(use.py / 数据转换 / K 折 / 导出注释)整理,便于复现实验与部署。
发表回复