基于RV1126开发板的rknn-toolkit-lite使用方法

news/2025/4/22 1:56:16

1. rknn-toolkit-lite介绍

       rknn-toolkit-lite是用于python算法的推理的组件,当前已经在EASY-EAI-Nano完成适配,用户可以用它进行深度学习算法的纯python开发。而且同时支持已经进行了预编译的模型,短短几行代码即可完成算法的推理,大幅降低开发成本。同时很多不熟悉C/C++的算法开发人员有效降低开发门槛。本地文档是根据已经完成rknn模型转换的模型进行板卡上的推理,关于rknn模型转换请阅读请阅读《在EASY EAI Nano运行自定义的AI算法》。

2. 固件烧录

       当前我们通过系统预装的方式支持rknn-toolkit-lite,烧录固件方式请阅读《固件烧录与更新》。

       固件下载链接:https://pan.baidu.com/s/1sWFoPf6oJtZsUPp-_do7AQ

       提取码:1234

       固件包如下所示:

3. 在板卡测试demo

       下载百度网盘:https://pan.baidu.com/s/1yoof_SyY1ty93dIRe1dZgA (提取码:1234 )

    “测试程序/inference_with_lite.tar.bz2”,把文件传到EASY-EAI-Nano板卡目录上。

       执行以下指令进行解压:

tar xvf inference_with_lite.tar.bz2

       执行以下指令切换目录并执行测试程序:

cd /userdata/inference_with_lite/
python3 test.py

       结果如下所示:

4. rknn-toolkit-lite流程说明

4.1 使用流程图

       RKNN Tookit Lite使用流程如下:

4.2 例程

        第三小节的例程如下所示:

import platform
import cv2
import numpy as np
from rknnlite.api import RKNNLiteRKNN_MODEL = '10class_ResNet50_pre.rknn'
IMG_PATH = './test-1.jpg'
INPUT_SIZE = 224BOX_THRESH = 0.25
NMS_THRESH = 0.6CLASSES = ("SUV", "bus", "family sedan", "fire engine", "heavy truck", "jeep", "minibus", "racing car", "taxi", "truck")def show_outputs(output):print("softmax output:", output)max_confidence = np.max(output)index = np.where(output == max_confidence)print("max confidence:", max_confidence)print("max confidence index:", index[0][0])print("CLASSES predict: ", CLASSES[index[0][0]])def softmax(x):return np.exp(x)/sum(np.exp(x))if __name__ == '__main__':rknn_lite = RKNNLite()# load RKNN modelprint('--> Load RKNN model')ret = rknn_lite.load_rknn(RKNN_MODEL)if ret != 0:print('Load RKNN model failed')exit(ret)print('done')# Set inputsimg = cv2.imread(IMG_PATH)img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)resize_img = cv2.resize(img,(224,224))# init runtime environmentprint('--> Init runtime environment')ret = rknn_lite.init_runtime(target=None)if ret != 0:print('Init runtime environment failed')exit(ret)print('done')# Inferenceprint('--> Running model')outputs = rknn_lite.inference(inputs=[resize_img])print("outputs[0]:", outputs[0])print("outputs[0].shape:", outputs[0].shape)show_outputs(softmax(np.array(outputs[0][0])))rknn_lite.release()

5. API详细说明

5.1 RKNNLite初始化及对象释放

       在使用RKNN Toolkit Lite时,都需要先调用RKNNLite()方法初始化一个RKNNLite对象,并在用完后调用该对象的release()方法将资源释放掉。

       初始化RKNNLite对象时,可以设置verbose和verbose_file参数,以打印详细的日志信息。其中verbose参数指定是否要在屏幕上打印详细日志信息;如果设置了verbose_file参数,且verbose参数值为True,日志信息还将写到这个参数指定的文件中。

       举例如下:

# 将详细的日志信息输出到屏幕,并写到inference.log文件中 
rknn_lite = RKNNLite(verbose=True, verbose_file='./inference.log') # 只在屏幕打印详细的日志信息 
rknn_lite = RKNNLite(verbose=True) 
… 
rknn_lite.release() 

5.2 加载RKNN模型

APILoad_rknn
描述加载RKNN模型。
参数path:RKNN模型文件路径
load_model_in_npu: 是否直接加载npu中的rknn模型。其中path为rknn模型在npu中的路径。只有当RKNN Toolkit Lite运行在连有NPU设备的PC上或RK3399Pro Linux开发板时才可以设为True。默认值为False.
返回值0:加载成功
-1:加载失败

       举例如下:

# 从当前目录加载 ResNet50模型
ret = rknn_lite.load_rknn('10class_ResNet50_pre.rknn')

5.3 初始化运行时环境

       在模型推理之前,必须先初始化运行时环境,确定模型在哪一个芯片平台上运行。

APIinit_runtime
描述初始化运行时环境。确定模型运行的设备信息(芯片型号、设备 ID)。
参数target:目标硬件平台,目前支持“rk3399pro”、“rk1806”、“rk1808”、“rv1109”、 “rv1126”。默认为 None,将根据应用所运行的开发板自动选择。
device_id:设备编号,如果 PC 连接多台智能设备时,需要指定该参数,设备编号可 以通过”list_devices”接口查看。默认值为 None。
async_mode:是否使用异步模式。调用推理接口时,涉及设置输入图片、模型推理、 获取推理结果三个阶段。如果开启了异步模式,设置当前帧的输入将与推理上一帧同 时进行,所以除第一帧外,之后的每一帧都可以隐藏设置输入的时间,从而提升性能。 在异步模式下,每次返回的推理结果都是上一帧的。该参数的默认值为 False。
返回值0:加载成功
-1:加载失败

        举例如下:

	# init runtime environmentprint('--> Init runtime environment')ret = rknn_lite.init_runtime(target=None)if ret != 0:print('Init runtime environment failed')exit(ret)print('done')

5.4 模型推理

APIinference
描述对指定输入进行推理,返回推理结果。
参数inputs:待推理的输入,如经过 cv2 处理的图片。类型是 list,列表成员是 ndarray。
data_type:输入数据的类型,可填以下值:’float32’, ‘float16’, ‘uint8’, ‘int8’, ‘int16’。 默认值为’uint8’。
data_format:数据模式,可以填以下值: “nchw”, “nhwc”。默认值为’nhwc’。这两个的 不同之处在于 channel 放置的位置。
inputs_pass_through: 将输入透传给 NPU 驱动。非透传模式下,在将输入传给 NPU 驱 动之前,工具会对输入进行减均值、除方差等操作;而透传模式下,不会做这些操作。 这个参数的值是一个数组,比如要透传 input0,不透传 input1,则这个参数的值为[1, 0]。默认值为 None,即对所有输入都不透传。
返回值results:推理结果,类型是 list,列表成员是 ndarray。

       举例如下:

       以分类模型为例,如 resnet50,代码如下(完整代码参考第三小节):

	# Inferenceprint('--> Running model')outputs = rknn_lite.inference(inputs=[resize_img])print("outputs[0]:", outputs[0])print("outputs[0].shape:", outputs[0].shape)show_outputs(softmax(np.array(outputs[0][0])))

5.5 查询 SDK 版本

APIget_sdk_version
描述获取 SDK API 和驱动的版本号。
注:使用该接口前必须完成模型加载和初始化运行环境。
参数
返回值sdk_version:API 和驱动版本信息。类型为字符串

       举例说明:

# 获取 SDK 版本信息 
…… 
sdk_version = rknn_lite.get_sdk_version() 
……

       返回的 SDK 信息如下:


https://dhexx.cn/news/show-5497375.html

相关文章

LeetCode面试热题150中12-18题学习笔记(用Java语言描述)

Day 03 12、 O ( 1 ) O(1) O(1)时间插入、删除元素和获取元素 需求:实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否…

【Linux】系统入门

【Linux】系统初识 起源开源 闭源版本内核内核编号 Linux的安装双系统(不推荐)WindowsLinuxvmware虚拟机vitualbox操作系统的镜像centos 7/ubuntu云服务器租用 Linux的操作lsmkdir 文件名pwdadduser userdel -rrm文件名cat /proc/cpuinfolinux支持编程vim code.c./a.out 运行程…

AOSP Android14 Launcher3——底部任务栏Taskbar详解

前言:Launcher3中底部Taskbar和Navbar,或者说中文里面的术语导航栏,这几个词是很容易让人混淆的地方。本文要介绍的是Taskbar。从字面上意思来看,Taskbar就是任务栏,任务栏是Launcher3中一个重要的组件,尤其…

Zookeeper三台服务器三节点集群部署(docker-compose方式)

1. 准备工作 - 服务器:3 台服务器,IP 地址分别为 `10.10.10.11`、`10.10.10.12`、`10.10.10.13`。 - 安装 Docker:确保每台服务器已安装 Docker 和 Docker Compose。 - 网络通信:确保三台服务器之间可以通过 IP 地址互相访问,并开放以下端口: - `2181`:Zookeeper 客户…

世界杯高并发场景下,体育比分网站技术架构设计与实战

当世界杯遇上千万级QPS,我们如何应对? 2018年俄罗斯世界杯决赛期间,某体育平台遭遇每秒23万次请求的流量洪峰;2022年卡塔尔世界杯小组赛,某比分APP因数据库连接池耗尽导致服务瘫痪——这些真实案例揭示了体育赛事场景…

【C语言基础】双指针在qsort函数中的应用

在C语言中使用 qsort 对字符串数组(如 char* 数组)排序时,必须转换为双指针(char**),这是由字符串数组的内存结构和 qsort 的工作原理决定的。以下是详细解释: 一、底层原理分析 1. 字符串数组…

PyTorch逻辑回归总结

目录 PyTorch逻辑回归总结神经网络基础基本结构学习路径 线性回归简单线性回归多元线性回归 逻辑回归核心原理损失函数 梯度下降法基本思想关键公式学习率影响 PyTorch实现数据准备模型构建代码优化 核心概念对比 PyTorch逻辑回归总结 神经网络基础 基本结构 输入节点隐藏节…

宝塔面板中解锁Laravel日志查看的奥秘

目录 一、前言二、Laravel 日志基础认知2.1 日志的作用2.2 Laravel 日志的默认配置 三、查找 Laravel 日志文件位置3.1 常规存储路径3.2 自定义路径查找 四、查看 Laravel 日志内容4.1 宝塔面板文件管理器查看4.2 使用命令行查看 五、常见问题及解决方法5.1 权限不足无法查看5.…

双目视觉中矩阵等参数说明及矫正

以下是标定文件中各个参数的详细解释: 1. 图像尺寸 (imageSize) 参数值: [1280, 1024]含义: 相机的图像分辨率,宽度为1280像素,高度为1024像素。 2. 相机内参矩阵 (leftCameraMatrix / rightCameraMatrix) 结构: yaml data: [fx, 0, cx, 0,…

基本元器件—电阻器(2025.4.14)

1.常见的电阻 2.电阻的表示方法和测试方法 2.1直标法和色标法 2.2万用表和数字电桥 3. 4.电阻参数 允许误差指的是电阻的标称阻值和实际值差值再除以标称阻值 5.电阻的功能 (1)分压就是电阻串联分到的电压不一样 (2)限流&#…