cxx_api.md 2.0 KB
Newer Older
J
up  
juncaipeng 已提交
1 2 3 4 5 6 7
---
layout: post
title: C++ API接口使用指南
---

# C++ API接口使用指南

J
juncaipeng 已提交
8
请参考[源码编译](../source_compile)确保 Lite 可以正确编译,下面用Lite的c++接口加载并执行 MobileNetV1 模型为例,详细说明使用方法。
J
up  
juncaipeng 已提交
9 10 11 12 13 14 15

## 准备模型

Lite支持PaddlePaddle训练好的模型,MobileNetV1模型可以由以下三种方式得到:

- 直接下载训练好的[MobileNetV1模型](https://paddle-inference-dist.bj.bcebos.com/mobilenet_v1.tar.gz)
- 使用[PaddlePaddle](https://paddlepaddle.org.cn/)构建MobileNetV1网络并训练
J
juncaipeng 已提交
16
- 使用[X2Paddle](../x2paddle)对caffe或者tensorflow的MobileNetV1模型进行转换得到
J
up  
juncaipeng 已提交
17 18 19

## 模型优化

J
juncaipeng 已提交
20
使用Model Optimize Tool优化模型,使得模型预测过程表现出优异的性能。Model Optimize Tool的具体使用方法请参考[文档](../model_optimize_tool)
J
up  
juncaipeng 已提交
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

- 准备model_optimize_tool
- 使用model_optimize_tool优化模型
- 得到优化后的模型,包括__model__.nb文件和param.nb文件

## 加载模型

加载MobileNetV1网络模型,创建predictor,具体可以参考```paddlelite/lite/api/model_test.cc```文件。
```c++
lite::DeviceInfo::Init();
lite::DeviceInfo::Global().SetRunMode(lite::LITE_POWER_HIGH, thread_num);
lite_api::MobileConfig config;
config.set_model_dir(model_dir);

auto predictor = lite_api::CreatePaddlePredictor(config);
```

## 设定输入

得到input_tensor,设置输入值,此处我们设定为全1

```cpp
// 获取第 j 个 tensor 的句柄
auto input_tensor = predictor->GetInput(j);
input_tensor->Resize(input_shapes[j]);

// 获取数据指针,以塞入数据
auto input_data = input_tensor->mutable_data<float>();
int input_num = 1;
for (int i = 0; i < input_shapes[j].size(); ++i) {
  input_num *= input_shapes[j][i];
}
for (int i = 0; i < input_num; ++i) {
  input_data[i] = 1.f;
}
```

## 执行并输出

```cpp
predictor.Run()
auto* out = predictor.GetOutput(0);
LOG(INFO) << "dims " << out->dims();
LOG(INFO) << "out data size: " << out->data_size();
```

输出为```dims dims{1000,}, out data size: 1000```