RK3588使用npu运行onnx模型推理

前言

先说总体流程:
1.在x86主机上安装【rknn-toolkit2】
2.使用【rknn-toolkit2】,把onnx模型转换成rknn格式的模型。
3.在板子部署【rknpu2】,在编程时,调用其提供的接口即可。

1.安装rknn-toolkit2

最好先按照这里【ubuntu安装Miniconda】装个miniconda,注意要选择合适的版本。
conda的好处是可以创建独立的环境,防止环境之间污染。
创建虚拟环境之前,我们先看看rknn-toolkit2对环境的要求是啥。
在rknn-toolkit2的官网看到,在Ubuntu 22.04系统下,使用的是python 3.10,理论上我们需要创建一个这样的环境。
在这里插入图片描述

1.1 .创建一个名为rknn-toolkit2的虚拟环境

# conda create -n rknn-toolkit2 python=3.10
# conda create -n rknn-toolkit2 python=3.8
conda create -n rknn-toolkit2 python=3.6

经过实际测试,不能使用3.10、3.8的python,否则在安装到最后时会报类似下面的错误:

ERROR: Ignored the following versions that require a different python version: 1.6.2 Reguires-Python >=3.7,<3.10: 1.6.3 ReguiresPython 2=3,7 ,<3,10: 1.7.0 Reguires-Python >=3.7,<3.10; 1.7.1 Requires-Python >=3.7,<3.10ERROR: Could not find a version that satisfies the reguirement tf-estimator-nightly==2.8.0.dev2021122109 (from tensorflow) (from versions: none)ERROR: No matching distribution found for tf-estimator-nightly==2.8.0.dev2021122109

在这里插入图片描述

关于这个错误,评论区有同学指出,可以使用默认源( 也就是添加【-i https://pypi.org/simple/】后缀,
或者直接不添加任何后缀),即可解决此报错问题。各位可以试试

1.2.下载【rknn-toolkit2】

在这里插入图片描述将下载得到的文件放到一个文件夹下,解压
在这里插入图片描述

1.3.在此文件夹下打开控制台,激活使用前面创建的conda环境,执行install

conda activate rknn-toolkit2

从packages文件夹中选择合适的文件进行install,我这里是python 3.6的,所以我选择了rknn_toolkit2-1.5.2+b642f30c-cp36-cp36m-linux_x86_64.whl (下面命令中的 -i https://pypi.tuna.tsinghua.edu.cn/simple,是指定源,速度快很多)

cd rknn-toolkit2-1.5.2/packages
pip install rknn_toolkit2-1.5.2+b642f30c-cp36-cp36m-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述

安装时,会自动下载tensorflow、torch等组件,会占用较大空间,最好要先预留2G以上的空间。
安装起来慢的话,可以分别试试这几个源:

清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

1.4.验证安装

安装完成之后,执行一下下面的命令,检验是否已经安装好了。假如没报错的话,就是已经成功安装了。

python
from rknn.api import RKNN

2.将onnx模型转为rknn模型

可以先跑一下自带的例程。在 rknn-toolkit2-1.5.2/examples/onnx/yolov5下面。在这里插入图片描述假如能够顺利跑完,那应该会生成一个yolov5s_relu.rknn。

在这里插入图片描述假如我们想转换自己的onnx模型,可以直接利用下面这个代码(代码来源):

from rknn.api import RKNN
import os

if __name__ == '__main__':
    platform = 'rk3588'
    onnxModel = 'yolox_s.onnx'

    '''step 1: create RKNN object'''
    rknn = RKNN()

    '''step 2: load the .onnx model'''
    rknn.config(target_platform=platform, optimization_level = 2)
    print('--> Loading model')
    ret = rknn.load_onnx(onnxModel)
    if ret != 0:
        print('load model failed')
        exit(ret)
    print('done')

    '''step 3: building model'''
    print('-->Building model')
    ret = rknn.build(do_quantization=False)
    if ret != 0:
        print('build model failed')
        exit()
    print('done')

    '''step 4: export and save the .rknn model'''
    OUT_DIR = 'rknn_models'
    RKNN_MODEL_PATH = './{}/{}.rknn'.format(OUT_DIR, onnxModel)
    if not os.path.exists(OUT_DIR):
        os.mkdir(OUT_DIR)
    print('--> Export RKNN model: {}'.format(RKNN_MODEL_PATH))
    ret = rknn.export_rknn(RKNN_MODEL_PATH)
    if ret != 0:
        print('Export rknn model failed.')
        exit(ret)
    print('done')

    '''step 5: release the model'''
    rknn.release()

把模型放到与该脚本同一个文件夹下,修改好脚本中的 platform = ‘rk3588’ 、onnxModel = 'yolox_s.onnx’为你实际的需求。然后执行,就可以得到onnx模型对应的rcnn模型了。
在这里插入图片描述

3.通过rknpu2加载rknn模型执行推理

把下载的rknpu2-1.5.2.tar.gz,进行解压,得到rknpu2-1.5.2文件夹
在这里插入图片描述
在这个文件夹内,可以找到例子。参考例程代码,编写我们自己的代码即可。
在这里插入图片描述需要注意的是,要用下载的rknpu2里面的librknnrt.so、librknn_api.so、rknn_server等文件,替换板子文件夹/usr里面原来的。复制完之后最好重启一下板子。

sudo cp ./runtime/RK3588/Linux/librknn_api/aarch64/* /usr/lib
sudo cp ./runtime/RK3588/Linux/rknn_server/aarch64/usr/bin/* /usr/bin/

否则会在加载模型时失败,并且报下面的错误:
Invalid RKNN model version 6
在这里插入图片描述


参考:
【Miniconda】
【RK3588模型推理总结】
【RKNN-ToolKit2 1.5.0安装教程】

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验!下载完使用问题请私信沟通。 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于RK3588部署YOLOv5多线程推理C++源码+项目说明(支持4路视频AI分析).zip 此项目为c++实现yolo5的batch多线程推理 实现4路摄像头的batch=4的推理 # 使用说明 模型转换 * yolov5工程下export.py转换onnx,直接转,切忌修改batch_size * 参考网上方法,rknn-toolkit2进行onnx转rknn,需要修改./rknn-toolkit2/examples/onnx/test.py为本工程test.py 演示 * 系统需安装有**OpenCV**,如果需要读取AHD摄像头还需要安装**gstreamer** * 运行build-linux_RK3588.sh * 可切换至root用户运行performance.sh定频提高性能和稳定性 * 编译完成后进入install运行命令./rknn_yolov5_demo **模型所在路径** 部署应用 * 修改include/rknnPool.hpp中的rknn_lite类 * 修改inclue/rknnPool.hpp中的rknnPool类的构造函数 # 多线程模型帧率测试 * 使用performance.sh进行CPU/NPU定频尽量减少误差 * 设置线程数为8,batch_size=4,读取USB摄像头视频流测试,平均处理速度15.8FPS*4,八核CPU占用率约500%,三核NPU平均占用率75% ![示例](./view.png) # 补充 * 异常处理尚未完善, 目前仅支持rk3588/rk3588s下的运行

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值