保姆级教程,看这一篇就够用了。
在翻阅了网络上很多资料后,发现很多版本的信息比匹配。
花了一周的时间配置环境,以及环境验证,然后写了这篇长文。
有过程,有代码,有经验,欢迎大家批评指正。
一、环境准备
【边缘设备】yolov5训练与rknn模型导出并在RK3588部署~1.环境准备(亲测有效)
二、环境验证
【边缘设备】yolov5训练与rknn模型导出并在RK3588部署~2.环境验证(亲测有效)
三、yolov5 训练自己的模型
【边缘设备】yolov5训练与rknn模型导出并在RK3588部署~3.YOLOv5训练自己的模型(亲测有效)
四、导出模型
【边缘设备】yolov5训练与rknn模型导出并在RK3588部署~4.导出模型(亲测有效)
五、部署模型
【边缘设备】yolov5训练与rknn模型导出并在RK3588部署~5.模型部署(亲测有效)
百度网盘-rknn_yolov5_rk3588_v14 提取码: 8888
在宿主机上打开 Remmina
, 输入 IP地址,用户名,密码 连接开发板。将以上文件下载后,放到开发板上,并解压。
可以看到在 RK3588
上利用 NPU
运行 yolov5
模型,耗时在 33.8 ms
左右。板端环境已经具备。
Miniconda
在板端下载 Miniconda, 版本为
bash Miniconda3-py39_23.3.1-0-Linux-aarch64.sh
一路安装直到成功。
在板端安装完成后。创建并激活虚拟环境
conda create -n rknn python=3.9
conda activate rknn
进入 rknn_toolkit_lite2
目录,
pip install packages/rknn_toolkit_lite2-1.4.0-cp39-cp39-linux_aarch64.whl
如果安装较慢,修改国内的 pip
源,
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
如果缺少其他包库,直接用 pip
进行安装。
进入目录 examples/inference_with_lite
,
执行 python test.py
即可。
至此,板端的 rknn_toolkit_lite2 已经安装和验证完毕。后续可以在板端进行开发和部署 python
程序。
NOTE
如果执行
python test.py
提示缺少librknnrt.so
或librga.so
库,请在 github 下载,或者在其他目录下将librknnrt.so
或librga.so
拷贝至/usr/lib
目录中。
如果想在板端打开终端时默认启动 rknn 的虚拟环境,
vi ~/.bashrc
在里面添加 conda activate rknn
安装 rknn
虚拟环境
conda create -n rknn python=3.8
conda activate rknn
安装 pytorch
虚拟环境
conda create -n pytorch
这里可以简单一点,创建 pytorch
环境的依赖, 也可以按照 pytorch
官方教程下载相应的包。
pip install ultralytics
缺啥补啥: pip install xx
进入 rknn 虚拟环境, 并进入 rknn-toolkit2
目录,
source activate rknn
pip install -r doc/requirements_cp38-1.4.0.txt
requirements_cp38-1.4.0.txt 文件内容如下:
# if install failed, please change the pip source to 'https://mirror.baidu.com/pypi/simple'
# base deps
numpy==1.19.5
protobuf==3.12.2
flatbuffers==1.12
# utils
requests==2.27.1
psutil==5.9.0
ruamel.yaml==0.17.4
scipy==1.5.4
tqdm==4.64.0
bfloat16==1.1
opencv-python==4.5.5.64
# base
onnx==1.9.0
onnxoptimizer==0.2.7
onnxruntime==1.10.0
torch==1.10.1
torchvision==0.11.2
tensorflow==2.6.2
进入 rknn 虚拟环境, 并进入 rknn-toolkit2
目录
source activate rknn
pip install packages/rknn_toolkit2-1.4.0_22dcfef4-cp38-cp38-linux_x86_64.whl
rknn
source activate rknn
python
进入开发环境
from rknn.api import RKNN
没有报错,就说明 RKNN
已经安装成功。
在宿主机上,进入 rknn
虚拟环境,
cd examples/onnx/yolov5/
tree .
.
├── bus.jpg
├── dataset.txt
├── test.py
└── yolov5s.onnx
python test.py
rknn
模型放到板端验证将上述步骤生成的 yolov5s.rknn
放到板端测试。
.
├── lib
│ ├── librga.so
│ └── librknnrt.so
├── model
│ ├── RK356X
│ │ └── yolov5s-640-640.rknn
│ ├── RK3588
│ │ ├── yolov5s-640-640.rknn
│ │ └── yolov5s.rknn
│ ├── RV110X
│ │ └── yolov5s-640-640.rknn
│ ├── bus.jpg
│ └── coco_80_labels_list.txt
├── out.jpg
├── rknn_yolov5_demo
└── testYolov5_rk3588.sh
修改 板端 文件
bash testYolov5_rk3588.sh
中的
./rknn_yolov5_demo model/RK3588/yolov5s-640-640.rknn model/bus.jpg
为
./rknn_yolov5_demo model/RK3588/yolov5s.rknn model/bus.jpg
。
并在板端执行 bash testYolov5_rk3588.sh
ztl@ztl:~/workspace/demo_rknn_yolov5_rk3588_v14$ bash testYolov5_rk3588.sh
post process config: box_conf_threshold = 0.25, nms_threshold = 0.45
Read model/bus.jpg ...
img width = 640, img height = 640
Loading mode...
E RKNN: [05:25:08.050] failed to check rknpu hardware version: 0x46495245
E RKNN: [05:25:08.050] This rknn model is for RK3566, but current platform is RK3588
E RKNN: [05:25:08.050] rknn_init, load model failed!
rknn_init error ret=-1
出现报错信息,重新在宿主机平台上设置平台信息;
将
rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]])
修改为
rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform='rk3588')
并重新执行
python test.py
生成 yolov5s.rknn
模型并上传到板端对应位置。
重新在板端执行 bash testYolov5_rk3588.sh
,运行效果正常。
至此,已经可以在 宿主机 上用给定的 demo
转换模型,并将模型上传到 板端 ,可以正确运行。
NOTE:共有四种方式开发和部署
- 第一种是借助
RKNN-Toolkit2
的功能在模拟NPU
上运行RKNN
模型并获取推理结果(在PC端)- 第二种是借助
RKNN-Toolkit2
的功能, 将板子与PC
连接,将RKNN
模型分发到指定的NPU
设备进行推理并获取推理结果(网络推理在板端,脚本写在PC
端)- 第三种是调用
RKNN SDK
的C/C++
语言API
进行测试代码编写,并使用交叉编译器进行编译,将得到的可执行文件拷贝到板子上运行(开发编译在PC
端,运行在板端),此处也可以通过VS Code
连接板端,在板端开发应用。- 第四种是在板端安装
rknn-toolkit2-lite
工具,使用python
脚本在板端推理(代码开发运行都在板端)
c5360f6e7009eb4d05f14d1cc9dae0963e949213
, 可以直接在 官网github下载, 然后终端执行 git checkout c5360f6e7
。