下载
中文
注册

模型推理

功能介绍

使用mxVision模型推理功能通过给定输入和指定模型,进行推理获得输出结果,支持om格式的模型推理,可使用ATC工具构建的动态Batch、动态分辨率和分档动态维度模型进行推理。模型推理输入为张量Tensor类型,由用户使用mxVision提供的接口构造使用。当前mxVision提供的python接口只支持同步推理。

接口调用流程

使用模型推理前,用户需准备好输入数据以及需要加载的模型,根据模型路径或者内存方式初始化Model类,通过调用Model类的infer接口获取模型推理结果。

模型推理调用流程参考如下:

图1 模型推理接口调用流程

关键接口说明如下:

  1. 调用mx_init()接口进行全局初始化。
  2. 模型初始化。

    用户需根据实际业务情况确认模型加载方式,选择从文件加载模型从内存加载模型。如果从内存加载,需要先将模型文件读取到内存,可通过以下两种方式传入。

    • 从文件加载模型,可选择直接向Model接口传入模型路径,进行初始化。
    • 通过结构体ModelLoadOptV2中的“loadType”字段指定加载方式后,再传入Model接口,其中加载方式在模型方面区分从文件加载模型,还是从内存加载模型,在内存方面区分是由系统内部管理,还是由用户管理,具体可参见ModelLoadOptV2
  3. 调用infer接口获取模型推理结果。
  4. 调用mx_deinit()接口进行去初始化。

示例代码

以下为功能特性关键步骤的代码示例,不可以直接拷贝运行,仅供参考。

import numpy as np 
from mindx.sdk import base 
from mindx.sdk.base import Tensor, Model

def process():
    # 模型推理  
    # 构造输入Tensor(以二进制输入为例)
    # 读取前处理好的numpy array二进制数据   
    input_array = np.load("preprocess_array.npy")  
    # 构造输入Tensor类并转移至device侧  
    input_tensor = Tensor(input_array)  
    input_tensor.to_device(device_id)  
    # 构造输入Tensor列表  
    input_tensors = [input_tensor]  
    # 模型路径  
    model_path = "resnet50_batchsize_1.om"  
    # 初始化Model类  
    model = Model(modelPath=model_path, deviceId=device_id)  
    # 执行推理  
    outputs = model.infer(input_tensors)

if __name__ == "__main__":
    base.mx_init()    # 资源初始化  
    process()
    base.mx_deinit()  # 资源去初始化