1. API详细说明
1.1 RKNN初始化及释放
在使用RKNN-Toolkit2的所有API接口时,都需要先调用RKNN()方法初始化RKNN对象,不再使用该对象时通过调用该对象的release()方法进行释放。
初始化RKNN对象时,可以设置verbose和verbose_file参数,以打印详细的日志信息。其中verbose参数指定是否要打印详细日志信息;如果设置了verbose_file参数,且verbose参数值为True,日志信息还将写到该参数指定的文件中。
举例如下:
# 打印详细的日志信息
rknn = RKNN(verbose=True)
…
rknn.release()1.2 模型配置
在构建RKNN模型之前,需要先对模型进行通道均值、量化图片RGB2BGR转换、量化类型等的配置,这些操作可以通过config接口进行配置。

举例如下:
# model config
rknn.config(mean_values=[[103.94, 116.78, 123.68]],
std_values=[[58.82, 58.82, 58.82]],
quant_img_RGB2BGR=True,
target_platform='rk3566')1.3 模型加载
RKNN-Toolkit2目前支持Caffe、TensorFlow、TensorFlow Lite、ONNX、DarkNet、PyTorch等模型的加载转换,这些模型在加载时需调用对应的接口,以下为这些接口的详细说明。
1.3.1 Caffe模型加载接口

举例如下:
# 从当前路径加载mobilenet_v2模型
ret = rknn.load_caffe(model='./mobilenet_v2.prototxt',
blobs='./mobilenet_v2.caffemodel')1.3.2 TensorFlow模型加载接口
举例如下:
# 从当前目录加载ssd_mobilenet_v1_coco_2017_11_17模型
ret = rknn.load_tensorflow(tf_pb='./ssd_mobilenet_v1_coco_2017_11_17.pb',
inputs=['Preprocessor/sub'],
outputs=['concat', 'concat_1'],
input_size_list=[[300, 300, 3]])1.3.3 TensorFlow Lite模型加载接口

举例如下:
# 从当前目录加载mobilenet_v1模型
ret = rknn.load_tflite(model='./mobilenet_v1.tflite')1.3.4 ONNX模型加载

举例如下:
# 从当前目录加载arcface模型
ret = rknn.load_onnx(model='./arcface.onnx')1.3.5 DarkNet模型加载接口

举例如下:
# 从当前目录加载yolov3-tiny模型
ret = rknn.load_darknet(model='./yolov3-tiny.cfg',
weight='./yolov3.weights')1.3.6 PyTorch模型加载接口

举例如下:
# 从当前目录加载resnet18模型
ret = rknn.load_pytorch(model='./resnet18.pt',
input_size_list=[[1,3,224,224]])1.4 构建RKNN模型

举例如下:
# 构建RKNN模型,并且做量化
ret = rknn.build(do_quantization=True, dataset='./dataset.txt')1.5 导出RKNN模型
通过本工具构建的RKNN模型通过该接口可以导出存储为RKNN模型文件,用于模型部署。

举例如下:
# 将构建好的RKNN模型保存到当前路径的mobilenet_v1.rknn文件中
ret = rknn.export_rknn(export_path='./mobilenet_v1.rknn')1.6 加载RKNN模型

举例如下:
# 从当前路径加载mobilenet_v1.rknn模型
ret = rknn.load_rknn(path='./mobilenet_v1.rknn')1.7 初始化运行时环境
在模型推理或性能评估之前,必须先初始化运行时环境,明确模型的运行平台(具体的目标硬件平台或软件模拟器)。

举例如下:
# 初始化运行时环境
ret = rknn.init_runtime(target='rk3566')1.8 模型推理
在进行模型推理前,必须先构建或加载一个RKNN模型。

举例如下:
对于分类模型,如mobilenet_v1,代码如下(完整代码参考example/tflite/mobilent_v1):
# 使用模型对图片进行推理,得到TOP5结果
outputs = rknn.inference(inputs=[img])
show_outputs(outputs)输出的TOP5结果如下:
-----TOP 5-----
[ 156] score:0.928223 class:"Shih-Tzu"
[ 155] score:0.063171 class:"Pekinese, Pekingese, Peke"
[ 205] score:0.004299 class:"Lhasa, Lhasa apso"
[ 284] score:0.003096 class:"Persian cat"
[ 285] score:0.000171 class:"Siamese cat, Siamese"1.9 评估模型性能

举例如下:
# 对模型性能进行评估
perf_detail = rknn.eval_perf()1.10 获取内存使用情况

举例如下:
# 对模型内存使用情况进行评估
memory_detail = rknn.eval_memory()如examples/caffe/mobilenet_v2,它在RK3588上运行时内存占用情况如下:
======================================================
Memory Profile Info Dump
======================================================
NPU model memory detail(bytes):
Weight Memory: 3.53 MiB
Internal Tensor Memory: 1.67 MiB
Other Memory: 473.00 KiB
Total Memory: 5.66 MiB
INFO: When evaluating memory usage, we need consider
the size of model, current model size is: 4.09 MiB
======================================================1.11 查询SDK版本

举例如下:
# 获取SDK版本信息
sdk_version = rknn.get_sdk_version()
print(sdk_version)返回的SDK信息类似如下:
==============================================
RKNN VERSION:
API: 1.5.2 (8babfea build@2023-08-25T02:31:12)
DRV: rknn_server: 1.5.2 (8babfea build@2023-08-25T10:30:12)
DRV: rknnrt: 1.5.3b13 (42cbca6f5@2023-10-27T10:13:21)
==============================================1.12 混合量化
1.12.1 hybrid_quantization_step1
使用混合量化功能时,第一阶段调用的主要接口是hybrid_quantization_step1,用于生成临时模型文件(.model)、数据文件(.data)和量化配置文件
(.quantization.cfg)。接口详情如下:

举例如下:
# 调用hybrid_quantization_step1 产生量化配置文件
ret = rknn.hybrid_quantization_step1(dataset='./dataset.txt')1.12.2 hybrid_quantization_step2
用于使用混合量化功能时生成RKNN模型,接口详情如下:

举例如下:
# Call hybrid_quantization_step2 to generate hybrid quantized RKNN model
ret = rknn.hybrid_quantization_step2(
model_input='./ssd_mobilenet_v2.model',
data_input='./ssd_mobilenet_v2.data',
model_quantization_cfg='./ssd_mobilenet_v2.quantization.cfg')1.13 量化精度分析
该接口的功能是进行浮点、量化推理并产生每层的数据,并进行量化精度分析。

举例如下:
# Accuracy analysis
ret = rknn.accuracy_analysis(inputs=['./dog_224x224.jpg'])1.14 获取设备列表

举例如下:
rknn.list_devices()返回的设备列表信息如下:
*************************
all device(s) with adb mode:
VD46C3KM6N
*************************注:使用多设备时,需要保证它们的连接模式都是一致的,否则会引起冲突,导致设备连接失败。
1.15 导出加密模型
该接口的功能是将普通的RKNN模型进行加密,得到加密后的模型。

举例如下:
ret = rknn.export_encrypted_rknn_model('test.rknn')1.16 注册自定义算子
该接口的功能是注册一个自定义算子。

举例如下:
import numpy as np
from rknn.api.custom_op import get_node_attr
class cstSoftmax:
op_type = 'cstSoftmax'
def shape_infer(self, node, in_shapes, in_dtypes):
out_shapes = in_shapes.copy()
out_dtypes = in_dtypes.copy()
return out_shapes, out_dtypes
def compute(self, node, inputs):
x = inputs[0]
axis = get_node_attr(node, 'axis')
x_max = np.max(x, axis=axis, keepdims=True)
tmp = np.exp(x - x_max)
s = np.sum(tmp, axis=axis, keepdims=True)
outputs = [tmp / s]
return outputs
ret = rknn.reg_custom_op(cstSoftmax)1.17 生成C++部署示例

举例如下:
ret = rknn.codegen(output_path='./rknn_app_demo',
inputs=['./mobilenet_v2/dog_224x224.jpg'],
overwrite=True) -
人工智能
+关注
关注
1821文章
50376浏览量
267087 -
开发板
+关注
关注
26文章
6435浏览量
121231 -
瑞芯微
+关注
关注
27文章
863浏览量
54682 -
EASY-EAI灵眸科技
+关注
关注
4文章
111浏览量
3729 -
RV1126B
+关注
关注
0文章
100浏览量
255
发布评论请先 登录
瑞芯微(EASY EAI)RV1126B 音频输入
瑞芯微(EASY EAI)RV1126B PWM使用
瑞芯微(EASY EAI)RV1126B 音频输出
【EASY EAI Nano-TB(RV1126B)开发板试用】+初识篇
【EASY EAI Nano-TB(RV1126B)开发板试用】命令行功能测试-shell脚本进行IO控制-红绿灯项目
【EASY EAI Nano-TB(RV1126B)开发板试用】命令行功能测试-shell脚本进行IO控制-红绿灯按钮项目
【EASY EAI Nano-TB(RV1126B)开发板试用】+1、开箱上电
【EASY EAI Nano-TB(RV1126B)开发板试用】介绍、系统安装
RV1126系列选型指南:从RV1126到RV1126B,一文看懂升级差异
【免费试用】EASY EAI Nano-TB(RV1126B)开发套件评测
替代升级实锤!实测RV1126B,CPU性能吊打RV1126
瑞芯微(EASY EAI)RV1126B 人体关键点识别
瑞芯微(EASY EAI)RV1126B rknn-toolkit-lite2使用方法
瑞芯微(EASY EAI)RV1126B 模型转换API说明
评论