RKNPU2从入门到实践 ---- 【8】借助 RKNN Toolkit lite2 在RK3588开发板上部署RKNN模型

本文主要是介绍RKNPU2从入门到实践 ---- 【8】借助 RKNN Toolkit lite2 在RK3588开发板上部署RKNN模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

      作者使用的平台为Ubuntu20.04虚拟系统,开发板为瑞芯微RK3588,开发板上的系统为Ubuntu22.04系统。 

一、任务

      完成RKNN模型的部署,RKNN模型的部署是将RKNN模型放到开发板上,应用程序可以加载RKNN模型,从而在嵌入式设备上完成推理计算的任务。
      瑞芯微提供了两种嵌入式部署方式,一种是使用RKNPU2 SDK的C接口进行部署,另一种是使用 RKNN Toolkit lite2 提供的Python接口进行部署,也即我们今天要介绍的内容。

借助 RKNN Toolkit lite2 在RK3588开发板上部署RKNN模型

 二、 RKNN Tool kit lite2 使用流程

      在编写代码之前,把rknn模型以及要测试的图片放入项目文件夹中,项目文件夹内容如下所示。 

 

2.1 连板推理测试 

      在使用rknntoolkitlite2之前,我们首先要进行连板推理测试,连板推理测试部分代码在之前的博文已经解读过,这里直接贴出代码部分,若有疑问,请参考博文:RKNPU2从入门到实践 --- 【5】一、加载非RKNN模型(以pt模型为例)进行模型评估【(1)在rknntoolkit2模拟器上推理测试(2)连板推理】二、RKNN模型【(1)连板推理】-CSDN博客

import numpy as np
from rknn.api import RKNN
import cv2def show_outputs(output):output_sorted = sorted(output, reverse=True)top5_str = '\n-----TOP 5-----\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:topi = '{}: {}\n'.format(index[j], value)else:topi = '-1: 0.0\n'top5_str += topiprint(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对象rknn = RKNN()# 使用load_rknn接口直接加载RKNN模型rknn.load_rknn(path='./resnet.rknn')# 调用init_runtime接口初始化运行时环境rknn.init_runtime(core_mask=0,target='rk3588')# 使用 opencv 获取推理图片数据img = cv2.imread(filename='./space_shuttle_224.jpg')img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 调用inference接口进行推理测试outputs = rknn.inference(inputs=[img],data_format=None)show_outputs(softmax(np.array(outputs[0][0])))# 调用release释放rknn对象rknn.release()


      core_mask 表示NPU的调度模式,设置为0时表示自由调度,设置为1,2,4时表示调度某个单核心,设置为3时表示同时调度0和1两个核心,设置为7时,表示3个核心同时调度。
      注:由于rknntoolkitlite2最后要在开发板上运行,运行环境已经确定,且无法进行性能评估和内存评估,因此在 rknntoolkitlite2 部分中 target='rk3588' 将会被去掉。

      随后启动开发板,开发板连接至Ubuntu虚拟系统上,连接成功后会在虚拟系统任务栏中出现一个手机的标识。
使用MobaXterm软件与开发板进行串口调试,开启rknn_server服务: 

至此,运行代码,开始连板推理,得到运行结果: 

      可以看到,终端打印出前五名概率最大的物品编号以及概率值,最大的概率值为0.9996696....,标签号为812号,经查询,812号实际是太空飞船,推理测试图片也是太空飞船,则连板推理成功。
      接下来我们开始使用rknntoolkitlite2,将模型部署在RK3588开发板上,请看2.2小节。

2.2 rknntoolkitlite2使用 

rknntoolkitlite2 使用流程图如下所示: 

RKNN Tool kit lite2 使用流程图

 我们根据上述流程图来修改2.1小节的代码,一共三处:
第一处:


改为:


第二处:
将:

修改为:

第三处:
将:

修改为:

修改之后的整体代码如下所示:

import numpy as np
from rknnlite.api import RKNNLite
import cv2def show_outputs(output):output_sorted = sorted(output, reverse=True)top5_str = '\n-----TOP 5-----\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:topi = '{}: {}\n'.format(index[j], value)else:topi = '-1: 0.0\n'top5_str += topiprint(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对象rknn = RKNNLite()# 使用load_rknn接口直接加载RKNN模型rknn.load_rknn(path='./resnet.rknn')# 调用init_runtime接口初始化运行时环境rknn.init_runtime(core_mask=0,)# 使用 opencv 获取推理图片数据img = cv2.imread(filename='./space_shuttle_224.jpg')img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)# 调用inference接口进行推理测试outputs = rknn.inference(inputs=[img],data_format=None)show_outputs(softmax(np.array(outputs[0][0])))# 调用release释放rknn对象rknn.release()

      修改之后,该程序就可以通过 rknntoolkitlite2 在开发板上运行了。注意:是在开发板上单独运行,不受宿主机的调配,不是上面那个连板推理。上面那个连板推理只是模拟在开发板上单独运行的情况。
      需要将修改后的代码文件拷贝到开发板上,要想正常运行该程序,还需要在开发板系统上搭建rknntoolkitlite2 的使用环境,关于环境搭建步骤,请参考博文:
rknntoolkitlite2环境搭建-CSDN博客
在Ubuntu虚拟系统中使用命令 adb push [rknntoolkitlite2_learning 的路径] [/home/topeet(开发板上的指定目录)]将项目文件夹拷贝到开发板的指定目录下,我的项目文件夹 rknntoolkitlite2_learning 位于虚拟系统的 /home/topeet/rknn/rknntoolkitlite2_learning,因此执行如下命令:

拷贝结束后,在MobaXterm中查看该文件夹,如下:

然后执行.py程序,这个程序是我们修改后的代码,如下所示:

得到结果:

终端给出了TOP5的概率值,与连板推理下的一样。

这篇关于RKNPU2从入门到实践 ---- 【8】借助 RKNN Toolkit lite2 在RK3588开发板上部署RKNN模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

大数据spark3.5安装部署之local模式详解

《大数据spark3.5安装部署之local模式详解》本文介绍了如何在本地模式下安装和配置Spark,并展示了如何使用SparkShell进行基本的数据处理操作,同时,还介绍了如何通过Spark-su... 目录下载上传解压配置jdk解压配置环境变量启动查看交互操作命令行提交应用spark,一个数据处理框架

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

JAVA集成本地部署的DeepSeek的图文教程

《JAVA集成本地部署的DeepSeek的图文教程》本文主要介绍了JAVA集成本地部署的DeepSeek的图文教程,包含配置环境变量及下载DeepSeek-R1模型并启动,具有一定的参考价值,感兴趣的... 目录一、下载部署DeepSeek1.下载ollama2.下载DeepSeek-R1模型并启动 二、J

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N