RK3588转换模型流程

简介
本文章介绍了怎么在搭载了RK3588芯片的主机下使用YOLO系列模型,需要下载的必要资源库ultralytics ,rknn_model_zoo ,rknn-toolkit2 ,具体的流程为:
本例程建立在你了解Python虚拟环境的条件下
作者实验环境
- 瑞芯微主板环境:众云世纪 RK3588 高性能人工智能主板 ZYSJ-2288A
- pt –> onnx 环境:x86 win11
- onnx –> rknn环境:x86 ubuntu22.04
- rknn_model_zoo:v2.2.0
- rknn-toolkit2:v2.2.0
必要资源(先下好!!!先下好!!!)
直接下载最新版本即可,另外,rknn-toolkit SDK,也就是第一代rknn-toolkit SDK,只支持这些芯片:RK1808/RV1109/RV1126/RK3399Pro,其他的芯片型号请继续使用rknn-toolkit2。
- ultralytics (非必选,但是如果后续换成自己改的模型还是需要用到)
- rknn_model_zoo
- rknn-toolkit2
如果你没有x86 Linux主机,请使用虚拟机,推荐使用Ubuntu 22.04版本。
pt模型 –> onnx模型
说明:运行环境为x86 windows系统或linux系统均可,全程不需要配置显卡驱动;选择转换为onnx是因为onnxruntime在转换pt模型的过程中,会去除对硬件计算冗余的节点,并且针对不同硬件(CPU、GPU)进行子图优化,总而言之就是进行了硬件加速。
使用conda或者python自带的venv功能创建一个Python>=3.8
,PyTorch>=1.8
的环境,激活环境后使用以下命令安装ultralytics库:
1 | pip install ultralytics |
找到你的模型目录,**在你创建的虚拟环境下**执行以下命令,即可将你训练好的模型转化成onnx格式:
1 | yolo export model=yourModel.pt format=onnx |
详细参数参考ultralytics官方Export命令参数文档 ,主要调整的参数为half(采用16位半精度的浮点数记录模型参数)和int8(采用8位整数记录模型参数),都是用于减少模型所需算力的。
onnx模型 –> rknn模型
说明:切记转换模型要在x86 Linux系统中进行,因此我们需要再配置一次环境,使用瑞芯微官方的sdk——rknn-toolkit2进行模型转换;转换成rknn是为了充分利用瑞芯微的芯片上NPU的性能,量化某些参数来适配芯片的计算需求。
安装rknn-toolkit2 SDK
在**x86 Linux系统上使用conda或者python自带的venv功能创建一个Python==3.8
(官方推荐版本),激活环境后**,进入rknn-toolkit2 目录目录,根据python版本配置环境,输入以下指令:
1 | pip install -r packages/requirements_cpxx.txt |
使用rknn_model_zoo中的样例将模型转化成rknn格式
进入rknn_model_zoo/examples/yolov8/python
目录,运行convert.py
文件,命令行代码如下:
1 | 进入 rknn_model_zoo/examples/yolov8/python 目录 |
部署模型
回到rk3588主机,配置环境,主要是和c++相关用于编译rknn_model_zoo中的一些样例和后期编写代码时调用rknn-toolkit2中的一些接口:
1 | sudo apt install gcc cmake # gcc就是c++的源码库,cmake则是辅助gcc编译的工具 |
复制一份rknn_model_zoo,进入rknn_model_zoo目录,执行里面的build-linux.sh
脚本,即可编译好对应模型使用的二进制脚本,具体命令如下:
1 | chmod +x build-linux.sh |
该脚本的参数示意如下:
1 ./build-linux.sh -t 芯片类型 -a [aarch64/armhf] -d demo名字 [-b <build_type>] [-m]后两个参数一般用不到,
-b
用于设置编译模式模式,接debug表示展示编译信息,接release表示会对编译进行优化,不显示调试信息,-m
用于在调试过程中展示内存错误。该脚本仅支持编译以下的神经网络模型,其他的需要自己写C++文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 yolov10
mobilesam
LPRNet
yolo_world
yolov6
clip
yolox
deeplabv3
whisper
yamnet
yolov5_seg
yolov8_seg
yolov5
yolov8_obb
mobilenet
RetinaFace
yolov7
resnet
PPOCR-Rec
PPOCR-Det
PPOCR-System
ppyoloe
lite_transformer
ppseg
yolov8
yolov8_pose
wav2vec2
rv1106_rv1103 only support: mobilenet and yolov5/6/7/8/x
编译之后,只要进行到百分之百就是编译成功,编译成功的文件会存储在./build
目录下类似于build_rknn_yoloxx_demo_rkxxxx_linux_Arch_MakeType
的目录下面,目录名字和你编译时使用的参数有关,进入该目录,类似rknn_yoloxx_demo
的无后缀文件就是可以直接用于视觉识别的二进制可执行文件,在正式运行前,还需做一些准备工作:
1 | cd ./build/build_rknn_yoloxx_demo_rkxxxx_linux_Arch_MakeType |
下面展示一下我识别的长颈鹿:
参考资料:
- Title: RK3588转换模型流程
- Author: APLaS
- Created at : 2024-10-30 00:47:17
- Updated at : 2024-10-30 01:18:58
- Link: https://aplas-plus.github.io/uncategorized/RK3588转换模型流程/
- License: This work is licensed under CC BY-NC-SA 4.0.