跳到主要内容

AidLite SDK for Python

简介

背景知识

深度学习中最重要的两个基础概念就是模型的 训练推理

深度学习的“训练”,我们可以把它类比成在学校中学习。你现在想要训练一个能区分苹果还是橘子的模型,你需要搜索一些苹果和橘子的图片,这些图片放在一起称为训练数据集,训练数据集是有标签的,苹果图片的标签就是苹果,橘子亦然。初始的神经网络通过不断的优化自身参数,来让自己变得准确,可能开始 10 张苹果的照片,只有 5 张被神经网络认为是苹果,另外 5 张识别错误,通过优化参数,让另外 5 张错的也变成对的,这个过程就称为训练

完成训练之后,可以得到实现相关功能的深度学习模型,使用这个模型文件可以实现深度学习的“推理”,即 可以基于其训练成果对其所获得的「新数据」进行推导。前述训练好的模型在训练数据集中表现良好,但是我们的期望是它可以对之前没看过的图片进行识别,比如我们重新拍一张包含苹果的图片扔进这个模型,也依然能够正确识别才行。

SDK 简介

对于前述的训练和推理两个阶段而言,训练模型需要开发者提前完成,得到可用的算法模型,然后就可以利用这个模型来使用 Aidlite-SDK 完成推理过程。

Aidlite-SDK 是跨平台统一 AI 推理中间件,针对不同 AI 框架和不同 AI 芯片的调用进行了抽象,形成统一 API,可实现模型推理实现的解耦合。

  • 兼容主流开源 AI 框架(TFLite 等)。
  • 兼容主流 AI 芯片厂商专属框架(SNPE、RKNN 等),支持厂商专属硬件(NPU)调用。

Aidlite-SDK 针对不同 AI 芯片平台的异构计算资源进行了抽象,实现了不同 AI 芯片厂商异构计算单元调用差异性的无感知化。

  • CPU-通用,性能差。
  • GPU-差异较少,性能较高。
  • NPU-厂商专属,最高性能。

模块化底层封装实现,可快速对新 AI 框架和新 AI 芯片进行适配支持,并通过 OTA 方式获得更新。

层次图

Aidlite-SDK 高度统一的 API 抽象,兼容了不同框架模型及 AI 芯片的调用,让开发人员只需进行一次开发,即可任意更换不同格式的模型或在不同厂商 AI 芯片实现迁移。大大减少了开发者的学习成本,平台迁移难度和成本。摆脱了对特定 AI 框架或者 AI 芯片的绑定,技术选型更灵活,产品落地更快速。

开发流程

Aidlite-SDK 在底层整合了多种深度学习的推理框架,所以不管具体使用的是哪个深度学习框架的模型,其推理所需流程、所需 API 都是高度统一的。

前置准备

Aidlite-SDK 是用来完成深度学习推理过程的组件,需要用到已经完成训练的深度学习算法模型,所以在使用此 SDK 之前,需要有某个深度学习框架(如 SNPE、TFLite 等)的训练好的模型文件。

一般流程

对于完整的推理流程,一般需要经过如下所示的几个步骤:

  1. 设置模型相关的参数,告知推理组件这个模型的详细信息,在推理过程中会使用到这些参数以更好地完成推理工作。
  2. 参数配置完成之后,使用这些参数生成推理解释器,并完成解释器的初始化。
  3. 完成模型的加载过程(加载过程的耗时长短不定)。
  4. 对输入数据做一些前处理操作(比如求均值、转为 float 数据类型等),得到模型推理所需的数据。
  5. 推理解释器设置输入数据。
  6. 使用推理解释器完成推理过程。
  7. 取出推理完成后的结果数据。
  8. 对于结果数据,做一些相关的后处理操作(比如找出置信度最高的分类等),得出结果。

通常来说,推理的实现过程是为模型提供不同的输入数据,然后在推理之后得到不同的输出数据,并解析输出数据看结果是否正常。所以对于相同的模型,上述第 4、5、6、7、8 步骤是持续循环执行的过程,而之前的步骤仅需执行一次。

差异操作

当然,在上述的统一流程中,针对不同框架的不同模型文件,也会有些具体的差异:

  1. 前述第 1 步骤,对于不同模型,需要不同的 Model 对象和 Config 对象的配置(如模型类型、模型输入输出数据类型等),用以告知 Aidlite-SDK 该模型相关的详细信息。
  2. 前述第 4 步骤,对于不同模型,需要不同的输入数据,也就有不同的前处理操作。
  3. 前述第 8 步骤,对于不同模型,会有不同的结果数据,也就有不同的后处理操作。

开发流程图

核心使用流程如下图所示。

开发流程图

快速上手

完整示例

我们先来看一个使用 Py-Aidlite-SDK 进行开发的代码示例,如下所示。

注意:以下代码仅用于展示主要开发流程,更多的接口和配置信息请详细阅读后面的 API 章节。

# 获取SDK版本信息,设置日志相关事项
print(f"Aidlite library version : {aidlite.get_library_version()}")
print(f"Aidlite Python library version : {aidlite.get_py_library_version()}")
# aidlite.set_log_level(aidlite.LogLevel.INFO)
# aidlite.log_to_stderr()
# aidlite.log_to_file("./fast_SNPE_inceptionv3_")

# 创建Model实例对象,并设置模型相关参数
model = aidlite.Model.create_instance(model_path)
if model is None:
print("Create model failed !")
return False
input_shapes = [[1,320,320,3]]
output_shapes = [[1,10,10,255],[1,20,20,255],[1,40,40,255]]
model.set_model_properties(input_shapes, aidlite.DataType.TYPE_FLOAT32, output_shapes, aidlite.DataType.TYPE_FLOAT32)

# 创建Config实例对象,并设置配置信息
config = aidlite.Config.create_instance()
if config is None:
print("build_interpretper_from_model_and_config failed !")
return False
config.framework_type = aidlite.FrameworkType.TYPE_SNPE
config.accelerate_type = aidlite.AccelerateType.TYPE_DSP
config.is_quantify_model = 1
config.snpe_out_names = ["InceptionV3/Predictions/Softmax"]

# 创建推理解释器对象
fast_interpreter = aidlite.InterpreterBuilder.build_interpretper_from_model_and_config(model, config)
if fast_interpreter is None:
print("build_interpretper_from_model_and_config failed !")
return None

# 完成解释器初始化
result = fast_interpreter.init()
if result != 0:
print(f"interpreter init failed !")
return False

# 加载模型
result = fast_interpreter.load_model()
if result != 0:
print("interpreter load model failed !")
return False

# 完整的推理代码示例:一般包括三部分:前处理 + 推理 + 后处理

# 对于不同的模型,对应不同的前处理操作
input_tensor_data = preprocess()

# 设置推理所需的输入数据
result = fast_interpreter.set_input_tensor(0, input_tensor_data)
if result != 0:
print("interpreter set_input_tensor() failed")
return False

# 完成推理操作
result = fast_interpreter.invoke()
if result != 0:
print("interpreter set_input_tensor() failed")
return False

# 获取模型此次推理的结果数据
out_data = fast_interpreter.get_output_tensor(0)
if out_data is None:
print("sample : interpreter->get_output_tensor() 0 failed !")
return False

# 对于不同的模型,对应不同的后处理操作
result = postprocess(out_data)

# 完成解释器资源释放操作
result = fast_interpreter.destory()
if result != 0:
print("interpreter destory() failed !")
return False

示例详解

下面针对刚才的示例,按照开发顺序依次进行详细讲解。

首先,为了方便调试,我们有时候会需要获取到 AidliteSDK 库的版本信息,同时也需要设置 AidliteSDK 运行时的日志记录情况。

# 获取SDK版本信息,设置日志相关事项
print(f"Aidlite library version : {aidlite.get_library_version()}")
print(f"Aidlite Python library version : {aidlite.get_py_library_version()}")
# aidlite.set_log_level(aidlite.LogLevel.INFO)
# aidlite.log_to_stderr()
# aidlite.log_to_file("./fast_SNPE_inceptionv3_")

然后,我们需要为模型文件创建对应的 Model 对象,并设置模型相关的更多信息,如模型输入输出的 shape 信息、输入输出的数据类型等等。

# 创建Model实例对象,并设置模型相关参数
model = aidlite.Model.create_instance(model_path)
if model is None:
print("Create model failed !")
return False
input_shapes = [[1,320,320,3]]
output_shapes = [[1,10,10,255],[1,20,20,255],[1,40,40,255]]
model.set_model_properties(input_shapes, aidlite.DataType.TYPE_FLOAT32, output_shapes, aidlite.DataType.TYPE_FLOAT32)

接下来,我们需要创建 Config 类型的对象,此对象用于记录模型推理相关的配置信息,推理框架运行过程中会使用到这些配置信息。

注意:此处仅列出部分使用到的配置项,更多信息请查阅对应 API 相关部分 同时这些配置项可能存在的默认值,以及每个配置项具体都有哪些可选值,这些都需要详细阅读对应的 API 章节。

# 创建Config实例对象,并设置配置信息
config = aidlite.Config.create_instance()
if config is None:
print("build_interpretper_from_model_and_config failed !")
return False
config.framework_type = aidlite.FrameworkType.TYPE_SNPE
config.accelerate_type = aidlite.AccelerateType.TYPE_DSP
config.is_quantify_model = 1
config.SNPE_out_names = ["InceptionV3/Predictions/Softmax"]

创建 Model 对象和 Config 对象没有异常的情况下,配置完成之后,就可以利用这个 Model 对象和 Config 对象来创建最重要的推理解释器 Interpreter 对象。并且执行初始化操作和加载模型的操作,前面的配置项很多都会在这个过程中使用到,这个过程的耗时可能会相对长一些。

# 创建推理解释器对象
fast_interpreter = aidlite.InterpreterBuilder.build_interpretper_from_model_and_config(model, config)
if fast_interpreter is None:
print("build_interpretper_from_model_and_config failed !")
return None

# 完成解释器初始化
result = fast_interpreter.init()
if result != 0:
print(f"interpreter init failed !")
return False

# 加载模型
result = fast_interpreter.load_model()
if result != 0:
print("interpreter load model failed !")
return False

完成了前述的这些配置和创建等事项后,调用者需要完成输入数据的前处理操作。这个前处理究竟需要做些什么事情,根据调用者自己的模型不同而各异,所以此处使用伪代码带过。

# 对于不同的模型,对应不同的前处理操作
input_tensor_data = preprocess()

准备好输入数据之后,需要将输入数据传递给推理对象,就可以做推理操作,推理成功完成后就可以得到针对当次输入数据的推理结果。

# 设置推理所需的输入数据
result = fast_interpreter.set_input_tensor(0, input_tensor_data)
if result != 0:
print("interpreter set_input_tensor() failed")
return False

# 完成推理操作
result = fast_interpreter.invoke()
if result != 0:
print("interpreter set_input_tensor() failed")
return False

# 获取模型此次推理的结果数据
out_data = fast_interpreter.get_output_tensor(0)
if out_data is None:
print("sample : interpreter->get_output_tensor() 0 failed !")
return False

调用者需要对得到的输出结果数据后处理操作。这个后处理究竟需要做些什么事情,同样也是根据调用者自己的模型不同而各异,所以此处也是使用名称带过。

# 对于不同的模型,对应不同的后处理操作
result = postprocess(out_data)

最后,完成必要的资源释放工作。

# 完成解释器资源释放操作
result = fast_interpreter.destory()
if result != 0:
print("interpreter destory() failed !")
return False

API 详细说明

模型数据类型 class DataType

对于 AidliteSDK 而言,会处理不同框架的不同模型,每个模型自己也有不同的输入数据类型和不同的输出数据类型。在前述的使用流程中,需要设置模型的输出输出数据类型,就需要用到此数据类型。

成员变量名类型描述
TYPE_DEFAULTint0无效的 DataType 类型
TYPE_UINT8int1无符号字节数据
TYPE_INT8int2字节数据
TYPE_UINT32int3无符号 int32 数据
TYPE_FLOAT32int4float 数据
TYPE_INT32int5int32 数据
TYPE_INT64int6int64 数据

推理实现类型 class ImplementType(废除)

特别说明:从 V2.0.7 开始,废除该类型。

成员变量名类型描述
TYPE_DEFAULTint0无效 ImplementType 类型
TYPE_MMKVint1通过 MMKV 实现
TYPE_FASTint2通过 IPC 的后端实现
TYPE_LOCALint3通过本地调用的后端实现

模型框架类型 class FrameworkType

前面提到过,Aidlite SDK 整合了多种深度学习推理框架,所以在前述使用流程中,需要设置当前使用哪个框架的模型,就需要使用此框架类型。

成员变量名类型描述
TYPE_DEFAULTint0无效 FrameworkType 类型
TYPE_SNPEint1SNPE 1.x (DLC) 模型类型
TYPE_TFLiteint2TFLite 模型类型
TYPE_RKNNint3RKNN 模型类型
TYPE_QNNint4QNN 模型类型
TYPE_SNPE2int5SNPE 2.x (DLC) 模型类型
TYPE_NCNNint6NCNN 的模型类型
TYPE_MNNint7MNN 的模型类型
TYPE_TNNint8TNN 的模型类型
TYPE_PADDLEint9Paddle 的模型类型

推理加速硬件类型 class AccelerateType

对于每个深度学习推理框架而言,可能会支持运行在不同的加速硬件单元上(如 SNPE 模型运行在高通 DSP 计算单元,RKNN 模型运行在瑞芯微 NPU 计算单元),所以在前述使用流程中,需要设置当前模型期望运行在哪种计算单元,就需要使用此加速硬件单元类型。

成员变量名类型描述
TYPE_DEFAULTint0无效 AccelerateType 类型
TYPE_CPUint1CPU 通用加速单元
TYPE_GPUint2GPU 通用加速加速
TYPE_DSPint3高通 DSP 加速单元
TYPE_NPUint4NPU 通用加速单元

日志级别 class LogLevel

AidliteSDK 提供有设置日志的接口(后续会介绍),需要提供给接口当前使用哪个日志级别,所以就需要使用此日志级别。

成员变量名类型描述
INFOint0消息
WARNINGint1警告
ERRORint2错误
FATALint3致命错误

模型类 class Model

前述提到在创建推理解释器之前,需要设置具体模型的相关详细参数。Model 类主要用于记录模型的文件信息、结构信息、运行过程中模型相关内容。

创建 Model 实例对象 create_instance()

想要设置模型相关的详细信息,当然就需要先有模型实例对象,此函数用于创建 Mode 实例对象。

API create_instance
描述 通过传递模型文件的路径名称,构造 Model 类型的实例对象
参数 model_path:模型文件的路径名称
返回值 正常:Model 实例对象
异常:None
# 使用当前路径下 inceptionv3_float32.dlc 文件创建模型对象,返回值为空则报错
model = aidlite.Model.create_instance(model_path=r"./inceptionv3.dlc")
if model is None:
print("Create model failed !")
return False

设置模型属性 set_model_properties()

模型实例对象创建成功之后,需要设置模型的输入输出数据类型和输入输出 tensor 数据的 shape 信息。

API set_model_properties
描述 设置模型的属性,输出输出数据 shape 以数据类型。
参数 input_shapes:输入 tensor 的 shape 数组,二维数组结构。
input_data_type:输入 tensor 的数据类型,DataType 枚举类型。
output_shapes:输出 tensor 的 shape 数组,二维数组结构。
output_data_type:输出 tensor 的数据类型,DataType 枚举类型。
返回值 Model 对象所对应的模型文件路径字符串对象
# 数据类型使用前述 DataType,输入输出 shape 是二维数组
input_shapes=[[1,640,640,3]]
output_shapes=[[1,10,10,255], [1,20,20,255], [1,40,40,255]]
model.set_model_properties(input_shapes=input_shapes, input_data_type=aidlite.DataType.TYPE_FLOAT32, output_shapes=output_shapes, output_data_type=aidlite.DataType.TYPE_FLOAT32)

获取模型路径 get_model_absolute_path()

API get_model_absolute_path
描述 用于获取模型文件的存在路径
参数
返回值 Model 对象所对应的模型文件路径字符串对象
model_path = model.get_model_absolute_path()

获取模型框架类型 get_model_type()

API get_model_type
描述 用于获取模型类型的标识,如 DLC、RKNN 等不同模型类别
参数
返回值 Model 对象所对应的模型文件路径字符串对象
model_type = model.get_model_type()

配置类 class Config

前述提到在创建推理解释器之前,除了需要设置 Model 具体信息之外,还需要设置一些推理时的配置信息。Config 类用于记录需要预先设置的配置选项,这些配置项在运行时会被用到。

创建 Config 实例对象 create_instance()

想要设置运行时的配置信息,当然就需要先有配置实例对象,此函数用于创建 Config 实例对象。

API create_instance
描述 用于构造 Config 类的实例对象
参数 snpe_out_names:模型输出节点的名称列表 for FAST(可选)
number_of_threads:线程数,大于 0 有效(可选)
is_quantify_model:是否为量化模型,1 表示量化模型 for FAST(可选)
fast_timeout:接口超时时间(毫秒,大于 0 有效)for FAST(可选)
accelerate_type:加速硬件的类型(可选)
framework_type:底层深度学习框架的类型(可选)
返回值 正常:Config 实例对象
异常:None
# 创建配置实例对象,返回值为 None 则报错
config = aidlite.Config.create_instance()
if config is None:
print("Create config failed !")
return False

成员变量列表

Config 对象用于设置运行时的配置信息,其中就包含如下的这些参数:

成员变量 accelerate_type
类型 class AccelerateType
默认值 AccelerateType.TYPE_CPU
描述 加速硬件的类型

特别说明:从 V2.0.7 开始,废除该类型。

成员变量 implement_type(废除)
类型 class ImplementType
默认值 ImplementType.TYPE_LOCAL
描述 底层功能实现的途径区分

成员变量 framework_type
类型 class FrameworkType
默认值 FrameworkType.TYPE_DEFAULT
描述 底层推理框架的类型

成员变量 number_of_threads
类型 int
默认值 -1
描述 线程数,大于 0 有效

成员变量 SNPE_out_names
类型 list
默认值
描述 模型输出节点的名称列表 for FAST

成员变量 is_quantify_model
类型 int
默认值 0
描述 是否为量化模型,1 表示量化模型 for FAST

成员变量 fast_timeout
类型 int
默认值 -1
描述 接口超时时间(毫秒,大于 0 有效)for FAST

config.framework_type = aidlite.FrameworkType.TYPE_SNPE
config.accelerate_type = aidlite.AccelerateType.TYPE_DSP
config.is_quantify_model = 1
config.SNPE_out_names = ["InceptionV3/Softmax"]
config.fast_timeout = 1000

上下文类 class Context

用于存储执行过程中所涉及的运行时上下文,就包括 Model 对象和 Config 对象,后续可能会扩展运行时的数据。

构造函数 Context()

API Context
描述 构造 Context 实例对象
参数 model:Model 实例对象
config:Config 实例对象
返回值 正常:Context 实例对象
异常:None
context = aidlite.Context(model=model, config=config)

获取 Model 成员变量 get_model()

API get_model
描述 获取 context 管理的 Model 对象
参数
返回值 Model 对象
model = context.get_model()

获取 Config 成员变量 get_config()

API get_config
描述 获取 context 管理的 Config 对象
参数
返回值 Config 对象
config = context.get_config()

解释器类 class Interpreter

Interpreter 类型的对象实例是执行推理操作的主体,用于执行具体的推理过程。前述提及的推理流程中,创建解释器对象之后,所有的操作都是基于解释器对象来完成的,所以它是 AidliteSDK 绝对的核心内容。

创建 Interpreter 实例对象 create_instance()

想要执行推理相关的操作,推理解释器肯定必不可少,此函数就用于构建推理解释器的实例对象。

API create_instance
描述 利用 Context 对象所管理的各种数据,构造 Interpreter 类型的对象。
参数
返回值 正常:Interpreter 实例对象
异常:None
# 创建解释器对象,返回值为 None 则报错
interpreter = aidlite.Interpreter.create_instance()
if interpreter is None:
print("Create Interpreter failed !")
return False

初始化 init()

解释器对象创建之后,需要执行一些初始化操作(比如环境检查、资源构建等)。

API create_instance
描述 利用 Context 对象所管理的各种数据,构造 Interpreter 类型的对象。
参数 context:Context 对象实例。其中管理着 Model 和 Config 对象,其中包含模型数据、配置数据等
返回值 正常:0
异常:非 0
# 解释器初始化,返回值非0则报错
result = aidlite.interpreter.init()
if result != 0:
printf("sample : interpreter->init() failed !")
return False

加载模型 load_model()

解释器对象完成初始化操作之后,就可以为解释器加载所需的模型文件,完成模型加载工作。后续的推理过程就使用加载的模型资源。

API load_model
描述 完成模型加载相关的工作。因为前述在 Model 对象中已经设置模型文件的路径,所以直接执行模型加载操作即可
参数
返回值 正常:0
异常:非 0
# 解释器加载模型,返回值非 0 则报错
result = interpreter.load_model()
if result != 0:
print("sample : interpreter->load_model() failed !")
return False

设置输入数据 set_input_tensor()

之前介绍流程时提到,设置输入数据之前,对应不同的模型,需要完成不同的前处理操作以适配具体模型。

API invoke
描述 执行推理运算过程
参数 in_tensor_idx:输入 tensor 的索引值,类型为 int
input_data:输入 tensor 的二进制数据,类型根据实际情况传递
返回值 正常:0
异常:非 0
# 设置推理的输入数据,返回值非 0 则报错
result = interpreter.set_input_tensor(in_tensor_idx=1, input_data=obj)
if result != 0:
print("interpreter->set_input_tensor() failed !")
return False

执行推理 invoke()

之前介绍流程时提到,设置输入数据之后,接下来的步骤自然就是对输入数据执行推理运行过程。

API invoke
描述 执行推理运算过程
参数
返回值 正常:0
异常:非 0
# 执行推理运行操作,返回值非 0 则报错
result = interpreter.invoke()
if result != 0:
print("sample : interpreter->invoke() failed !")
return False

获取输出数据 get_output_tensor()

推理完成之后,就需要将推理得到的结果数据取出来。之前介绍流程时提到,取出结果数据之后,就可以对这些结果数据进行处理,判断结果是否正确。

API get_output_tensor
描述 推理成功之后,获取推理结果数据
参数 out_tensor_idx:结果输出 tensor 的索引值
output_type:结果输出的类型,可选参数,不传默认为 aidlite.DataType.TYPE_FLOAT32
返回值 正常:float 结果数据。
异常:None。
# 获取推理结果数据,返回值为 None 则报错
out_data = interpreter.get_output_tensor(out_tensor_idx=1, output_type=aidlite.DataType.TYPE_INT32)
if out_data is None:
print("interpreter->get_output_tensor() failed !")
return False

资源释放 destory()

前面提到解释器对象需要执行 init 初始化操作和加载模型的操作,相应的,解释器也会需要执行一些释放操作,将之前创建的资源予以销毁。

API destory
描述 完成必要的释放操作
参数
返回值 正常:0
异常:非 0
# 执行解释器释放过程,返回值非 0 则报错
result = interpreter.destory()
if result != 0:
print("sample : interpreter-> destory() failed !")
return False

解释器创建类 class InterpreterBuilder

统一的解释器 Interpreter 对象的创建函数,通过此类来创建所需的解释器对象。

构建解释器 build_interpretper_from_path()

构建推理解释器对象,可以提供不同的参数,最简单的就是只提供模型文件的路径和名称。

API build_interpretper_from_path
描述 通过模型文件的路径名称,直接创建对应的解释器对象。相关涉及的参数都使用默认值
参数 path:模型文件的路径名称
返回值 正常:Interpreter 对象实例
异常:None
# 传入 Model 文件路径来构建解释器,返回值为 None 则报错
interpreter = aidlite.InterpreterBuilder.build_interpretper_from_path(path=r"./640.dlc")
if interpreter is None:
print("Create Interpreter failed !")
return False

构建解释器 build_interpretper_from_model()

构建推理解释器对象,除了提供模型文件路径之外,也可以提供 Model 对象,这样不仅可以设置模型文件的路径名称,还可以设置模型的输入输出数据类型和输入输出数据的 shape 信息。

API build_interpretper_from_model
描述 通过传入 Model 对象来创建对应的解释器对象。而 Config 相关涉及的参数都使用默认值
参数 model:Model 类型的对象,包含模型相关的数据
返回值 正常:Interpreter 对象实例
异常:None
# 传入 Model 对象来构建解释器,返回值为 None 则报错
interpreter = aidlite.InterpreterBuilder.build_interpretper_from_model(model=model)
if interpreter is None:
print("Create Interpreter failed !")
return False

构建解释器 build_interpretper_from_model_and_config()

构建推理解释器对象,除了前述的两种方式,也可以同时提供 Model 对象和 Config 对象,这样不仅可以提供模型相关信息,还可以提供更多的运行时配置参数。

API build_interpretper_from_model_and_config
描述 通过传入 Model 对象和 Config 来创建对应的解释器对象。
参数 model:Model 类型的对象,包含模型相关的数据
config:Config 类型的对象,包含一些配置参数
返回值 正常:Interpreter 对象实例
异常:None
# 传入 Model 和 Config 对象来构建解释器,返回值为 None 则报错
interpreter = aidlite.InterpreterBuilder.build_interpretper_from_model_and_config(model=model, config=config)
if interpreter is None:
print("Create Interpreter failed !")
return False

其他方法

获取 SDK 版本信息 get_library_version()

API get_library_version
描述 用于获取当前 Aidlite-SDK 的版本相关信息
参数
返回值 返回值为当前 Aidlite-SDK 的版本信息字符串

获取 Python SDK 版本信息 get_library_version()

API get_py_library_version
描述 用于获取当前 Py-Aidlite-SDK 的版本相关信息
参数
返回值 返回值为当前 Py-Aidlite-SDK 的版本信息字符串

设置日志级别 set_log_level()

API set_log_level
描述 设置当前的最低日志级别,输出大于等于该日志级别的日志数据。默认打印输出 WARNING 及以上级别的日志。
参数 log_level:类型 LogLevel 的取值
返回值 默认返回 0 值

日志输出到标准终端 log_to_stderr()

API log_to_stderr
描述 设置日志信息输出到标准错误终端
参数
返回值 默认返回 0 值

日志输出到文本文件 log_to_file()

API log_to_file
描述 设置日志信息输出到指定的文本文件
参数 path_and_prefix:日志文件的存放路径与名称前缀
also_to_stderr:标识是否同时输出日志到 stderr 终端,默认值为 False
返回值 正常:0
异常:非 0

获取最近日志信息 last_log_msg()

API last_log_msg
描述 获取当前某个日志级别的最新日志信息,通常获取最新的错误信息
参数 log_level:类型 LogLevel 的取值
返回值 最新日志信息