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博客

python 复制代码
import numpy as np
from rknn.api import RKNN
import cv2

def 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:
                break
            if value > 0:
                topi = '{}: {}\n'.format(index[j], value)
            else:
                topi = '-1: 0.0\n'
            top5_str += topi
    print(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小节的代码,一共三处:
第一处:


改为:

第二处:

将:

修改为:

第三处:

将:

修改为:

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

python 复制代码
import numpy as np
from rknnlite.api import RKNNLite
import cv2

def 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:
                break
            if value > 0:
                topi = '{}: {}\n'.format(index[j], value)
            else:
                topi = '-1: 0.0\n'
            top5_str += topi
    print(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的概率值,与连板推理下的一样。

相关推荐
程序员柒叔5 小时前
Hermes Agent 一周动态-2026-W24
人工智能·github·agent·openclaw·hermes
KKKlucifer5 小时前
数据分类分级产品排名解析:场景定制、规则联动、增量更新成核心能力
大数据·数据库·人工智能
王小王-1235 小时前
深度学习赋能:基于机器学习的恶意 URL 检测系统
人工智能·机器学习·恶意网址检测·恶意url检测·异常网址检测·机器学习异常网址检测
SWAGGY..5 小时前
Linux系统编程:(十三)环境变量
java·linux·算法
2601_955767425 小时前
2026年iPhone17贴膜怎么选:偏振片缺失与磁控溅射AR镀膜技术解析及SGS认证观复盾方案
人工智能·智能手机·ar·护眼钢化膜·磁控溅射
金融RPA机器人丨实在智能5 小时前
数据库运维Agent比价指南:国产自研产品适配国产数据库兼容性更好吗?
运维·数据库·人工智能·ai
2601_955767425 小时前
iPhone17偏振片缺失怎么补救:圆偏振光与磁控溅射AR技术解析及悟赫德观复盾方案
人工智能·ar·护眼钢化膜·圆偏振光·#观复盾护景贴
Black蜡笔小新5 小时前
自动化AI算法训练服务器DLTM一体化训推平台构建企业专属AI能力中台
人工智能·算法·自动化
代码有点萌5 小时前
CloudStudio 体验 ComfyUI:不用本地部署也能学习 AI 绘图
人工智能
howard20055 小时前
3.9 初探Shell命令
linux·shell命令