---
title: 模型推理
description: "使用mxVision模型推理功能通过给定输入和指定模型，进行推理获得输出结果，支持om格式的模型推理，可使用ATC工具构建的动态Batch、动态分辨率和分档动态维度模型进行推理。"
url: https://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/latest/Application%20Development%20Guide/msadg/mxvisionug_0041.html
sourcePath: /source/zh/Atlas200IDKA2DeveloperKit/23.0.RC2/Application Development Guide/msadg/mxvisionug_0041.html
indexId: ea02a2a86f8733ed10d11f9c8e49a6aeb72289d46d9a22bc692deaf84e09f94a102
---
# 模型推理

#### 功能介绍

使用mxVision模型推理功能通过给定输入和指定模型，进行推理获得输出结果，支持om格式的模型推理，可使用ATC工具构建的动态Batch、动态分辨率和分档动态维度模型进行推理。


#### 接口调用流程

使用模型推理前，用户需准备好输入数据以及需要加载的模型，根据模型路径或者内存方式初始化Model类，通过调用Model类的Infer接口获取模型推理结果。输入数据必须和模型输入数据类型以及格式一致，如果用户自行申请输出数据内存，则输出数据类型和格式需和模型输出保持一致，模型输入输出信息可以通过Model类的相关接口进行查询。

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

关键接口说明如下：

1. 调用  MxInit()
接口进行全局初始化。
2. 模型初始化。
用户需根据实际业务情况确认模型加载方式，选择从文件加载模型或从内存加载模型。如果从内存加载，需要先将模型文件读取到内存，可通过以下两种方式传入。

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


#### 示例代码

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

```
// 初始化
MxBase::MxInit();
{
// 输入二进制数据， 需用户自行准备
std::string
filePath
= "./test.bin";
// 读取输入数据到内存
void* dataPtr = ReadTensor(
filePath
);
// 输入数据类型，和模型输入数据类型一致
auto dataType = MxBase::TensorDType::INT32;
// 构造输入shape，和模型输入shape一致
std::vector<uint32_t> shape = {1, 128};
// 构造tensor
MxBase::Tensor
tensor
(dataPtr, shape, dataType, 0);
// 构造模型输入
std::vector<MxBase::Tensor> inputs{tensor};
// 模型路径，需用户自行指定
std::string
modelPath
= "./test.om";
// 根据模型路径加载模型
MxBase::Model
model
(
modelPath
);
// 执行模型推理, outputs即为推理结果
std::vector<MxBase::Tensor> outputs = model.
Infer
(inputs);
}
//去初始化
MxBase::MxDeInit();
```

根据结构体ModelLoadOptV2方式初始化示例参考如下：
```
MxBase::ModelLoadOptV2 mdlLoadOpt;
mdlLoadOpt.loadType = ModelLoadOptV2::LOAD_MODEL_FROM_FILE;  // 指定模型加载方式
mdlLoadOpt.modelPath = modelPath;
MxBase::Model model(mdlLoadOpt);
```
