RK3588部署Yolov5自训练模型

本文详细介绍了如何在RK3588开发板上部署自训练的YOLOv5模型。从创建训练环境、拉取YOLOv5工程、训练模型、模型推理,到导出RKNN模型,再到最终在RK3588上安装rknn_toolkit2_lite并进行推理测试,每个步骤都提供了详细的步骤和注意事项,包括模型转换和环境配置等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结果展示:

目录

结果展示:

硬件环境:

一. 训练Yolov5的模型

1.创建训练环境

2.拉取yolov5工程

3. 训练自己的模型

4.模型推理

二. 导出rknn模型

1. 创建导出环境

2. pt转onnx模型

3. onnx转rknn模型

三. 部署到rk3588

1. 安装rknn_toolkit2_lite

2. 推理测试



硬件环境:

PC:Ubuntu22.04

RK3588开发板:野火的鲁班猫4

一. 训练Yolov5的模型

本文所使用的yolov5模型版本为yolov5-v7版本,git如下:
https://github.com/ultralytics/yolov5/blob/v7.0/.github/README_cn.md

1.创建训练环境

为了和其他环境隔离开,使用虚拟环境进行训练,方法如下:

mkdir yolov5 & cd yolov5
virtualenv y5 #virtualenv可以通过pip来进行安装
source y5/bin/activate

2.拉取yolov5工程

git clone https://github.com/ultralytics/yolov5

3. 训练自己的模型

cd yolov5
python3 train.py --img 640 --batch 16 --epochs 20 --data data/luosi.yaml --cfg models/yolov5s.yaml

训练好的模型路径如下所示:

训练过程参考https://blog.youkuaiyun.com/u010492025/article/details/134337251

4.模型推理

使用上一步训练好的模型进行推理:

python3 detect.py --weights runs/train/exp2/weights/best.pt --source ../640/images/N_601.jpg

推理结果保存路径如下图所示:

具体效果如下,相似度还是很高的:

二. 导出rknn模型

rk3588有自己的npu,要想使用npu进行推理,需要将模型转换为rknn模型,上一步我们训练出来的模型为pt模型,要转换为rknn模型需要借助官网提供的工具rknn-toolkit2,github仓库如下:

GitHub - airockchip/rknn-toolkit2

本文中所使用的版本为1.5.0版本

1. 创建导出环境

先创建虚拟环境:

mkdir rknn-toolkit1.5 & cd rknn-toolkit1.5
virtualenv toolkit1.5
source toolkit1.5/bin/activate

下载rknn-toolkit2-1.5.0代码,并解压到rknn-toolkit1.5

安装依赖环境:

cd rknn-toolkit2-master/
#选择对应python版本的文件进行安装,我所使用的python为3.10,所以悬在cp310
pip install -r doc/requirements_cp310-1.5.0.txt
#安装依赖环境之后,安装对应的安装包
pip install packages/rknn_toolkit2-1.5.0+1fa95b5c-cp310-cp310-linux_x86_64.whl

验证环境:

没有报错说明安装成功。

2. pt转onnx模型

pt模型不能直接转换为rknn模型,需要先转为onnx或者touchscript格式,在本文中转换为onnx模型。

需要注意的是此步骤是在训练环境中进行的,而不是在导出环境。

在转换之前需要修改一下yolov5的源码,之所示要修改源码是因为按照正常的导出为onnx模型只有一个输出,而rknn模型需要三个输出,所示在将pt模型转为onnx时就需要让模型有三个输出。

修改文件models/yolo.py,如下图所示:

接下来导出onnx模型:

python3 export.py --weights runs/train/exp2/weights/best.pt --img 640 --batch 1 --include onnx --opset 12

以上导出命令有2个需要注意的地方:

① --batch 1      batch一定要指定为1,否则在使用转换后的模型进行推理的时候所需的图片数量可能不是1,会导致推理出错

② --opset 12    在后面步骤中使用rknn-toolkit2工具进行转rknn的时候可能会报错

导出的j结果如图所示:

3. onnx转rknn模型

此步骤需要在第1步创建的导出环境下进行。

进入rknn-toolkit2-master/examples/onnx目录下,复制yolov5为yolov5_test

我们使用yolov5_test来导出我们自己的模型。

首先将上一步导出的best.onnx模型复制到yolov5_test目录下;

还需要复制一张测试图片到yolov5_test目录下,用来做验证。

cd yolov5_test
cp ~/yolov5/yolov5/runs/train/exp2/weights/best.onnx ./
cp ~/N_601.jpg ./

修改test.py,中文注释的地方为修改的地方

import os
import urllib
import traceback
import time
import sys
import numpy as np
import cv2
from rknn.api import RKNN

ONNX_MODEL = &#
### RK3588平台部署YOLOv5模型方法 #### 获取YOLOv5代码及模型 为了在RK3588平台上成功部署YOLOv5模型,需先从指定的yolov5仓库获取必要的源码和预训练权重文件。这一步骤确保了所使用的YOLOv5版本兼容于后续针对RK系列芯片优化的操作[^1]。 ```bash git clone https://github.com/ultralytics/yolov5.git cd yolov5 ``` #### 转换模型格式 由于直接使用PyTorch(.pt)格式的模型无法被RKNN工具链有效支持,在RK3588上高效运行YOLOv5需要将原始.pt模型转换成ONNX格式作为中间表示形式。这一过程可通过执行`export.py`脚本来实现: ```python python export.py --include onnx --weights yolov5s.pt ``` 上述命令会基于给定的`.pt`文件导出对应的`.onnx`文件,该文件随后可以进一步转化为适用于RK3588硬件加速特性的专用格式。 #### 编译并适配RK3588环境 对于已经获得的ONNX模型,下一步是利用RKNN Toolkit将其编译为适合RK3588架构下的特定二进制文件(通常是.rknn)。这个过程中可能涉及到设置目标设备参数如`--target=rk3588`等选项以匹配具体应用场景需求[^2]。 ```bash pip install rknn-toolkit2 rknn_toolkit.convert.onnx_to_rknn input_model=yolov5s.onnx output_model=yolov5s-640-640.rknn target=rk3588 ``` #### 配置ROS节点启动YoloV5检测服务 如果计划集成到机器人操作系统(ROS)环境中,则可以通过配置相应的launch文件来简化启动流程。特别注意的是,在调用`roslaunch`指令时应指明具体的SoC类型以便正确加载驱动程序和其他依赖项。 ```xml <launch> <!-- 设置soc型号 --> <arg name="chip_type" default="RK3588"/> <!-- 启动YOLO V5 ROS节点 --> <node pkg="rknn_ros" type="yolov5_node" name="yolov5_detector"> ... </node> </launch> # 执行如下命令启动YOLO V5 ROS服务 roslaunch rknn_ros yolov5.launch chip_type:=RK3588 ``` #### 应用实例演示 最后,当一切准备就绪之后,便能够借助预先打包好的示例应用程序来进行实际测试验证整个部署方案的有效性。这里给出了一条用于展示如何加载已编译好.yolov5s-640-640.rknn模型并对图片进行对象识别的具体命令行语句[^3]。 ```bash ./rknn_yolov5_demo ./model/RK3588/yolov5s-640-640.rknn ./test_images/bus.jpg ``` #### 图像预处理注意事项 值得注意的是,在正式进入模型推理阶段之前,输入数据通常还需要经历一系列标准化变换操作——比如颜色空间调整、尺寸缩放以及填充边界至统一大小等等;这些前期准备工作既可以在CPU端依靠OpenCV库函数完成也可以考虑采用内置GPU/DSP单元提供的高性能图像处理API接口加快速度[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老夫是子龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值