4.3.3 ModelZoo推理接口
概述
ModelZoo使用的板端推理接口为bpu_infer_lib。在上一小节中,我们讲述了bpu_infer_lib的安装方式、快速上手方法、和使用指南。
本小节,我们将具体介绍bpu_infer_lib中,各个api接口的具体细节和使用方式。
Infer对象
Infer对象是串联整个推理流程的对象。构建一个Infer对象,它将负责模型加载、读取输入、模型推理、获取输出的全链路。
Infer
【功能描述】该函数为Infer对象的构造函数,一般用于bpu_infer_lib的导入语句之后。
【参数描述】参数名称 | 参数类型 | 定义描述 |
---|---|---|
debug | bool | 是否为后续推理链路提供debug打印 |
import bpu_infer_lib
inf = bpu_infer_lib.Infer(True)
参数类型 | 描述 |
---|---|
Infer | 返回一个Infer类的对象,并提供后续可使用的接口 |
load_model
【功能描述】load_model函数为Infer对象的一个成员函数,用于加载地瓜bpu异构模型。
【参数描述】参数名称 | 参数类型 | 定义描述 |
---|---|---|
model_path | string | 地瓜bpu异构模型.bin文件的储存路径 |
inf.load_model("yolo_world.bin")
完成模型加载后,我们可以查看该模型要求的输入、输出的相关属性。举个例子,我们可以通过以下方式查看以下信息:
- 模型的输入个数
- 模型每个输入要求的数据排布(layout)
- 模型每个输入要求的数据类型(type)
print("Number of model's inputs:", len(inf.inputs))
print("Input[0]'s tensor layout:", inf.inputs[0].properties.tensorLayout)
print("Input[0]'s tensor type:", inf.inputs[0].properties.tensorType)
print("Input[1]'s tensor layout:", inf.inputs[1].properties.tensorLayout)
print("Input[1]'s tensor type:", inf.inputs[1].properties.tensorType)
结果如下:
Number of model's inputs: 2
Input[0]'s tensor layout: HB_DNN_LAYOUT_NCHW
Input[0]'s tensor type: HB_DNN_TENSOR_TYPE_F32
Input[1]'s tensor layout: HB_DNN_LAYOUT_NCHW
Input[1]'s tensor type: HB_DNN_TENSOR_TYPE_F32
同理,我们也可以查看:
- 模型的输出个数
- 模型每个输出要求的数据排布(layout)
- 模型每个输出要求的数据类型(type)
print("Number of model's outputs:", len(inf.outputs))
print("Output[0]'s tensor layout:", inf.outputs[0].properties.tensorLayout)
print("Output[0]'s tensor type:", inf.outputs[0].properties.tensorType)
print("Output[1]'s tensor layout:", inf.outputs[1].properties.tensorLayout)
print("Output[1]'s tensor type:", inf.outputs[1].properties.tensorType)
结果如下:
Number of model's outputs: 2
Output[0]'s tensor layout: HB_DNN_LAYOUT_NCHW
Output[0]'s tensor type: HB_DNN_TENSOR_TYPE_F32
Output[1]'s tensor layout: HB_DNN_LAYOUT_NCHW
Output[1]'s tensor type: HB_DNN_TENSOR_TYPE_F32
参数类型 | 描述 |
---|---|
bool | 返回模型是否加载成功 |
read_input
【功能描述】read_input函数为Infer对象的一个成员函数,用于读取一个预处理后的numpy array输入。
【参数描述】参数名称 | 参数类型 | 定义描述 |
---|---|---|
input | np.array | 对应输入的numpy array |
index | int | 对应输入numpy array的索引。在load_model后,可以打开debug查看多个inputs的顺序。对于单输入模型,输入index=0即可 |
inf.read_input(input_image, 0)
inf.read_input(text_embeddings, 1)
你知道吗
inf.read_input会自动校验开发者输入numpy array的数据类型和尺寸,不合适的数据类型和尺寸都会被校验。从而避免不合理的输入被模型读取。
参数类型 | 描述 |
---|---|
bool | 返回对应索引的numpy array是否正确被Infer对象所读入 |
forward
【功能描述】forward函数为Infer对象的一个成员函数,一般用于读取模型输入后进行地瓜bpu异构模型的推理环节。
【参数描述】参数名称 | 参数类型 | 定义描述 |
---|---|---|
more | bool | (可选参数,默认为False)在该次推理完成后,后续仍需使用该接口进行多次推理时,可将该参数设置为True。 |
inf.forward()
get_output
【功能描述】get_output函数为Infer对象的一个成员函数,一般用于Infer对象在完成forward函数后,获取推理结果时使用。
【使用方法】inf.get_output()
推理结果为numpy array,可以用以下方式,分别获得两个输出:
classes_scores = inf.outputs[0].data
bboxes = inf.outputs[1].data
参数类型 | 描述 |
---|---|
bool | 返回Infer对象是否能成功获取模型的推理结果 |