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

分类: 深度学习

模型训练、验证、导出与实验记录

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

    基于仓库 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 折 / 导出注释)整理,便于复现实验与部署。