模型部署——rknn-toolkit-lite2部署RKNN模型到开发板上(python版)

2024-03-07 20:36

本文主要是介绍模型部署——rknn-toolkit-lite2部署RKNN模型到开发板上(python版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在RKNN模型部署前,需要注意以下几点:

(1)硬件平台兼容性:
确保你的开发板与 RKNN Toolkit Lite2 兼容。目前,RKNN Toolkit Lite2 支持 Rockchip RK3566、RK3588、RK3399 等平台。
确认开发板的 NPU 型号和版本与 RKNN 模型的 NPU 算子兼容。

(2)模型转换:
使用 RKNN Toolkit 或 RKNNConverter 工具将 PyTorch、TensorFlow 等框架模型转换为 RKNN 模型。
转换时,需要指定目标硬件平台和 NPU 型号。
确保模型转换成功,并生成相应的 RKNN 模型文件。
关于模型转换的教程,参考我另外一篇博文:Pytorch转RKNN模型

(3)部署环境:
在开发板上安装 RKNN Runtime 和相关依赖库。
确认开发板的系统版本和编译环境与 RKNN Toolkit Lite2 兼容。

(4)模型加载:
使用 RKNN Toolkit Lite2 提供的 API 加载 RKNN 模型。
需指定模型文件路径以及其他参数。

(5)模型推理:
使用 RKNN Toolkit Lite2 提供的 API 进行模型推理。
需提供输入数据和相关参数。

(6)性能优化:
可以使用 RKNN Toolkit Lite2 提供的性能分析工具分析模型性能。
根据分析结果,可以对模型进行优化,以提高推理速度和降低功耗。

目录

  • 一、源码包准备
  • 二、环境准备
    • 2.1 安装Miniconda
    • 2.2 新建虚拟环境
    • 2.3 安装rknn_toolkit_lite2包
    • 2.4 安装OpenCV包
  • 三、推理
    • 3.1 代码
    • 3.2 开发板推理结果
  • 四、总结

一、源码包准备

本配套源码包的获取方式为文章末扫码到公众号「视觉研坊」中回复关键字:RKNN Lite2开发板部署。获取下载链接。

下载解压后的样子如下:

在这里插入图片描述

二、环境准备

先在开发板上运行rknn_server,通过adb连通开发板,在开发板系统上安装python编译环境。

2.1 安装Miniconda

在开发板系统上安装Miniconda的详细教程,见我另外一篇博客:Miniconda安装

2.2 新建虚拟环境

上一步Miniconda安装好后,在此基础上安装一个新的虚拟环境,如下,:
查看已有虚拟环境命令为:

conda env list

创建新虚拟环境命令为:

conda create -n name python=3.9

在这里插入图片描述
在这里插入图片描述

上面步骤创建好后激活虚拟环境,如下:

激活命令为:

conda activate name

在这里插入图片描述

2.3 安装rknn_toolkit_lite2包

rknn_toolkit_lite2包的轮子文件,在我提供源码包中的packages文件夹中,如下:

在这里插入图片描述

在激活的虚拟环境中,进入到存放轮子文件目录下,使用下面命令安装:

pip install rknn_toolkit_lite2-1.6.0-cp39-cp39-linux_aarch64.whl -i https://pypi.mirrors.ustc.edu.cn/simple/

在这里插入图片描述

2.4 安装OpenCV包

在同样的虚拟环境下,使用下面命令安装opencv:

pip install opencv-python -i https://pypi.mirrors.ustc.edu.cn/simple/

在这里插入图片描述

三、推理

上面环境都准备好后,在终端通过命令进入到源码包目录下,运行下面命令即可在开发板上推理RKNN模型。

python rknntoolkit_lite2_inference.py

在这里插入图片描述

3.1 代码

此代码对应源码包中的rknntoolkit_lite2_inference.py脚本。

from rknnlite.api import RKNNLite
import cv2
import numpy as npdef show_outputs(output):output_sorted = sorted(output,reverse = True)top5_str = '\n----------top5-----------\n'for i in range(5):value = output_sorted[i]index = np.where(output == value)for j in range(len(index)):if (i + j) >= 5:breakif value > 0:top1 = "{}:{}\n".format(index[j],value)else:top1 = "-1:0.0\n"top5_str += top1print(top5_str)def show_perfs(perfs):perfs = "perfs:{}\n".format(perfs)print(perfs)def softmax(x):return np.exp(x)/sum(np.exp(x))if __name__ == "__main__":rknn = RKNNLite()# 使用load_rknn接口直接加载RKNN模型rknn.load_rknn(path="resnet18.rknn")# 调用init_runtime接口初始化运行时环境rknn.init_runtime(core_mask = 0,  # core_mask表示NPU的调度模式,设置为0时表示自由调度,设置为1,2,4时分别表示调度某个单核心,设置为3时表示同时调度0和1两个核心,设置为7时表示1,2,4三个核心同时调度# targt = "rk3588")# 使用Opencv读取图片img = cv2.imread("space_shuttle_224.jpg")img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)# 调用inference接口进行推理测试output = rknn.inference(inputs=[img],data_format=None)show_outputs(softmax(np.array(output[0][0])))  # 根据概率排名,打印出前5名的概率rknn.release()

3.2 开发板推理结果

运行上面脚本,输出推理结果如下:

在这里插入图片描述

打开源码包中的图片和imagenet1000标签.txt文件对照查看,推理预测的结果与标签文件对应的类名一致,说明开发板推理结果正确,如下:

在这里插入图片描述

四、总结

以上就是rknn-toolkit-lite2部署RKNN模型到开发板上的详细过程,CAPI开发板部署见下一期博文。

总结不易,多多支持,谢谢!

感谢您阅读到最后!关注公众号「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

这篇关于模型部署——rknn-toolkit-lite2部署RKNN模型到开发板上(python版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/784746

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型: