提交 84d44a9d 编写于 作者: G gaotingquan 提交者: Tingquan Gao

docs: add the dircription about PaddleLite opt

上级 4fc82eef
......@@ -81,12 +81,13 @@ inference_lite_lib.android.armv8/
| `-- java Java 预测库demo
```
## 2 开始运行
## 2 模型准备
### 2.1 模型准备
PaddleClas 提供了转换并优化后的推理模型,可以直接参考下方 2.1.1 小节进行下载。如果需要使用其他模型,请参考后续 2.1.2 小节自行转换并优化模型。
#### 2.1.1 模型准备
#### 2.1.1 使用PaddleClas提供的推理模型
```shell
# 进入lite_ppshitu目录
......@@ -96,7 +97,97 @@ tar -xf ppshitu_lite_models_v1.0.tar
rm -f ppshitu_lite_models_v1.0.tar
```
#### 2.1.2将yaml文件转换成json文件
#### 2.1.2 使用其他模型
Paddle-Lite 提供了多种策略来自动优化原始的模型,其中包括量化、子图融合、混合调度、Kernel优选等方法,使用Paddle-Lite的`opt`工具可以自动对inference模型进行优化,目前支持两种优化方式,优化后的模型更轻量,模型运行速度更快。
**注意**:如果已经准备好了 `.nb` 结尾的模型文件,可以跳过此步骤。
##### 2.1.2.1 安装paddle_lite_opt工具
安装`paddle_lite_opt`工具有如下两种方法:
1. [**建议**]pip安装paddlelite并进行转换
```shell
pip install paddlelite==2.10rc
```
2. 源码编译Paddle-Lite生成`paddle_lite_opt`工具
模型优化需要Paddle-Lite的`opt`可执行文件,可以通过编译Paddle-Lite源码获得,编译步骤如下:
```shell
# 如果准备环境时已经clone了Paddle-Lite,则不用重新clone Paddle-Lite
git clone https://github.com/PaddlePaddle/Paddle-Lite.git
cd Paddle-Lite
git checkout develop
# 启动编译
./lite/tools/build.sh build_optimize_tool
```
编译完成后,`opt`文件位于`build.opt/lite/api/`下,可通过如下方式查看`opt`的运行选项和使用方式;
```shell
cd build.opt/lite/api/
./opt
```
`opt`的使用方式与参数与上面的`paddle_lite_opt`完全一致。
之后使用`paddle_lite_opt`工具可以进行inference模型的转换。`paddle_lite_opt`的部分参数如下:
|选项|说明|
|-|-|
|--model_file|待优化的PaddlePaddle模型(combined形式)的网络结构文件路径|
|--param_file|待优化的PaddlePaddle模型(combined形式)的权重文件路径|
|--optimize_out_type|输出模型类型,目前支持两种类型:protobuf和naive_buffer,其中naive_buffer是一种更轻量级的序列化/反序列化实现,默认为naive_buffer|
|--optimize_out|优化模型的输出路径|
|--valid_targets|指定模型可执行的backend,默认为arm。目前可支持x86、arm、opencl、npu、xpu,可以同时指定多个backend(以空格分隔),Model Optimize Tool将会自动选择最佳方式。如果需要支持华为NPU(Kirin 810/990 Soc搭载的达芬奇架构NPU),应当设置为npu, arm|
更详细的`paddle_lite_opt`工具使用说明请参考[使用opt转化模型文档](https://paddle-lite.readthedocs.io/zh/latest/user_guides/opt/opt_bin.html)
`--model_file`表示inference模型的model文件地址,`--param_file`表示inference模型的param文件地址;`optimize_out`用于指定输出文件的名称(不需要添加`.nb`的后缀)。直接在命令行中运行`paddle_lite_opt`,也可以查看所有参数及其说明。
##### 2.1.2.2 转换示例
下面介绍使用`paddle_lite_opt`完成主体检测模型和识别模型的预训练模型,转成inference模型,最终转换成Paddle-Lite的优化模型的过程。
1. 转换主体检测模型
```shell
# 当前目录为 $PaddleClas/deploy/lite_shitu
# $code_path需替换成相应的运行目录,可以根据需要,将$code_path设置成需要的目录
export $code_path=~
cd $code_path
git clone https://github.com/PaddlePaddle/PaddleDetection.git
# 进入PaddleDetection根目录
cd PaddleDetection
# 将预训练模型导出为inference模型
python tools/export_model.py -c configs/picodet/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml -o weights=https://paddledet.bj.bcebos.com/models/picodet_lcnet_x2_5_640_mainbody.pdparams --output_dir=inference
# 将inference模型转化为Paddle-Lite优化模型
paddle_lite_opt --model_file=inference/picodet_lcnet_x2_5_640_mainbody/model.pdmodel --param_file=inference/picodet_lcnet_x2_5_640_mainbody/model.pdiparams --optimize_out=inference/picodet_lcnet_x2_5_640_mainbody/mainbody_det
# 将转好的模型复制到lite_shitu目录下
cd $PaddleClas/deploy/lite_shitu
mkdir models
cp $code_path/PaddleDetection/inference/picodet_lcnet_x2_5_640_mainbody/mainbody_det.nb $PaddleClas/deploy/lite_shitu/models
```
2. 转换识别模型
请先参考 [识别模型转分类模型](../../docs/zh_CN/advanced_tutorials/gallery2fc.md) 完成识别模型到分类模型的转换。
在得到 inference 推理模型(后缀名为 `.pdmodel``.pdiparams`)以及 `label.txt` 后,再使用 PaddleLite opt 工具完成模型优化,命令如下:
```shell
# 转换为Paddle-Lite模型
paddle_lite_opt --model_file=inference/inference.pdmodel --param_file=inference/inference.pdiparams --optimize_out=inference/rec
# 将模型、label文件拷贝到lite_shitu下
cp inference/rec.nb deploy/lite_shitu/models/
cp inference/label.txt deploy/lite_shitu/models/
cd deploy/lite_shitu
```
**注意**`--optimize_out` 参数为优化后模型的保存路径,无需加后缀`.nb``--model_file` 参数为模型结构信息文件的路径,`--param_file` 参数为模型权重信息文件的路径,请注意文件名。
### 2.2 将yaml文件转换成json文件
```shell
# 如果测试单张图像
......@@ -109,7 +200,7 @@ python generate_json_config.py --det_model_path ppshitu_lite_models_v1.0/mainbod
```
### 2.2 与手机联调
### 2.3 与手机联调
首先需要进行一些准备工作。
1. 准备一台arm8的安卓手机,如果编译的预测库是armv7,则需要arm7的手机,并修改Makefile中`ARM_ABI=arm7`
......@@ -216,6 +307,3 @@ A1:如果已经走通了上述步骤,更换模型只需要替换 `.nb` 模
Q2:换一个图测试怎么做?
A2:替换 deploy 下的测试图像为你想要测试的图像,并重新生成json配置文件(或者直接修改图像路径),使用 ADB 再次 push 到手机上即可。
Q3:如果需要更换模型/预训练模型/底库数据集,需要怎么做:
A:请参考文档 [基于分类方法的 PP-Shitu 移动端部署方案说明](./gallery2fc.md)
# 识别模型转分类模型
PaddleClas 提供了 `gallery2fc.py` 工具,帮助大家将识别模型转为分类模型。
PaddleClas 提供了 `gallery2fc.py` 工具,帮助大家将识别模型转为分类模型。目前该工具仅支持转换量化后模型,因此建议使用 PaddleClas 提供的 `general_PPLCNet_x2_5_pretrained_v1.0_quant` 预训练模型,该模型为量化后的通用识别模型,backbone 为 PPLCNet_x2_5。
如需使用其他模型,关于量化的具体操作请参考文档 [模型量化](./model_prune_quantization.md)
## 一、模型转换说明
......@@ -8,7 +10,7 @@ PaddleClas 提供了 `gallery2fc.py` 工具,帮助大家将识别模型转为
#### 1. 底库数据集
首先需要准备好底库数据,下面以 PaddleClas 提供饮料数据集(drink_dataset_v1.0)为例进行说明,饮料数据集获取方法:
首先需要准备好底库数据,下面以 PaddleClas 提供饮料数据集(drink_dataset_v1.0)为例进行说明,饮料数据集获取方法:
```shell
cd PaddleClas/
......@@ -40,7 +42,7 @@ wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretra
* image_root: 底库数据集路径;
* data_file: 底库数据集列表文件路径;
### 1.3 转换特征提取模型
### 1.3 模型转换
在完成上述准备工作后,即可进行模型转换,命令如下所示:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册