0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

ljx2016 来源:ljx2016 作者:ljx2016 2025-04-15 17:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. rknn-toolkit-lite介绍

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

wKgZO2f-KQ2AHOZgAAKzPIHJcF4641.png

2. 固件烧录

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

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

提取码:1234

固件包如下所示:

wKgZPGf-KQ6AR0G_AAAkMjOfcTk795.png

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
wKgZO2f-KQ6AE9D3AABkdRULKr8838.png

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

cd /userdata/inference_with_lite/
python3 test.py

结果如下所示:

wKgZPGf-KQ6AHBg7AAEMU8v6kKQ706.png

4. rknn-toolkit-lite流程说明

4.1 使用流程图

RKNN Tookit Lite使用流程如下:

wKgZO2f-KQ6ASBWaAAAizVY6QAg659.png

4.2 例程

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

import platform
import cv2
import numpy as np
from rknnlite.api import RKNNLite

RKNN_MODEL = '10class_ResNet50_pre.rknn'
IMG_PATH = './test-1.jpg'
INPUT_SIZE = 224

BOX_THRESH = 0.25
NMS_THRESH = 0.6

CLASSES = ("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 model
	print('--> Load RKNN model')
	ret = rknn_lite.load_rknn(RKNN_MODEL)
	if ret != 0:
		print('Load RKNN model failed')
		exit(ret)
	print('done')

	# Set inputs
	img = cv2.imread(IMG_PATH)
	img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
	resize_img = cv2.resize(img,(224,224))

	# init runtime environment
	print('--> Init runtime environment')

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

	# Inference
	print('--> 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模型

API Load_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 初始化运行时环境

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

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

举例如下:

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

5.4 模型推理

API inference
描述 对指定输入进行推理,返回推理结果。
参数 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,代码如下(完整代码参考第三小节):

	# Inference
	print('--> 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 版本

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

举例说明:

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

返回的 SDK 信息如下:

wKgZPGf-KQ6AQlvRAAA1FYIIaUg671.png


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    2181

    浏览量

    66304
  • 开发板
    +关注

    关注

    25

    文章

    6144

    浏览量

    113833
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1094

    浏览量

    51235
  • rv1126
    +关注

    关注

    0

    文章

    116

    浏览量

    4090
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    替代升级实锤!实测RV1126B,CPU性能吊打RV1126

    RV1126B核心已上市并稳定量产供应实测开始,设备使用触觉智能RV1126核心RV1126B核心
    的头像 发表于 12-11 17:13 1187次阅读
    替代升级实锤!实测<b class='flag-5'>RV1126</b>B,CPU性能吊打<b class='flag-5'>RV1126</b>

    RV1126系列选型指南:从RV1126RV1126B,一文看懂升级差异

    2025年7月,瑞芯微正式发布新一代AI视觉芯片RV1126B。作为其金牌方案商,EASYEAI灵眸科技同步推出搭载该芯片的AIoT核心EAI1126B-Core-T。相较于前代RV1126
    的头像 发表于 09-04 10:50 3592次阅读
    <b class='flag-5'>RV1126</b>系列选型指南:从<b class='flag-5'>RV1126</b>到<b class='flag-5'>RV1126</b>B,一文看懂升级差异

    基于RV1126开发板实现人脸检测方案

    RV1126开发板上实现人脸检测:在图像中找出人脸,以及每张人脸的landmarks位置。 方案设计逻辑流程图,方案代码分为分为两个业务流程,主体代码负责抓取、合成图像, 算法代码负责人脸检测功能。
    的头像 发表于 04-21 17:59 881次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>实现人脸检测方案

    基于RV1126开发板实现人脸检测方案

    RV1126开发板上实现人脸检测:在图像中找出人脸,以及每张人脸的landmarks位置。 方案设计逻辑流程图,方案代码分为分为两个业务流程,主体代码负责抓取、合成图像, 算法代码负责人脸检测功能。
    的头像 发表于 04-21 14:00 13次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>实现人脸检测方案

    基于RV1126开发板实现人脸识别方案

    RV1126开发板上实现人脸识别:在图像中找出人脸,并与数据库进行比对,得出该人脸对应的身份信息。 方案设计逻辑流程图,方案代码分为分为三个业务流程,主体代码负责抓取、合成图像,算法代码负责人脸识别功能,按键监听负责修改数据库工作状态。
    的头像 发表于 04-21 10:24 107次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>实现人脸识别方案

    基于RV1126开发板实现人脸检测方案

    RV1126开发板上实现人脸检测:在图像中找出人脸,以及每张人脸的landmarks位置。 方案设计逻辑流程图,方案代码分为分为两个业务流程,主体代码负责抓取、合成图像, 算法代码负责人脸检测功能。
    的头像 发表于 04-21 10:21 99次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>实现人脸检测方案

    基于RV1126开发板实现驾驶员行为检测方案

    RV1126开发板上实现驾驶员行为检测:通过图像识别出这几种行为:打电话、抽烟、疲劳驾驶。
    的头像 发表于 04-18 17:47 354次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>实现驾驶员行为检测方案

    基于RV1126开发板实现人员检测方案

    RV1126开发板实现人员检测:在图像中找出人。 方案设计逻辑流程图,方案代码分为分为两个业务流程,主体代码负责抓取、合成图像,算法代码负责人员检测功能。
    的头像 发表于 04-18 17:14 220次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>实现人员检测方案

    基于RV1126开发板的音频硬件电路设计

           核心自带音频输入输出功能,无需外接音频编解码芯片,节省成本与空间。核心核上的PMIC RK809-2芯片内部集成高性能音频Codec,RV1126通过I2S1接口和RK809-2
    的头像 发表于 04-17 09:31 795次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>的音频硬件电路设计

    基于RV1126开发板的按键测试方法与例程

    RV1126开发板的按键测试方法与例程详细描述
    的头像 发表于 04-15 17:03 860次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>的按键测试<b class='flag-5'>方法</b>与例程

    基于RV1126开发板网络配置方法

    RV1126开发板网络硬件资源有:以太网、WiFi,采用的网络配置方案是:Netplan。        Netplan是一个用于配置Linux网络的简单工具。用户只需要一个yaml格式的文件去
    的头像 发表于 04-15 14:57 729次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>网络配置<b class='flag-5'>方法</b>

    基于RV1126开发板的人员检测算法开发

    RV1126开发人员检测AI算法组件
    的头像 发表于 04-14 13:56 646次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>的人员检测算法<b class='flag-5'>开发</b>

    基于RV1126开发板的人脸检测算法开发

    RV1126开发人脸检测算法组件
    的头像 发表于 04-14 10:19 757次阅读
    基于<b class='flag-5'>RV1126</b><b class='flag-5'>开发板</b>的人脸检测算法<b class='flag-5'>开发</b>

    RV1126 实现人脸检测方案

    基于RV1126开发板实现人脸检测方案,充分体现了电子方面的实践经验和目标检测技术。
    的头像 发表于 04-14 09:25 703次阅读
    <b class='flag-5'>RV1126</b> 实现人脸检测方案

    RV1126 实现简单的UI开发示例

    RV1126上实现简单的UI开发实例
    的头像 发表于 04-09 16:08 914次阅读
    <b class='flag-5'>RV1126</b> 实现简单的UI<b class='flag-5'>开发</b>示例