【边缘设备】yolov5训练与rknn模型导出并在RK3588部署~2.环境验证(亲测有效)

保姆级教程,看这一篇就够用了。
在翻阅了网络上很多资料后,发现很多版本的信息比匹配。
花了一周的时间配置环境,以及环境验证,然后写了这篇长文。
有过程,有代码,有经验,欢迎大家批评指正。

一、环境准备
【边缘设备】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 左右。板端环境已经具备。

(二)RKNN-Toolkit2-Lite(板端)

1. 安装 Miniconda

在板端下载 Miniconda, 版本为
在这里插入图片描述

bash Miniconda3-py39_23.3.1-0-Linux-aarch64.sh

一路安装直到成功。

2. 虚拟环境

板端安装完成后。创建并激活虚拟环境

conda create -n rknn python=3.9
conda activate rknn

进入 rknn_toolkit_lite2 目录,

3. 安装环境依赖

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 进行安装。

4. 测试验证

进入目录 examples/inference_with_lite

执行 python test.py 即可。

至此,板端的 rknn_toolkit_lite2 已经安装和验证完毕。后续可以在板端进行开发和部署 python 程序。

NOTE

如果执行 python test.py 提示缺少 librknnrt.solibrga.so 库,请在 github 下载,或者在其他目录下将 librknnrt.solibrga.so 拷贝至 /usr/lib 目录中。

如果想在板端打开终端时默认启动 rknn 的虚拟环境,

vi ~/.bashrc

在里面添加 conda activate rknn

(三)宿主机

1. 创建并激活虚拟环境

安装 rknn 虚拟环境

conda create -n rknn python=3.8
conda activate rknn

安装 pytorch 虚拟环境

conda create -n pytorch

这里可以简单一点,创建 pytorch 环境的依赖, 也可以按照 pytorch 官方教程下载相应的包。

pip install ultralytics

缺啥补啥: pip install xx

2. 安装依赖

进入 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

3. 安装环境

进入 rknn 虚拟环境, 并进入 rknn-toolkit2 目录

source activate rknn
pip install packages/rknn_toolkit2-1.4.0_22dcfef4-cp38-cp38-linux_x86_64.whl

4. 进入 rknn 虚拟环境, 并验证是否安装成功 rknn

source activate rknn

在这里插入图片描述

python 进入开发环境

from rknn.api import RKNN

没有报错,就说明 RKNN 已经安装成功。

5. 测试

宿主机上,进入 rknn 虚拟环境,

cd examples/onnx/yolov5/
tree .
.
├── bus.jpg
├── dataset.txt
├── test.py
└── yolov5s.onnx
python test.py

在这里插入图片描述

6. 将 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 SDKC/C++ 语言 API 进行测试代码编写,并使用交叉编译器进行编译,将得到的可执行文件拷贝到板子上运行(开发编译在 PC 端,运行在板端),此处也可以通过 VS Code 连接板端,在板端开发应用。
  • 第四种是在板端安装 rknn-toolkit2-lite 工具,使用 python 脚本在板端推理(代码开发运行都在板端)

参考(以下为编撰本文的引用参考)

  1. yolov5训练pt模型并转换为rknn模型,部署在RK3588开发板上——从训练到部署全过程
  2. RK3588模型推理总结
  3. NPU使用
  4. 一步一步教大家使用RK3588的NPU之在电脑端交叉编译yolov5运行在ARM平台上-哔哩哔哩
  5. 转换yolov5s.onnx为rknn模型RK3588主板实时推理和电脑端模拟推理-哔哩哔哩
  6. 摆脱电脑,直接在RK3588平台上推理,帮用户部署 RKNN 模加速 AI 应用的落地-哔哩哔哩】
  7. 仓库下载 参考 rknn-toolkit 教程, 需要切换到 commit ID c5360f6e7009eb4d05f14d1cc9dae0963e949213, 可以直接在 官网github下载, 然后终端执行 git checkout c5360f6e7

你可能感兴趣的:(PyTorch,项目及产品管理,YOLO,pytorch)