当前位置: 首页 > news >正文

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

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 信息如下:

相关文章:

  • 【Docker-13】Docker Container容器
  • Google提示工程
  • Active Directory域服务管理与高级应用技术白皮书
  • Linux 深入浅出信号量:从线程到进程的同步与互斥实战指南
  • Leetcode 3514. Number of Unique XOR Triplets II
  • python爬虫 线程,进程,协程
  • Oracle数据库数据编程SQL<01. 课外关注:数据库查重方法全面详解>
  • Linux指令和权限(10-3)
  • 聚铭网络亮相2025超云产品技术大会,联合发布“铭智安全运营大模型一体机及解决方案”
  • Rust 之五 所有权、.. 和 _ 语法、引用和切片、Vec<T>、HashMap<K, V>
  • MIT6.S081 - Lab8 Locks(锁优化 | 并发安全)
  • HTTP请求方法安全剖析(不安全的网络请求方法):从CVE-2017-12615看PUT/DELETE的风险利用
  • JavaScript的常用数组API原理
  • jspm企业采购管理系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
  • 第四篇:[特殊字符] 深入理解MyBatis[特殊字符] 掌握MyBatis Generator ——入门与实战
  • AI 边缘计算盒子:开启智能物联新时代
  • Proteus 仿真51单片机-串口收发小窥
  • ES关系映射(数据库中的表结构)
  • MySQL数据库---修改密码以及设置密码永过期
  • 云渗透二(云主机攻防)
  • 不朽诗篇的现代重生,意大利音乐剧《神曲》将来华15城巡演
  • 人民热评:大尺度色情语聊、撮合卖淫,社交APP岂止跑偏
  • 吸引更多开发者,上海智元发布行业首款具身智能一站式开发平台
  • 沙龙 | 新书分享:中国电商崛起的制度密码
  • 美伊第二轮核问题间接谈判结束,伊方称“结果是建设性的”
  • 云南:近两千亩拍得土地因规划变更不得开发,政府要求转型、企业无力为继