跳转到内容

YOLOv8 训练部署指南

文档信息

本教程说明目标检测模型 YOLOv8 的训练方法,以及将模型部署到 CSUN RV1126B 开发板的操作流程。

项目内容
文档名称YOLOv8 训练部署指南
公司株式会社日昇テクノロジー
URLhttp://www.dragonwake.com
E-mailinfo@dragonwake.com
创建日期2026/06/05
版本Ver1.0
修订内容新建

1. YOLOv8 概要

YOLOv8 是 Ultralytics 于 2023 年 1 月 10 日开源发布的下一代 YOLO 主要版本,在 YOLOv5 的基础上进行了更新。目前,YOLOv8 支持图像分类、目标检测、实例分割等任务。由于 YOLOv5 已经具备良好的应用基础,YOLOv8 在正式开源前就受到了大量用户关注。其主要网络结构如下图所示。

YOLOv8 网络结构

图1-1 YOLOv8 网络结构

本教程将说明 YOLOv8 目标检测模型的训练方法,以及将模型部署到 CSUN RV1126B 开发板上的完整流程。数据标注方法请参考已公开的其他教程。

YOLOv8 训练、转换、部署整体流程

图1-2 YOLOv8 训练、转换与部署整体流程

2. 资料下载

本手册所需的资料和源码可通过以下链接下载。

AIDemo_yolov8_All.zip

解压后的目录结构如下。

02-training 训练用源码
03-model_convert AI 模型转换用源码
04-AI_deploy AI 模型部署用源码

YOLOv8 资料包目录结构

图2-1 YOLOv8 资料包目录结构

3. YOLOv8 目标检测算法训练

3.1 下载训练源码

使用 Git 在 PC 端克隆远程仓库。根据网络环境不同,下载可能需要一定时间。本教程使用针对 RV1126B 调整过算子的 YOLOv8 仓库。

在 RV1126B Docker 开发环境中执行以下命令。

Terminal window
cd ~/linuxshare/work/rv1126b/jp/embedded/images/develop_environment
./run.sh 2204
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/yolov8/02-training
git clone https://github.com/airockchip/ultralytics_YOLOv8.git

YOLOv8 训练源码克隆示例

图3-1 YOLOv8 训练源码克隆示例

执行完成后,可得到如下文件。

Ultralytics YOLOv8 源码目录

图3-2 Ultralytics YOLOv8 源码目录

3.2 模型训练

本节说明 YOLOv8 目标检测模型的训练流程。这里为了确认训练流程,使用 Ultralytics 标准提供的小型数据集配置文件 coco8.yaml,并训练 YOLOv8m 模型。

coco8.yaml 是用于动作确认的小型数据集配置文件,并不适合用于获得实际项目所需的检测精度。如果用于产品或实际应用,请根据检测目标准备自己的图片数据和标注数据,并创建专用的 data.yaml 后进行训练。

3.2.1 进入训练目录

首先,在 RV1126B Docker 开发环境中进入 YOLOv8 训练目录。

Terminal window
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/yolov8/02-training/ultralytics_YOLOv8

使用以下命令确认 coco8.yaml 是否存在。

Terminal window
ls ultralytics/cfg/datasets/coco8.yaml

确认 coco8.yaml 文件

图3-3 coco8.yaml 文件确认结果

coco8.yaml 是用于快速确认 YOLOv8 训练流程的示例数据集配置文件。

3.2.2 训练 YOLOv8m 模型

当前环境中可能没有注册 yolo 命令,因此这里使用 Python 脚本执行训练。创建 train_coco8_yolov8m.py,内容如下。

Terminal window
cat > train_coco8_yolov8m.py <<'PY'
from ultralytics import YOLO
if __name__ == "__main__":
model = YOLO("yolov8m.pt")
model.train(
data="ultralytics/cfg/datasets/coco8.yaml",
imgsz=640,
epochs=10,
batch=4,
workers=4,
device=0,
project="runs/train",
name="coco8_yolov8m",
)
PY

执行脚本开始训练。

Terminal window
python train_coco8_yolov8m.py

训练开始时的终端输出示例如下。

YOLOv8m 训练开始终端输出

图3-4 YOLOv8m 模型开始训练时的终端输出

训练完成时的终端输出示例如下。

YOLOv8m 训练完成终端输出

图3-5 YOLOv8m 模型训练完成时的终端输出

上述脚本通过 YOLO("yolov8m.pt") 加载 YOLOv8m 预训练模型。如果当前目录中不存在 yolov8m.pt,Ultralytics 会在首次执行时自动下载该模型。

这里使用的 yolov8m.pt 是训练开始前的预训练模型;训练执行后生成的 best.ptlast.pt 是本次训练结果保存的模型文件。

模型文件会保存到 ./runs/train/coco8_yolov8m。训练精度结果可通过 ./runs/train/coco8_yolov8m/results.csv 查看。

YOLOv8m 训练后的 weights 目录

图3-6 YOLOv8m 训练后的 weights 目录

主要输出文件如下。

best.pt : 在验证数据上获得最佳评价结果的模型
last.pt : 最后一轮 epoch 结束时的模型

通常,用于推理或 ONNX 转换时,优先使用验证结果最好的 best.pt。如果需要从中断处继续训练,则使用 last.pt

3.3 将 PT 模型转换为 ONNX 模型

将训练得到的 best.pt 转换为 ONNX 格式。使用以下命令创建 Python 脚本 export_yolov8m_onnx.py

Terminal window
cat > export_yolov8m_onnx.py <<'PY'
from ultralytics import YOLO
if __name__ == "__main__":
model = YOLO("./runs/train/coco8_yolov8m/weights/best.pt")
model.export(
format="onnx",
imgsz=640,
opset=12,
half=False,
simplify=False,
dynamic=False,
)
PY

执行以下命令进行 ONNX 转换。

Terminal window
python export_yolov8m_onnx.py

YOLOv8m ONNX 转换终端输出

图3-7 YOLOv8m 模型 ONNX 转换结果

转换成功后,会在 runs/train/coco8_yolov8m/weights 目录下生成 best.onnx。如果需要作为 RKNN 转换输入使用,请将其重命名为 yolov8m.onnx

生成的 best.onnx 文件

图3-8 生成的 best.onnx 文件

4. RKNN-Toolkit 模型转换

4.1 构建 RKNN-Toolkit 模型转换环境

ONNX 模型需要转换为 RKNN 模型后,才能在 CSUN RV1126B 开发板上运行。因此,需要先搭建 RKNN-Toolkit 模型转换环境。TensorFlow、TensorFlow Lite、Caffe、Darknet 等模型也可以通过类似流程转换,本教程以 ONNX 模型为例进行说明。

模型转换环境的搭建方法请参考《AI 模型转换环境构建指南》。

4.2 将 ONNX 模型转换为 RKNN 模型

EASY-EAI Nano-TB 支持 .rknn 后缀模型的评估与运行。TensorFlow、TensorFlow Lite、Caffe、Darknet、ONNX、PyTorch 等常见训练模型,都可以通过 RKNN-Toolkit2 转换为 RKNN 模型。其他框架训练得到的模型,也可以先转换为 ONNX 格式,再转换为 RKNN 模型。

详细转换步骤请参考《RKNN 模型转换教程示例》。

4.2.1 解压模型转换 Demo

模型转换 Demo 包含在《2. 资料下载》中获取的资料包内。执行以下命令解压。

Terminal window
cd /data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial/yolov8/03-model_convert
unzip quant_dataset.zip
tar -xJf yolov8_model_convert.tar.xz

YOLOv8 模型转换 Demo 解压结果

图4-1 YOLOv8 模型转换 Demo 解压结果

4.2.2 进入模型转换工具 Docker 环境

使用以下命令将工作目录挂载到 Docker 镜像中。/data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial 作为工作目录,并映射到容器内的 /test。同时,通过 /dev/bus/usb:/dev/bus/usb 将 USB 设备挂载到容器中。

Terminal window
docker run -t -i --privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v /data/project/sales/csun/rv1126b/jp/AI/demo/Tutorial:/test \
rknn-toolkit2:2.3.2-cp38 /bin/bash

启动 RKNN-Toolkit2 Docker 环境

图4-2 RKNN-Toolkit2 Docker 环境启动结果

4.2.3 生成量化图片列表

在 Docker 环境中进入模型转换工作目录。

Terminal window
cd /test/yolov8/03-model_convert/yolov8_model_convert

执行 gen_list.py,生成量化图片列表。

Terminal window
python gen_list.py

生成量化图片列表

图4-3 量化图片列表生成命令执行结果

生成的量化图片列表会保存为 pic_path.txt

生成的 pic_path.txt 文件

图4-4 生成的 pic_path.txt 文件

4.2.4 将 ONNX 模型转换为 RKNN 模型

rknn_convert.py 默认执行 INT8 量化。主要脚本内容如下。

import sys
from rknn.api import RKNN
ONNX_MODEL = 'yolov8m.onnx'
DATASET = './pic_path.txt'
RKNN_MODEL = './yolov8m_rv1126b.rknn'
QUANTIZE_ON = True
if __name__ == '__main__':
rknn = RKNN(verbose=False)
print('--> Config model')
rknn.config(
mean_values=[[0, 0, 0]],
std_values=[[255, 255, 255]],
target_platform='rv1126b'
)
print('done')
print('--> Loading model')
ret = rknn.load_onnx(model=ONNX_MODEL)
if ret != 0:
print('Load model failed!')
exit(ret)
print('done')
print('--> Building model')
ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET)
if ret != 0:
print('Build model failed!')
exit(ret)
print('done')
print('--> Export rknn model')
ret = rknn.export_rknn(RKNN_MODEL)
if ret != 0:
print('Export rknn model failed!')
exit(ret)
print('done')
rknn.release()

将训练得到的 yolov8m.onnx 放到 yolov8_model_convert 目录下,然后执行以下命令进行模型转换。

Terminal window
python rknn_convert.py

YOLOv8m RKNN 转换终端输出

图4-5 YOLOv8m RKNN 模型转换终端输出

转换成功后,会生成可在 CSUN RV1126B 开发板上运行的 RKNN 模型。

生成的 YOLOv8m RKNN 模型文件

图4-6 生成的 YOLOv8m RKNN 模型文件

5. YOLOv8 模型部署

5.1 模型部署示例说明

本节说明如何将 YOLOv8 模型部署到 RV1126B 开发板。本教程使用的模型是用于动作确认的简单训练样例模型,因此不保证实际项目中的模型精度。

5.2 准备工作

5.2.1 硬件准备

准备 RV1126B 开发板、Type-C 数据线和网线,并使用 MobaXterm 等工具通过 SSH 登录 RV1126B 开发板。详细连接步骤请参考《入门指南》。

通过网线连接的结构示例如下。

RV1126B 开发板 LAN 连接结构

图5-1 RV1126B 开发板 LAN 连接结构

通过 Type-C 线进行串口连接的结构示例如下。

RV1126B 开发板 Type-C 串口连接结构

图5-2 RV1126B 开发板 Type-C 串口连接结构

5.2.2 开发环境准备

首次阅读本手册时,请参考《入门指南》,并按照其中说明完成编译环境搭建。

在 PC 端 Ubuntu 系统中执行 run.sh,进入 RV1126B 编译环境。步骤如下。

Terminal window
cd ~/develop_environment
./run.sh 2204

启动 RV1126B Docker 开发环境

图5-3 RV1126B Docker 开发环境启动结果

5.3 构建示例程序

将下载的资料包移动到 RV1126B Docker 开发环境后,执行以下命令解压。

Terminal window
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/yolov8/04-AI_deploy
tar -xJf yolov8_detect_C_demo.tar.xz

解压后的目录示例如下。

YOLOv8 C Demo 解压后目录

图5-4 YOLOv8 C Demo 解压后的目录

在 RV1126B Docker 开发环境中进入示例程序目录并执行编译。具体命令如下。

Terminal window
sudo mount -t nfs -o vers=3,proto=tcp,mountproto=tcp,nolock,retrans=5,timeo=5 192.168.11.85:/ /mnt
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/yolov8/04-AI_deploy/yolov8_detect_C_demo/
./build.sh

YOLOv8 C Demo 编译结果

图5-5 YOLOv8 C Demo 编译结果

编译成功后,将执行程序目录 yolov8_detect_demo_release/ 复制到 RV1126B 开发板的 /userdata 目录。

Terminal window
cp yolov8_detect_demo_release/ /mnt/userdata/ -rf

5.4 在开发板上运行 YOLOv8 模型

通过串口调试或 SSH 调试进入开发板 shell,然后进入示例程序部署目录。

Terminal window
cd /userdata/yolov8_detect_demo_release

开发板侧 YOLOv8 Demo 执行目录

图5-6 开发板端 YOLOv8 Demo 执行目录

示例程序的执行命令如下。

Terminal window
chmod 777 yolov8_detect_demo
./yolov8_detect_demo yolov8m_rv1126b.rknn test.jpg

执行结果示例如下。算法运行时间约为 106 ms。

RV1126B 上的 YOLOv8 Demo 执行结果

图5-7 RV1126B 上 YOLOv8 Demo 执行结果

推理结果图片可以在 RV1126B 编译环境中通过以下命令获取。

Terminal window
cp /mnt/userdata/yolov8_detect_demo_release/result.jpg .

复制 YOLOv8 推理结果图片命令

图5-8 YOLOv8 推理结果图片复制命令

检测结果图片示例如下。

YOLOv8 目标检测结果图片

图5-9 YOLOv8 目标检测结果图片

至此,YOLOv8 目标检测示例已在 CSUN RV1126B 开发板上正常运行。