[Rock Pi] (四) RK3588S开发板部署yolov5模型及resnet18模型(官方提供的模型)

本文详细介绍了如何在宿主机和RockPi开发板上分别使用C++和Python部署YOLOv5和ResNet18模型,涉及源码下载、交叉编译、环境配置、依赖库安装和常见问题解决。

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

参考

rockchip rknn-tookit2
rockchip rknpu2

开发环境介绍

宿主机 HostPC: 装有ubuntu22.04(其它亦可参考)
Docker: ubuntu20.04
开发板:rock 5a with rk3588s 芯片
宿主机环境配置
[Rock Pi 1] Rock pi 开启VNC远程桌面适用于VNC+KDE桌面
[Rock Pi 2] rknn宿主机端配置之docker开发环境部署

YOLO v5 模型部署(C++版)

源码下载(宿主机端)

#根据上篇文章创建的docker虚拟机编号执行下面指令进入docker虚拟机
dengml@dengml-SER:~$ sudo docker exec -it -u dengml -w /home/dengml 612c918d5027 /bin/bash
[sudo] dengml 的密码:
dengml@612c918d5027:~$ cd /data/ubuntu/rockpi/rknn-toolkit2
#执行以下命令使能之前创建的python虚拟环境(虽然本节似乎没用到宿主机的python)
dengml@612c918d5027:/data/ubuntu/rockpi/rknn-toolkit2$ source venv/bin/activate
#获取rknpu2源代码
(venv) dengml@612c918d5027:/data/ubuntu/rockpi$ git clone https://kgithub.com/rockchip-linux/rknpu2.git

此代码中包含yolo v5等多个模型的demo,这里我们先部署官方提供的rknn模型

安装交叉编译工具(宿主机端)

ubuntu软件库里已经包含了交叉aarch64-linux交叉编译工具链,因此本着一切从简的原则可以直接使用apt 安装如下:

$ sudo apt update
$ sudo apt-get install gcc-aarch64-linux-gnu
$ sudo apt-get install g++-aarch64-linux-gnu
#安装 cmake 编译工具
$ sudo apt install cmake

源码编译(宿主机端)

$ cd rknpu2/examples/rknn_yolov5_demo
$ ./build-linux_RK3588.sh
#代码通过scp到开发板端,也可以通过winscp、samba、等其他方式
$ scp -r install/rknn_yolov5_demo_Linux rock@192.168.1.13:~/work

验证(开发板端)

编译后的二进制及模型文件scp到板子后,通过ssh登陆到开发板端
develop board

#打开cp过来的目录
rock@rock-5a:~$ cd work/rknn_yolov5_demo_Linux/
#添加运行依赖的动态库
rock@rock-5a:~/work/rknn_yolov5_demo_Linux$ export LD_LIBRARY_PATH=./lib
#执行识别命令
rock@rock-5a:~/work/rknn_yolov5_demo_Linux$ ./rknn_yolov5_demo model/RK3588/yolov5s-640-640.rknn model/bus.jpg

命令执行后结果如图所示
在这里插入图片描述

运行中的log如图所示,首先在moba界面点击SFTP文档管理器界面(标记为“1”处),点击“2”处一般可以直接打开右边终端所在的目录,如果不能自动打开,就在“3”处输入我们右边终端所在的目录,如上图所示。我们可以看到生成了一个新的文件out.jpg, 即模型生成的结果。至此,C++版本的rknn模型部署完成。双击打开,结果如下
result_by_c

resnet18 模型部署到开发板(Python 版)

开发板安装conda 虚拟环境

参考:[Rock Pi] (三) RK3588平台嵌入式linux平台安装配置miniconda
最后激活rknn虚拟python环境。

加载rknn-toolkit2仓库

将rknn-toolkit2拷贝到开发板。可以直接在github上克隆,或者通过scp的方式从host pc复制到开发板。如下:

(rknn) rock@rock-5a:~/work/rknn-toolkit2$ pwd
/home/rock/work/rknn-toolkit2

安装依赖库

首先需要为板子的系统添加国内源,我的板子运行的时ubuntu22.04系统,其他版本的系统需要参考网上的教程,添加国内源,这里讲一下ubuntu22.04 arm64版本添加国内源的方法(添加源的链接有差异,方法一致)。编辑/etc/apt/source.list 文件,添加国内源的路径,添加后的该文件内容为:

deb http://ports.ubuntu.com/ubuntu-ports jammy main restricted universe multiverse
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-proposed main restricted universe multiverse

添加完成后需要更新软件源

sudo apt update
sudo apt install python3-dev
···
安装完成后,安装rknn所需的python库
···b
(rknn) rock@rock-5a:~/work/rknn-toolkit2/rknn_toolkit_lite2$ pip3 install ./packages/rknn_toolkit_lite2-1.5.2-cp310-cp310-linux_aarch64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

由于模型运行以来rk官方的runtime库,所以需要在github上下载rknpu的库:rknpu2 。并将runtime库复制到板子的/usr/lib目录下

git clone -b master https://github.com/rockchip-linux/rknpu2.git
sudo cp  rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/librknn* /usr/lib/

运行示例

打开rknn-toolkit-lite, 并执行test.py, 得到输出,根据输出的Top 5 结果,该模型可以识别出图像中的物体名称。
中间遇到一些问题。总结在下方

(rknn) rock@rock-5a:~:cd ~/work/rknn-toolkit2/rknn_toolkit_lite2/examples/inference_with_lite
(rknn) rock@rock-5a:~/work/rknn-toolkit2/rknn_toolkit_lite2/examples/inference_with_lite$ python test.py
--> Load RKNN model
done
--> Init runtime environment
I RKNN: [22:27:50.764] RKNN Runtime Information: librknnrt version: 1.5.2 (c6b7b351a@2023-08-23T15:28:22)
I RKNN: [22:27:50.764] RKNN Driver Information: version: 0.8.2
W RKNN: [22:27:50.764] Current driver version: 0.8.2, recommend to upgrade the driver to the new version: >= 0.8.8
I RKNN: [22:27:50.765] RKNN Model Information: version: 6, toolkit version: 1.5.2-source_code(compiler version: 1.5.2 (71720f3fc@2023-08-21T09:35:42)), target: RKNPU v2, target platform: rk3588, framework name: PyTorch, framework layout: NCHW, model inference type: static_shape
done
--> Running model
resnet18
-----TOP 5-----
[812]: 0.9996760487556458
[404]: 0.00024927023332566023
[657]: 1.449744013370946e-05
[466 833]: 9.023910024552606e-06
[466 833]: 9.023910024552606e-06

done

问题及解决办法

1. No module named ‘cv2’

Traceback (most recent call last):
 File "/home/rock/work/rknn-toolkit2/rknn_toolkit_lite2/examples/inference_with_lite/test.py", line 1, in <module>
   import cv2
ModuleNotFoundError: No module named 'cv2'

解决办法:
执行

conda install opencv

2. ModuleNotFoundError: No module named ‘rknnlite’

解决办法:安装rknn_toolkit_lite2-1.5.2-cp310-cp310-linux_aarch64.whl

pip3 install rknn_toolkit_lite2-1.5.2-cp310-cp310-linux_aarch64.whl   -i https://pypi.tuna.tsinghua.edu.cn/simple

3. rknn_toolkit_lite2-1.5.2-cp310-cp310-linux_aarch64.whl 安装出错

        203 | #include_next <limits.h>                /* recurse down to the real one */
            |               ^~~~~~~~~~
      compilation terminated.
      psutil could not be installed from sources. Perhaps Python header files are not installed. Try running:
        sudo apt-get install gcc python3-dev
      error: command '/usr/bin/gcc' failed with exit code 1
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for psutil
  Building wheel for ruamel.yaml.clib (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for ruamel.yaml.clib (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [24 lines of output]

解决办法:

sudo apt install python3-dev 

遇到的包安装不上的问题,可以参考上面添加并更新软件源

4. 缺runtime库的问题

Exception: Can not find dynamic library on RK3588!
Please download the corresponding librknnrt.so from https://github.com/rockchip-linux/rknpu2/tree/master/runtime/RK3588/Linux/librknn_api/aarch64 and move it to directory /usr/lib/
解决办法:

git clone -b master https://github.com/rockchip-linux/rknpu2.git

sudo cp rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/librknn* /usr/lib/
### RK3588平台上部署ResNet模型进行分类任务的方法 #### 一、概述 RK3588是一款高性能处理器,内置NPU模块,处理性能高达6TOPS[^3]。为了在该平台上成功部署ResNet模型用于分类任务,通常需要经历以下几个阶段:模型训练、模型转换以及实际部署。 --- #### 二、具体方法与流程 ##### (1)模型选择与准备 ResNet是一种经典的卷积神经网络架构,具有良好的泛化能力和较高的准确性[^2]。可以选择适合目标硬件资源的变体(如ResNet18ResNet50)。如果数据集较小或者计算资源有限,建议优先考虑轻量级版本如ResNet18。 - **获取预训练权重** 可以通过PyTorch官方或其他公开渠道下载对应的数据集上的预训练参数文件.pth。 - **微调适配特定场景** 如果应用场景不同于原始训练条件,则需针对新数据重新调整最后几层全连接部分并继续优化整个网络结构直至收敛为止。 ##### (2)环境搭建与工具安装 确保开发环境中已正确设置好Python虚拟环境及相关依赖库: ```bash pip install torch torchvision rknn-toolkit2 ``` 同时参照文档说明完成驱动程序加载以及其他必要的初始化操作以便后续顺利开展工作。 ##### (3)PTH到ONNX格式转化 利用Pytorch框架提供的功能实现从`.pth`保存形式向通用中间表示(Intermediate Representation)-即Open Neural Network Exchange (ONNX)标准过渡的过程非常简便快捷: ```python import torch from resnet import ResNet18 # 假设定义了一个resnet.py脚本包含了所需的类定义 dummy_input = torch.randn(1, 3, 224, 224).cuda() model = ResNet18().eval().cuda() output_onnx = 'resnet18.onnx' input_names = ["actual_input_1"] output_names = ["output1"] torch.onnx.export(model, dummy_input , output_onnx, verbose=True, input_names=input_names, output_names=output_names) print("Export of resnet18.onnx complete!") ``` 此段代码片段展示了如何将一个已经实例化的ResNet18对象导出成兼容性强且易于移植的目标文件类型——onnx。 ##### (4)进一步转制为RKNN格式 借助于Rockchip公司专门为旗下产品线定制开发出来的rknn toolkit软件包来简化这一环节的工作负担: ```python from rknn.api import RKNN # Create RKNN object rknn = RKNN(verbose=True) # Pre-process config rknn.config(mean_values=[[123.675, 116.28, 103.53]], std_values=[[58.395, 57.12, 57.375]]) # Load ONNX model ret = rknn.load_onnx('resnet18.onnx') if ret != 0: print('Load failed!') exit(ret) # Build model ret = rknn.build(do_quantization=False) if ret != 0: print('Build failed!') exit(ret) # Export RKNN model ret = rknn.export_rknn('./resnet18.rknn') if ret != 0: print('Export .rknn failed!') else: print('done') rknn.release() ``` 上述例子详细描述了创建RKNN实例之后的一系列常规步骤,包括但不限于指定输入图片像素均值/方差标准化参数配置;读取先前生成好的onnx源码;构建量化后的最终产物等等。 ##### (5)上传至设备端运行测试 最后一步就是把刚刚制作完毕的rknn格式镜像拷贝过去给嵌入式主板加载起来做实时预测啦! 可以通过SSH命令行方式传输文件: ```bash scp ./resnet18.rknn root@<your_device_ip>:/path/to/save/ ``` 接着按照官方样例编写简单的应用程序调用API接口即可看到预期效果呈现出来咯~ --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值