提交 93e43080 编写于 作者: C Channingss

optimize lite android docs

上级 6d6a0df1
......@@ -5,21 +5,22 @@ PaddleX的安卓端部署由PaddleLite实现,部署的流程如下,首先将
> PaddleX --> Inference Model --> PaddleLite Opt --> PaddleLite Inference
文章简介:
- step1: 介绍如何将PaddleX导出为inference model
- step2: 使用PaddleLite的OPT模块对模型进行优化
- step3: 介绍了基于MobileNetv2的安卓demo,以及PaddleX Android SDK
- 1.介绍如何将PaddleX导出为inference model
- 2.使用PaddleLite的OPT模块对模型进行优化
- 3.介绍基于PaddleX Android SDK的安卓demo,以及如何快速部署训练好的模型
- 4.介绍PaddleX Android SDK和二次开发
## step 1. 将PaddleX模型导出为inference模型
## 1. 将PaddleX模型导出为inference模型
参考[导出inference模型](../export_model.html)将模型导出为inference格式模型。
**注意:由于PaddleX代码的持续更新,版本低于1.0.0的模型暂时无法直接用于预测部署,参考[模型版本升级](../upgrade_version.md)对模型版本进行升级。**
## step 2. 将inference模型优化为PaddleLite模型
## 2. 将inference模型优化为PaddleLite模型
目前提供了两种方法将Paddle模型优化为PaddleLite模型:
- 1.python脚本优化模型,简单上手,目前支持最新的PaddleLite 2.6.1版本
- 2.bin文件优化模型(linux),支持develop版本(Commit Id:11cbd50e),适用于部署`DeepLab模型`的用户。
- 2.bin文件优化模型(linux),支持develop版本(Commit Id:11cbd50e),适用于部署`DeepLab模型``Unet模型`的用户。
### 2.1 使用python脚本优化模型
......@@ -45,9 +46,19 @@ python /PaddleX/deploy/lite/export_lite.py --model_dir /path/to/inference_model
--optimize_out_type=naive_buffer \
--optimize_out=model_output_name
```
| 参数 | 说明 |
| ---- | ---- |
| --model_file | 导出inference模型中包含的网络结构文件:`__model__`所在的路径|
| --param_file | 导出inference模型中包含的参数文件:`__params__`所在的路径|
| --valid_targets |指定模型可执行的backend,这里请指定为`arm`|
| --optimize_out_type | 输出模型类型,目前支持两种类型:protobuf和naive_buffer,其中naive_buffer是一种更轻量级的序列化/反序列化,这里请指定为`naive_buffer`|
详细的使用方法和参数含义请参考: [使用opt转化模型](https://paddle-lite.readthedocs.io/zh/latest/user_guides/opt/opt_bin.html)
## step 3. 移动端(Android)预测
## 3. 移动端(Android)Demo
PaddleX提供了一个基于Mobilenetv2模型和PaddleX Android SDK的安卓demo,可供用户体验,该demo位于`/PaddleX/deploy/lite/android/demo`,可直接导入Android Studio后运行,并支持用户替换其他PaddleX导出的检测或分割模型进行预测。
### 3.1 要求
......@@ -56,21 +67,25 @@ python /PaddleX/deploy/lite/export_lite.py --model_dir /path/to/inference_model
### 3.2 分类Demo
#### 3.2.1 导入工程
#### 3.2.1 导入工程并运行
- 打开Android Studio,在"Welcome to Android Studio"窗口点击"Open an existing Android Studio project",在弹出的路径选择窗口中进入`/PaddleX/deploy/lite/android/demo`目录,然后点击右下角的"Open"按钮,导入工程;
- 通过USB连接Android手机或开发板;
- 载入工程后,点击菜单栏的Run->Run 'App'按钮,在弹出的"Select Deployment Target"窗口选择已经连接的Android设备,然后点击"OK"按钮;
- 运行成功后,Android设备将加载一个名为PaddleX Demo的App,默认会加载一个测试图片,同时还支持拍照和从图库选择照片进行预测;
**注意**:在工程构建的过程中会远程下载Mobilenetv2模型、yml配置文件、测试的图片,以及PaddleX Android SDK。
#### 3.2.2 自定义模型
### 3.3 部署自定义模型
首先根据step1~step2描述,准备好Lite模型(.nb文件)和yml配置文件(注意:导出Lite模型时需指定--place=arm),然后在Android Studio的project视图中:
该demo还支持用户自定义模型来进行预测,可帮助用户快速验证自己训练好的模型,首先我们已经根据step1~step2描述,准备好了Lite模型(.nb文件)和yml配置文件(注意:导出Lite模型时需指定--place=arm),然后在Android Studio的project视图中:
- 将paddlex.nb文件拷贝到`/src/main/assets/model/`目录下。
- 将model.yml文件拷贝到`/src/main/assets/config/`目录下。
- 根据需要,修改文件`/src/main/res/values/strings.xml`中的`MODEL_PATH_DEFAULT``YAML_PATH_DEFAULT`指定的路径。
- 将.nb文件拷贝到`/src/main/assets/model/`目录下, 根据.nb文件的名字,修改文件`/src/main/res/values/strings.xml`中的`MODEL_PATH_DEFAULT`
- 将.yml文件拷贝到`/src/main/assets/config/`目录下,根据.yml文件的名字,修改文件`/src/main/res/values/strings.xml`中的`YAML_PATH_DEFAULT`
- 可根据需要替换测试图片,将图片拷贝到`/src/main/assets/images/`目录下,根据图片文件的名字,修改文件`/src/main/res/values/strings.xml`中的`IMAGE_PATH_DEFAULT`
- 点击菜单栏的Run->Run 'App'按钮,在弹出的"Select Deployment Target"窗口选择已经连接的Android设备,然后点击"OK"按钮;
### 3.3 PaddleX Android SDK介绍
## 4. PaddleX Android SDK和二次开发
PaddleX Android SDK是PaddleX基于Paddle-Lite开发的安卓端AI推理工具,以PaddleX导出的Yaml配置文件为接口,针对不同的模型实现图片的预处理,后处理,并进行可视化,开发者可集成到业务中。
该SDK自底向上主要包括:Paddle-Lite推理引擎层,Paddle-Lite接口层以及PaddleX业务层。
......@@ -81,7 +96,7 @@ PaddleX Android SDK是PaddleX基于Paddle-Lite开发的安卓端AI推理工具
![架构](../images/paddlex_android_sdk_framework.jpg)
#### 3.3.1 SDK安装
### 4.1 SDK安装
首先下载并解压[PaddleX Android SDK](https://bj.bcebos.com/paddlex/deploy/lite/paddlex_lite_11cbd50e.tar.gz),得到paddlex.aar文件,将拷贝到android工程目录app/libs/下面,然后为app的build.gradle添加依赖:
......@@ -92,7 +107,7 @@ dependencies {
```
#### 3.3.2 SDK使用用例
### 4.2 SDK使用用例
```
import com.baidu.paddlex.Predictor;
import com.baidu.paddlex.config.ConfigParser;
......@@ -132,7 +147,7 @@ if (configParser.getModelType().equalsIgnoreCase("segmenter")) {
ClsResult clsResult = predictor.getClsResult();
}
```
#### 3.3.3 Result成员变量
### 4.3 Result成员变量
**注意**:Result所有的成员变量以java bean的方式获取。
......@@ -179,12 +194,12 @@ com.baidu.paddlex.postprocess.SegResult
com.baidu.paddlex.postprocess.SegResult.Mask
```
##### Fields
> * **scoreData** (float[]): 模型预测在各个类别的置信度,长度为numClass$\times\$H$\times\$W
> * **scoreData** (float[]): 模型预测在各个类别的置信度,长度为: 1 * numClass * H * W
> * **scoreShape** (long[4]): scoreData的shape信息,[1,numClass,H,W]
> * **labelData** (long[]): 模型预测置信度最高的label,长度为`H$\times\$W$\times\$1
> * **labelData** (long[]): 模型预测置信度最高的label,长度为: 1 * H * W * 1
> * **labelShape** (long[4]): labelData的shape信息,[1,H,W,1]
#### 3.3.4 SDK二次开发
### 4.4 SDK二次开发
- 打开Android Studio新建项目(或加载已有项目)。点击菜单File->New->Import Module,导入工程`/PaddleX/deploy/lite/android/sdk`, Project视图会新增名为sdk的module
- 在app的build.grade里面添加依赖:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册