跳到主要内容

4.1 K230 CanMV nncase_runtime 模块API手册

前言

概述

此文档介绍CanMV nncase_runtime模块,用于指导开发人员使用MicroPython调用KPU和AI2D模块。

读者对象

本文档(本指南)主要适用于以下人员:

  • 技术支持工程师
  • 软件开发工程师

缩略词定义

简称说明
nncase_runtimek230 nncase runtime包,包含KPU模块和AI2D模块
nncase_runtime.kpukpu模块
nncase_runtime.ai2dai2d模块

修订记录

文档版本号修改说明修改者日期
V1.0初版杨浩琪2023-09-18

1. 概述

此文档介绍CanMV nncase_runtime模块,用于指导开发人员使用MicroPython调用KPU和AI2D模块。

2. API描述

2.1 from_numpy

【描述】 从MicroPython中ulab.numpy创建runtime_tensor。

【语法】

runtime_tensor = nncase_runtime.from_numpy(ulab.numpy)

【参数】

参数名称描述输入/输出
ulab.numpynumpy对象输入

【返回值】

返回值描述
runtime_tensor返回创建好的runtime_tensor。
其他失败,抛出C++异常。

2.2 to_numpy

【描述】

将runtime_tensor转为ulab.numpy。

【语法】

runtime_tensor = kpu.get_output_tensor(0)
result = runtime_tensor.to_numpy()

【参数】

无。

【返回值】

返回值描述
ulab.numpy返回从runtime_tensor转换后的ulab.numpy。
其他失败

2.3 nncase_runtime.kpu

kpu模块提供调用KPU硬件来完成开发板上推理神经网络模型的基础函数,主要包括加载模型,设置输入数据,执行推理,获取输出结果等功能。

2.3.1 load_kmodel

【描述】

加载编译生成的kmodel格式的神经网络。

【语法】

load_kmodel(read_bin)
load_kmodel(path)

【参数】

参数名称描述输入/输出
read_binkmodel的二进制内容输入
pathkmodel的路径输入

【返回值】

返回值描述
成功。
其他失败,抛出C++异常。

2.3.2 set_input_tensor

【描述】

设置kmodel推理时的runtime_tensor。

【语法】

set_input_tensor(index, runtime_tensor)

【参数】

参数名称描述输入/输出
indexkmodel的输入索引。输入
runtime_tensor包含输入数据信息。输入

【返回值】

返回值描述
成功。
其他失败,抛出C++异常。

2.3.3 get_input_tensor

【描述】

获取kmodel推理时的runtime_tensor。

【语法】

get_input_tensor(index)

【参数】

参数名称描述输入/输出
indexkmodel的输入索引。输入

【返回值】

返回值描述
runtime_tensor包含输入数据信息。
其他失败,抛出C++异常。

2.3.4 set_output_tensor

【描述】

设置kmodel推理后的输出结果。

【语法】

set_output_tensor(index, runtime_tensor)

【参数】

参数名称描述输入/输出
indexkmodel的输出索引。输入
runtime_tensor输出结果。输入

【返回值】

返回值描述
成功。
其他失败,抛出C++异常。

2.3.5 get_output_tensor

【描述】

获取kmodel推理后的输出结果。

【语法】

get_output_tensor(index)

【参数】

参数名称描述输入/输出
indexkmodel的输出索引。输入

【返回值】

返回值描述
runtime_tensor获取第index个runtime_tensor。
其他失败,抛出C++异常。

2.3.6 run

【描述】

启动kmodel推理

【语法】

run()

【返回值】

返回值描述
推理成功
其他失败,抛出C++异常。

2.3.7 inputs_size

【描述】

获取kmodel的输入个数。

【语法】

inputs_size()

【返回值】

返回值描述
size_tkmodel的输入个数。
其他失败,抛出C++异常。

2.3.8 outputs_size

【描述】

获取kmodel的输出个数。

【语法】

outputs_size()

【返回值】

返回值描述
size_tkmodel的输出个数。
其他失败,抛出C++异常。

2.3.9 get_input_desc

【描述】

获取指定索引的输入的描述信息。

【语法】

get_input_desc(index)

【参数】

参数名称描述输入/输出
indexkmodel的输入索引。输入

【返回值】

返回值描述
MemoryRange第index个输入信息:dtype, start, size

2.3.10 get_output_desc

【描述】

获取指定索引的输出的描述信息。

【语法】

get_output_desc(index)

【参数】

参数名称描述输入/输出
indexkmodel的输入索引。输入

【返回值】

返回值描述
MemoryRange第index个输出信息:dtype, start, size

2.4 nncase_runtime.ai2d

2.4.1 build

【描述】

ai2d_builder的构造函数.

【语法】

build(input_shape, output_shape)

【参数】

名称描述
input_shape输入形状
output_shape输出形状

【返回值 】

返回值描述
ai2d_builder返回ai2d_builder,用于执行。
其他失败,抛出C++异常。

2.4.2 run

配置寄存器并启动AI2D的计算.

【定义】

ai2d_builder.run(input_tensor, output_tensor)

【参数】

名称描述
input_tensor输入tensor
output_tensor输出tensor

【返回值】

返回值描述
成功。
其他失败,抛出C++异常。

2.4.3 set_dtype

【描述】

用于设置AI2D计算过程中的数据类型.

【定义】

set_dtype(src_format, dst_format, src_type, dst_type)

【参数】

名称类型描述
src_formatai2d_format输入数据格式
dst_formatai2d_format输出数据格式
src_typedatatype_t输入数据类型
dst_typedatatype_t输出数据类型

2.4.4 set_crop_param

【描述】

用于配置crop相关的参数.

【定义】

set_crop_param(crop_flag, start_x, start_y, width, height)

【参数】

名称类型描述
crop_flagbool是否开启crop功能
start_xint宽度方向的起始像素
start_yint高度方向的起始像素
widthint宽度方向的crop长度
heightint高度方向的crop长度

2.4.5 set_shift_param

【描述】

用于配置shift相关的参数.

【定义】

set_shift_param(shift_flag, shift_val)

【参数】

名称类型描述
shift_flagbool是否开启shift功能
shift_valint右移的比特数

2.4.6 set_pad_param

【描述】

用于配置pad相关的参数.

【定义】

set_pad_param(pad_flag, paddings, pad_mode, pad_val)

【参数】

名称类型描述
pad_flagbool是否开启pad功能
paddingslist各个维度的padding, size=8,分别表示dim0到dim4的前后padding的个数,其中dim0/dim1固定配置0
pad_modeint只支持pad constant,配置0即可
pad_vallist每个channel的padding value

2.4.7 set_resize_param

【描述】

用于配置resize相关的参数.

【定义】

set_resize_param(resize_flag, ai2d_interp_method, ai2d_interp_mode)

【参数】

名称类型描述
resize_flagbool是否开启resize功能
ai2d_interp_methodinterp_methodresize插值方法
ai2d_interp_modeinterp_moderesize模式

2.4.8 set_affine_param

【描述】

用于配置affine相关的参数.

【定义】

set_affine_param(affine_flag, ai2d_interp_method, cord_round, bound_ind, bound_val, bound_smooth, M)

【参数】

名称类型描述
affine_flagbool是否开启affine功能
ai2d_interp_methodinterp_methodAffine采用的插值方法
cord_rounduint32_t整数边界0或者1
bound_induint32_t边界像素模式0或者1
bound_valuint32_t边界填充值
bound_smoothuint32_t边界平滑0或者1
Mlist仿射变换矩阵对应的vector,仿射变换为Y=[a_0, a_1; a_2, a_3] \cdot X + [b_0, b_1] $, 则 M=[a_0,a_1,b_0,a_2,a_3,b_1 ]

2.4.9 ai2d_format

【描述】

ai2d_format用于配置输入输出的可选数据格式.

【定义】

class ai2d_format
YUV420_NV12 = 0
YUV420_NV21 = 1
YUV420_I420 = 2
NCHW_FMT = 3
RGB_packed = 4
RAW16 = 5

2.4.10 interp_method

【描述】

interp_method用于配置可选的插值方式.

【定义】

class interp_method:
tf_nearest = 0
tf_bilinear = 1
cv2_nearest = 2
cv2_bilinear = 3

2.4.11 interp_mode

【描述】

interp_mode 用于配置可选的插值模式.

【定义】

class interp_mode:
none = 0
align_corner = 1
half_pixel = 2

2.5 shrink_memory_pool

【描述】

清理nncase_runtime产生的内存池,释放内存。

【语法】

import gc
import nncase_runtime

gc.collect()
nncase_runtime.shrink_memory_pool()