跳转到内容

YOLOv5训练部署指南

文档信息

本教程介绍 YOLOv5 目标检测模型的训练方法,以及将模型部署到 CSUN RV1126B 开发板的完整流程。

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

1. YOLOv5概述

YOLOv5模型由Ultralytics公司于2020年6月9日公开发布,是一种目标检测模型。该模型基于YOLOv3改进而来,提供YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四种模型。

与YOLOv4相比,YOLOv5在检测精度下降较小的情况下,具有平均权重文件更小、训练时间和推理时间更短等特点。YOLOv5的网络结构由输入端、Backbone、Neck和Head四个部分组成。

本教程说明YOLOv5目标检测算法的训练方法,以及部署到CSUN RV1126B开发板的步骤。数据标注方法请参考已发布的相关文档。

YOLOv5训练与部署整体流程

图1-1 YOLOv5训练与部署整体流程

2. 资料下载

本手册所需资料和源码请从以下链接下载。

https://dl.dragonwake.com/download/rv1126b/AI/demo/yolov5/AIDemo_yolov5_All.zip

解压后的目录结构如下。

|-- 01-data 数据集
|-- 02-training 训练用源码
|-- 03-model_convert AI模型转换用源码
|-- 04-AI_deploy AI模型部署用源码

AIDemo YOLOv5解压后的目录结构

图2-1 AIDemo_yolov5_All.zip解压后的目录结构

3. 数据集准备

3.1. 数据集下载

从“2. 资料下载”下载软件包后,在01-data目录下执行以下命令解压数据集。

Terminal window
unzip mask.zip

解压后可以得到以下文件或文件夹。

  • images:用于训练和验证的图片文件
  • labels:每张图片对应的YOLO格式标签文件
  • list_dataset_file.py:用于生成训练和验证图片路径列表的脚本

YOLOv5数据集解压后的文件结构

图3-1 数据集解压后的文件结构

3.2. 生成路径列表

进入RV1126B Docker开发环境后,在数据集目录中执行list_dataset_file.py

Terminal window
cd ~/linuxshare/work/rv1126b/jp/embedded/images/develop_environment
./run.sh 2204
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/yolov5/01-data/
python list_dataset_file.py

执行完成后,会生成训练样本列表train.txt和验证样本列表valid.txt

生成路径列表的终端输出

图3-2 list_dataset_file.py执行结果

后续训练配置文件会引用这两个列表文件。

生成的train.txt和valid.txt

图3-3 生成的train.txt和valid.txt

4. YOLOv5目标检测算法训练

4.1. 下载训练源码

在PC端使用Git克隆公司GitHub仓库。由于网络情况不同,克隆过程可能需要一定时间。

Terminal window
git clone https://github.com/csunltd/rv1126b-yolov5.git

克隆YOLOv5仓库的终端输出

图4-1 克隆YOLOv5仓库

克隆完成后,可以看到如下目录结构。

YOLOv5训练源码目录结构

图4-2 YOLOv5训练源码目录结构

4.2. 模型训练

进入YOLOv5工作目录,以下以训练口罩检测模型为例进行说明。训练前,需要根据实际数据集位置修改data/mask.yaml中的train.txtvalid.txt路径。

# Train/val/test sets
path: ../../01-data
train: train.txt
val: valid.txt
test: valid.txt
# Classes
nc: 2
names: ['head', 'mask']

mask.yaml配置示例

图4-3 mask.yaml配置示例

安装训练所需Python模块。

Terminal window
pip install PyYAML tqdm ultralytics pandas seaborn

执行以下命令开始训练。

Terminal window
python train.py --data mask.yaml --cfg yolov5s.yaml --weights "" --batch-size 64

训练开始后,终端会显示epoch、loss、精度等信息。训练结果会保存到./runs/train/exp*/目录,精度结果可通过results.csv查看。

YOLOv5训练终端输出

图4-4 YOLOv5训练终端输出

4.3. 在PC端进行模型推理

训练完成后,验证集效果最好的模型通常会生成在./runs/train/exp*/weights/best.pt。执行以下命令进行推理,初步评估模型检测效果。

Terminal window
python detect.py --source data/images --weights ./runs/train/exp8/weights/best.pt --conf 0.5

推理结果会保存到./runs/detect/exp*/目录。

PC端YOLOv5口罩检测结果

图4-5 PC端YOLOv5口罩检测结果

4.4. 将pt模型转换为ONNX模型

将算法部署到CSUN RV1126B开发板时,最终需要转换为RKNN模型。在转换为RKNN之前,需要先将PyTorch的pt模型转换为ONNX模型,同时会生成best.anchors.txt

Terminal window
python export.py --include onnx --rknpu RV1126 --weights ./runs/train/exp8/weights/best.pt

为了提高RV1126B与RKNN转换工具的兼容性,建议显式指定--opset 12

Terminal window
python export.py --include onnx --rknpu RV1126 --opset 12 --weights ./runs/train/exp8/weights/best.pt

ONNX模型文件会生成在best.pt所在目录。

ONNX转换后生成的best.onnx和best.anchors.txt

图4-6 ONNX转换后生成的文件

5. rknn-toolkit模型转换

5.1. 构建rknn-toolkit模型转换环境

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

模型转换环境搭建步骤请参考《AI模型转换环境构建指南》。

5.2. 将ONNX模型转换为RKNN模型

.rknn后缀模型可在CSUN RV1126B开发板上进行评估和运行。TensorFlow、TensorFlow Lite、Caffe、Darknet、ONNX、PyTorch等常见训练模型均可使用RKNN-Toolkit2转换为RKNN模型。其他框架训练得到的模型,也可先转换为ONNX格式,再转换为RKNN。

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

5.2.1. 展开模型转换Demo

模型转换Demo可从“2. 资料下载”下载并解压。

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

YOLOv5模型转换Demo解压后的目录

图5-1 模型转换Demo解压后的目录

5.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环境的终端输出

图5-2 进入rknn-toolkit2 Docker环境

5.2.3. 生成量化图片列表

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

Terminal window
cd /test/yolov5/03-model_convert/yolov5_model_convert

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

Terminal window
python gen_list.py

生成量化图片列表的终端输出

图5-3 生成量化图片列表的终端输出

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

生成的pic_path.txt

图5-4 生成的pic_path.txt

5.2.4. 将ONNX模型转换为RKNN模型

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

import os
import urllib
import traceback
import time
import sys
import numpy as np
import cv2
from rknn.api import RKNN
ONNX_MODEL = 'best.onnx'
RKNN_MODEL = './yolov5_mask_rv1126b.rknn'
DATASET = './pic_path.txt'
QUANTIZE_ON = True
if __name__ == '__main__':
rknn = RKNN(verbose=True)
if not os.path.exists(ONNX_MODEL):
print('model not exist')
exit(-1)
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 yolov5 failed!')
exit(ret)
print('done')
print('--> Building model')
ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET)
if ret != 0:
print('Build yolov5 failed!')
exit(ret)
print('done')
print('--> Export RKNN model')
ret = rknn.export_rknn(RKNN_MODEL)
if ret != 0:
print('Export yolov5 rknn failed!')
exit(ret)
print('done')

best.onnx放入yolov5_model_convert目录,然后执行以下命令开始转换。

Terminal window
python rknn_convert.py

RKNN模型转换终端输出

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

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

生成的RKNN模型文件

图5-6 生成的RKNN模型文件

6. YOLOv5模型部署

6.1. 模型部署示例说明

本节说明YOLOv5模型部署到RV1126B开发板的流程。该模型仅经过简单训练,用作示例模型,不保证模型精度。

6.2. 准备工作

6.2.1. 硬件准备

准备RV1126B开发板、Type-C数据线和网线。可使用MobaXterm等工具通过SSH登录RV1126B开发板。详细内容请参考入门指南。

使用网线连接。

RV1126B开发板LAN连接示例

图6-1 RV1126B开发板LAN连接示例

使用Type-C串口线连接。

RV1126B开发板Type-C串口连接示例

图6-2 RV1126B开发板Type-C串口连接示例

6.2.2. 开发环境准备

初次阅读本文档时,请参考《入门指南》,按照其中步骤搭建编译环境。

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

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

进入RV1126B Docker开发环境的终端输出

图6-3 进入RV1126B Docker开发环境

6.3. 示例程序编译

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

Terminal window
cd /opt/linuxshare/work/rv1126b/jp/AI/demo/Tutorial/yolov5/04-AI_deploy
tar -xvf yolov5_detect_C_demo.tar.bz2

YOLOv5检测Demo解压后的目录

图6-4 YOLOv5检测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/yolov5/04-AI_deploy/yolov5_detect_C_demo/
./build.sh

YOLOv5检测Demo编译结果

图6-5 YOLOv5检测Demo编译结果

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

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

将YOLOv5检测Demo复制到开发板

图6-6 将YOLOv5检测Demo复制到开发板

6.4. 在开发板上运行YOLOv5模型

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

Terminal window
cd /userdata/yolov5_detect_demo_release/

执行示例程序。

Terminal window
chmod 777 yolov5_detect_demo
sudo ./yolov5_detect_demo

执行结果如下,算法执行时间约为48ms。

在RV1126B开发板上运行YOLOv5检测Demo

图6-7 在RV1126B开发板上运行YOLOv5检测Demo

在RV1126B编译环境中,可以通过以下命令取回测试图片。

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

从开发板取回检测结果图片

图6-8 从开发板取回检测结果图片

测试结果如下。

RV1126B开发板YOLOv5口罩检测结果

图6-9 RV1126B开发板YOLOv5口罩检测结果

至此,YOLOv5目标检测示例已成功在开发板上运行。