@@ -5,21 +5,22 @@ PaddleX的安卓端部署由PaddleLite实现,部署的流程如下,首先将
55> PaddleX --> Inference Model --> PaddleLite Opt --> PaddleLite Inference
66
77文章简介:
8- - step1: 介绍如何将PaddleX导出为inference model
9- - step2: 使用PaddleLite的OPT模块对模型进行优化
10- - step3: 介绍了基于MobileNetv2的安卓demo,以及PaddleX Android SDK
8+ - 1.介绍如何将PaddleX导出为inference model
9+ - 2.使用PaddleLite的OPT模块对模型进行优化
10+ - 3.介绍基于PaddleX Android SDK的安卓demo,以及如何快速部署训练好的模型
11+ - 4.介绍PaddleX Android SDK和二次开发
1112
12- ## step 1. 将PaddleX模型导出为inference模型
13+ ## 1. 将PaddleX模型导出为inference模型
1314
1415参考[ 导出inference模型] ( ../export_model.html ) 将模型导出为inference格式模型。
1516** 注意:由于PaddleX代码的持续更新,版本低于1.0.0的模型暂时无法直接用于预测部署,参考[ 模型版本升级] ( ../upgrade_version.md ) 对模型版本进行升级。**
1617
17- ## step 2. 将inference模型优化为PaddleLite模型
18+ ## 2. 将inference模型优化为PaddleLite模型
1819
1920目前提供了两种方法将Paddle模型优化为PaddleLite模型:
2021
2122- 1.python脚本优化模型,简单上手,目前支持最新的PaddleLite 2.6.1版本
22- - 2.bin文件优化模型(linux),支持develop版本(Commit Id:11cbd50e),适用于部署` DeepLab模型 ` 的用户。
23+ - 2.bin文件优化模型(linux),支持develop版本(Commit Id:11cbd50e),适用于部署` DeepLab模型 ` 和 ` Unet模型 ` 的用户。
2324
2425### 2.1 使用python脚本优化模型
2526
@@ -45,9 +46,19 @@ python /PaddleX/deploy/lite/export_lite.py --model_dir /path/to/inference_model
4546 --optimize_out_type=naive_buffer \
4647 --optimize_out=model_output_name
4748```
49+
50+ | 参数 | 说明 |
51+ | ---- | ---- |
52+ | --model_file | 导出inference模型中包含的网络结构文件:` __model__ ` 所在的路径|
53+ | --param_file | 导出inference模型中包含的参数文件:` __params__ ` 所在的路径|
54+ | --valid_targets | 指定模型可执行的backend,这里请指定为` arm ` |
55+ | --optimize_out_type | 输出模型类型,目前支持两种类型:protobuf和naive_buffer,其中naive_buffer是一种更轻量级的序列化/反序列化,这里请指定为` naive_buffer ` |
56+
4857详细的使用方法和参数含义请参考: [ 使用opt转化模型] ( https://paddle-lite.readthedocs.io/zh/latest/user_guides/opt/opt_bin.html )
4958
50- ## step 3. 移动端(Android)预测
59+ ## 3. 移动端(Android)Demo
60+
61+ PaddleX提供了一个基于Mobilenetv2模型和PaddleX Android SDK的安卓demo,可供用户体验,该demo位于` /PaddleX/deploy/lite/android/demo ` ,可直接导入Android Studio后运行,并支持用户替换其他PaddleX导出的检测或分割模型进行预测。
5162
5263### 3.1 要求
5364
@@ -56,21 +67,25 @@ python /PaddleX/deploy/lite/export_lite.py --model_dir /path/to/inference_model
5667
5768### 3.2 分类Demo
5869
59- #### 3.2.1 导入工程
70+ #### 3.2.1 导入工程并运行
6071
6172- 打开Android Studio,在"Welcome to Android Studio"窗口点击"Open an existing Android Studio project",在弹出的路径选择窗口中进入` /PaddleX/deploy/lite/android/demo ` 目录,然后点击右下角的"Open"按钮,导入工程;
6273- 通过USB连接Android手机或开发板;
6374- 载入工程后,点击菜单栏的Run->Run 'App'按钮,在弹出的"Select Deployment Target"窗口选择已经连接的Android设备,然后点击"OK"按钮;
75+ - 运行成功后,Android设备将加载一个名为PaddleX Demo的App,默认会加载一个测试图片,同时还支持拍照和从图库选择照片进行预测;
76+
77+ ** 注意** :在工程构建的过程中会远程下载Mobilenetv2模型、yml配置文件、测试的图片,以及PaddleX Android SDK。
6478
65- #### 3.2.2 自定义模型
79+ ### 3.3 部署自定义模型
6680
67- 首先根据step1 ~ step2描述,准备好Lite模型 (.nb文件)和yml配置文件(注意:导出Lite模型时需指定--place=arm),然后在Android Studio的project视图中:
81+ 该demo还支持用户自定义模型来进行预测,可帮助用户快速验证自己训练好的模型,首先我们已经根据step1 ~ step2描述,准备好了Lite模型 (.nb文件)和yml配置文件(注意:导出Lite模型时需指定--place=arm),然后在Android Studio的project视图中:
6882
69- - 将paddlex.nb文件拷贝到` /src/main/assets/model/ ` 目录下。
70- - 将model.yml文件拷贝到` /src/main/assets/config/ ` 目录下。
71- - 根据需要,修改文件` /src/main/res/values/strings.xml ` 中的` MODEL_PATH_DEFAULT ` 和` YAML_PATH_DEFAULT ` 指定的路径。
83+ - 将.nb文件拷贝到` /src/main/assets/model/ ` 目录下, 根据.nb文件的名字,修改文件` /src/main/res/values/strings.xml ` 中的` MODEL_PATH_DEFAULT ` ;
84+ - 将.yml文件拷贝到` /src/main/assets/config/ ` 目录下,根据.yml文件的名字,修改文件` /src/main/res/values/strings.xml ` 中的` YAML_PATH_DEFAULT ` ;
85+ - 可根据需要替换测试图片,将图片拷贝到` /src/main/assets/images/ ` 目录下,根据图片文件的名字,修改文件` /src/main/res/values/strings.xml ` 中的` IMAGE_PATH_DEFAULT ` ;
86+ - 点击菜单栏的Run->Run 'App'按钮,在弹出的"Select Deployment Target"窗口选择已经连接的Android设备,然后点击"OK"按钮;
7287
73- ### 3.3 PaddleX Android SDK介绍
88+ ## 4. PaddleX Android SDK和二次开发
7489
7590PaddleX Android SDK是PaddleX基于Paddle-Lite开发的安卓端AI推理工具,以PaddleX导出的Yaml配置文件为接口,针对不同的模型实现图片的预处理,后处理,并进行可视化,开发者可集成到业务中。
7691该SDK自底向上主要包括:Paddle-Lite推理引擎层,Paddle-Lite接口层以及PaddleX业务层。
@@ -81,7 +96,7 @@ PaddleX Android SDK是PaddleX基于Paddle-Lite开发的安卓端AI推理工具
8196
8297![ 架构] ( ../images/paddlex_android_sdk_framework.jpg )
8398
84- #### 3.3 .1 SDK安装
99+ ### 4 .1 SDK安装
85100
86101首先下载并解压[ PaddleX Android SDK] ( https://bj.bcebos.com/paddlex/deploy/lite/paddlex_lite_11cbd50e.tar.gz ) ,得到paddlex.aar文件,将拷贝到android工程目录app/libs/下面,然后为app的build.gradle添加依赖:
87102
@@ -92,7 +107,7 @@ dependencies {
92107
93108```
94109
95- #### 3.3 .2 SDK使用用例
110+ ### 4 .2 SDK使用用例
96111```
97112import com.baidu.paddlex.Predictor;
98113import com.baidu.paddlex.config.ConfigParser;
@@ -132,7 +147,7 @@ if (configParser.getModelType().equalsIgnoreCase("segmenter")) {
132147 ClsResult clsResult = predictor.getClsResult();
133148}
134149```
135- #### 3.3 .3 Result成员变量
150+ ### 4 .3 Result成员变量
136151
137152** 注意** :Result所有的成员变量以java bean的方式获取。
138153
@@ -179,12 +194,12 @@ com.baidu.paddlex.postprocess.SegResult
179194com.baidu.paddlex.postprocess. SegResult . Mask
180195```
181196##### Fields
182- > * ** scoreData** (float[ ] ): 模型预测在各个类别的置信度,长度为numClass$\times \$ H$\times \$ W
197+ > * ** scoreData** (float[ ] ): 模型预测在各个类别的置信度,长度为: 1 * numClass * H * W
183198> * ** scoreShape** (long[ 4] ): scoreData的shape信息,[ 1,numClass,H,W]
184- > * ** labelData** (long[ ] ): 模型预测置信度最高的label,长度为`H$\times \$ W$\times \$ 1
199+ > * ** labelData** (long[ ] ): 模型预测置信度最高的label,长度为: 1 * H * W * 1
185200> * ** labelShape** (long[ 4] ): labelData的shape信息,[ 1,H,W,1]
186201
187- #### 3.3 .4 SDK二次开发
202+ ### 4 .4 SDK二次开发
188203
189204- 打开Android Studio新建项目(或加载已有项目)。点击菜单File->New->Import Module,导入工程` /PaddleX/deploy/lite/android/sdk ` , Project视图会新增名为sdk的module
190205- 在app的build.grade里面添加依赖:
0 commit comments