فهرست منبع

Merge pull request #85 from FlyingQianMM/develop_qh

change deploy docs
Jason 5 سال پیش
والد
کامیت
a02739b1bd

+ 48 - 0
deploy/lite/export_lite.py

@@ -0,0 +1,48 @@
+#copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve.
+#
+#Licensed under the Apache License, Version 2.0 (the "License");
+#you may not use this file except in compliance with the License.
+#You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing, software
+#distributed under the License is distributed on an "AS IS" BASIS,
+#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#See the License for the specific language governing permissions and
+#limitations under the License.
+
+import paddlelite.lite as lite
+import os
+import argparse
+
+
+def export_lite():
+    opt = lite.Opt()
+    model_file = os.path.join(FLAGS.model_path, '__model__')
+    params_file = os.path.join(FLAGS.model_path, '__params__')
+    opt.run_optimize("", model_file, params_file, FLAGS.place, FLAGS.save_dir)
+
+
+if __name__ == '__main__':
+    parser = argparse.ArgumentParser(description=__doc__)
+    parser.add_argument(
+        "--model_path",
+        type=str,
+        default="",
+        help="model path.",
+        required=True)
+    parser.add_argument(
+        "--place",
+        type=str,
+        default="arm",
+        help="preprocess config path.",
+        required=True)
+    parser.add_argument(
+        "--save_dir",
+        type=str,
+        default="paddlex.onnx",
+        help="Directory for storing the output visualization files.",
+        required=True)
+    FLAGS = parser.parse_args()
+    export_lite()

+ 23 - 0
docs/tutorials/deploy/deploy_lite.md

@@ -0,0 +1,23 @@
+# 移动端部署
+
+step 1: 安装PaddleLite
+
+```
+pip install paddlelite
+```
+
+step 2: 将PaddleX模型导出为inference模型
+
+参考[导出inference模型](deploy_server/deploy_python.html#inference)将模型导出为inference格式模型。
+
+step 3: 将inference模型转换成PaddleLite模型
+
+```
+python /path/to/PaddleX/deploy/lite/export_lite.py --model_path /path/to/inference_model --save_dir /path/to/onnx_model
+```
+
+`--model_path`用于指定inference模型的路径,`--save_dir`用于指定Lite模型的保存路径。
+
+step 4: 预测
+
+Lite模型预测正在集成中,即将开源...

+ 43 - 11
docs/tutorials/deploy/depoly_openvino.md → docs/tutorials/deploy/deploy_openvino.md

@@ -1,16 +1,43 @@
-# OpenVINO 分类demo编译
-
-## 说明
+# OpenVINO部署
+
+## 方案简介
+OpenVINO部署方案位于目录`deploy/openvino/`下,且独立于PaddleX其他模块,该方案目前支持在 **Linux** 完成编译和部署运行。
+
+PaddleX到OpenVINO的部署流程如下:
+
+>> PaddleX --> ONNX --> OpenVINO IR --> OpenVINO Inference Engine
+
+|目前支持OpenVINO部署的PaddleX模型|
+|-----|
+|ResNet18|
+|ResNet34|
+|ResNet50|
+|ResNet101|
+|ResNet50_vd|
+|ResNet101_vd|
+|ResNet50_vd_ssld|
+|ResNet101_vd_ssld
+|DarkNet53|
+|MobileNetV1|
+|MobileNetV2|
+|DenseNet121|
+|DenseNet161|
+|DenseNet201|
+
+## 部署流程
+### 说明
 本文档在 `Ubuntu`使用`GCC 4.8.5` 进行了验证,如果需要使用更多G++版本和平台的OpenVino编译,请参考: [OpenVINO](https://github.com/openvinotoolkit/openvino/blob/2020/build-instruction.md)。
 
-## 验证环境
+### 验证环境
 * Ubuntu* 16.04 (64-bit) with GCC* 4.8.5
 * CMake 3.12
 * Python 2.7 or higher
 
 请确保系统已经安装好上述基本软件,**下面所有示例以工作目录 `/root/projects/`演示**。
 
- `git clone https://github.com/PaddlePaddle/PaddleX.git`
+```
+ git clone https://github.com/PaddlePaddle/PaddleX.git
+```
 
 **说明**:其中`C++`预测代码在`/root/projects/PaddleX/deploy/openvino` 目录,该目录不依赖任何`PaddleX`下其他目录。
 
@@ -51,7 +78,7 @@ cmake .. \
     -DOPENCV_DIR=${OPENCV_DIR} \
     -DGFLAGS_DIR=${GFLAGS_DIR} \
     -DOPENVINO_DIR=${OPENVINO_DIR} \
-    -DNGRAPH_LIB=${NGRAPH_LIB} 
+    -DNGRAPH_LIB=${NGRAPH_LIB}
 make
 ```
 
@@ -62,10 +89,16 @@ make
 
 ### Step3: 模型转换
 
-将[]()生成的onnx文件转换为OpencVINO支持的格式,请参考:[Model Optimizer文档](https://docs.openvinotoolkit.org/latest/_docs_MO_DG_Deep_Learning_Model_Optimizer_DevGuide.html)
+将PaddleX模型转换成ONNX模型
+
+```
+paddlex --export_onnx --model_dir=/path/to/xiaoduxiong_epoch_12 --save_dir=/path/to/onnx_model
+```
+
+将生成的onnx模型转换为OpencVINO支持的格式,请参考:[Model Optimizer文档](https://docs.openvinotoolkit.org/latest/_docs_MO_DG_Deep_Learning_Model_Optimizer_DevGuide.html)
 
 ### Step4: 预测
-编译成功后,预测demo的可执行程序分别为`build/classifer`,其主要命令参数说明如下:
+编译成功后,预测demo的可执行程序分别为`build/detector`,其主要命令参数说明如下:
 
 |  参数   | 说明  |
 |  ----  | ----  |
@@ -75,9 +108,9 @@ make
 | --device  | 运行的平台, 默认值为"CPU" |
 
 
-## 样例
+### 样例
 
-可使用[小度熊识别模型](deploy.md#导出inference模型)中导出的`inference_model`和测试图片进行预测。
+可使用[小度熊识别模型](deploy_server/deploy_python.html#inference)中导出的`inference_model`和测试图片进行预测。
 
 `样例一`:
 
@@ -100,4 +133,3 @@ make
 ```shell
 ./build/classifier --model_dir=/path/to/models/inference_model --image_list=/root/projects/images_list.txt -
 ```
-

+ 5 - 2
docs/tutorials/deploy/deploy_cpp_linux.md → docs/tutorials/deploy/deploy_server/deploy_cpp/deploy_cpp_linux.md

@@ -1,4 +1,4 @@
-# Linux平台编译指南
+# Linux平台部署
 
 ## 说明
 本文档在 `Linux`平台使用`GCC 4.8.5` 和 `GCC 4.9.4`测试过,如果需要使用更高G++版本编译使用,则需要重新编译Paddle预测库,请参考: [从源码编译Paddle预测库](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html#id12)。
@@ -103,6 +103,9 @@ make
  ```
 
 ### Step5: 预测及可视化
+
+参考[导出inference模型](../deploy_python.html#inference)将模型导出为inference格式模型。
+
 编译成功后,预测demo的可执行程序分别为`build/demo/detector`,`build/demo/classifer`,`build/demo/segmenter`,用户可根据自己的模型类型选择,其主要命令参数说明如下:
 
 |  参数   | 说明  |
@@ -117,7 +120,7 @@ make
 
 ## 样例
 
-可使用[小度熊识别模型](deploy.md#导出inference模型)中导出的`inference_model`和测试图片进行预测。
+可使用[小度熊识别模型](../deploy_python.html#inference)中导出的`inference_model`和测试图片进行预测。
 
 `样例一`:
 

+ 13 - 11
docs/tutorials/deploy/deploy_cpp_win_vs2019.md → docs/tutorials/deploy/deploy_server/deploy_cpp/deploy_cpp_win_vs2019.md

@@ -1,4 +1,4 @@
-# Visual Studio 2019 Community CMake 编译指南
+# Windows平台部署
 
 ## 说明
 Windows 平台下,我们使用`Visual Studio 2019 Community` 进行了测试。微软从`Visual Studio 2017`开始即支持直接管理`CMake`跨平台编译项目,但是直到`2019`才提供了稳定和完全的支持,所以如果你想使用CMake管理项目编译构建,我们推荐你使用`Visual Studio 2019`环境下构建。
@@ -62,19 +62,19 @@ PaddlePaddle C++ 预测库针对不同的`CPU`,`CUDA`,以及是否支持Tens
 
 1. 打开Visual Studio 2019 Community,点击`继续但无需代码`
 
-![step2](images/vs2019_step1.png)
+![step2](../../images/vs2019_step1.png)
 
 2. 点击: `文件`->`打开`->`CMake`
 
-![step2.1](images/vs2019_step2.png)
+![step2.1](../../images/vs2019_step2.png)
 
 选择项目代码所在路径,并打开`CMakeList.txt`:
 
-![step2.2](images/vs2019_step3.png)
+![step2.2](../../images/vs2019_step3.png)
 
 3. 点击:`项目`->`PADDLEX_INFERENCE的CMake设置`
 
-![step3](images/vs2019_step4.png)
+![step3](../../images/vs2019_step4.png)
 
 4. 点击`浏览`,分别设置编译选项指定`CUDA`、`OpenCV`、`Paddle预测库`的路径
 
@@ -88,17 +88,19 @@ PaddlePaddle C++ 预测库针对不同的`CPU`,`CUDA`,以及是否支持Tens
 
 **注意:** 1. 使用`CPU`版预测库,请把`WITH_GPU`的`值`去掉勾 2. 如果使用的是`openblas`版本,请把`WITH_MKL`的`值`去掉勾
 
-![step4](images/vs2019_step5.png)
+![step4](../../images/vs2019_step5.png)
 
 **设置完成后**, 点击上图中`保存并生成CMake缓存以加载变量`。
 
 5. 点击`生成`->`全部生成`
 
-![step6](images/vs2019_step6.png)
+![step6](../../images/vs2019_step6.png)
 
 
 ### Step5: 预测及可视化
 
+参考[导出inference模型](../deploy_python.html#inference)将模型导出为inference格式模型。
+
 上述`Visual Studio 2019`编译产出的可执行文件在`out\build\x64-Release`目录下,打开`cmd`,并切换到该目录:
 
 ```
@@ -106,7 +108,7 @@ d:
 cd D:\projects\PaddleX\deploy\cpp\out\build\x64-Release
 ```
 
-编译成功后,预测demo的入口程序为`demo\detector`,`demo\classifer`,`demo\segmenter`,用户可根据自己的模型类型选择,其主要命令参数说明如下:
+编译成功后,预测demo的入口程序为`paddlex_inference\detector.exe`,`paddlex_inference\classifer.exe`,`paddlex_inference\segmenter.exe`,用户可根据自己的模型类型选择,其主要命令参数说明如下:
 
 |  参数   | 说明  |
 |  ----  | ----  |
@@ -120,14 +122,14 @@ cd D:\projects\PaddleX\deploy\cpp\out\build\x64-Release
 
 ## 样例
 
-可使用[小度熊识别模型](deploy.md#导出inference模型)中导出的`inference_model`和测试图片进行预测。
+可使用[小度熊识别模型](../deploy_python.html#inference)中导出的`inference_model`和测试图片进行预测。
 
 `样例一`:
 
 不使用`GPU`测试图片  `\\path\\to\\xiaoduxiong.jpeg`  
 
 ```shell
-.\detector --model_dir=\\path\\to\\inference_model --image=D:\\images\\xiaoduxiong.jpeg --save_dir=output
+.\\paddlex_inference\\detector.exe --model_dir=\\path\\to\\inference_model --image=D:\\images\\xiaoduxiong.jpeg --save_dir=output
 
 ```
 图片文件`可视化预测结果`会保存在`save_dir`参数设置的目录下。
@@ -143,6 +145,6 @@ cd D:\projects\PaddleX\deploy\cpp\out\build\x64-Release
 \\path\\to\\images\\xiaoduxiongn.jpeg
 ```
 ```shell
-.\detector --model_dir=\\path\\to\\inference_model --image_list=\\path\\to\\images_list.txt --use_gpu=1 --save_dir=output
+.\\paddlex_inference\\detector.exe --model_dir=\\path\\to\\inference_model --image_list=\\path\\to\\images_list.txt --use_gpu=1 --save_dir=output
 ```
 图片文件`可视化预测结果`会保存在`save_dir`参数设置的目录下。

+ 4 - 4
docs/tutorials/deploy/encryption.md → docs/tutorials/deploy/deploy_server/deploy_cpp/encryption.md

@@ -1,4 +1,4 @@
-# Paddle模型加密方案
+# 模型加密
 
 飞桨团队推出模型加密方案,使用业内主流的AES加密技术对最终模型进行加密。飞桨用户可以通过PaddleX导出模型后,使用该方案对模型进行加密,预测时使用解密SDK进行模型解密并完成推理,大大提升AI应用安全性和开发效率。
 
@@ -29,8 +29,8 @@ paddlex-encryption
 ./paddlex-encryption/tool/paddlex_encrypt_tool -model_dir /path/to/paddlex_inference_model -save_dir /path/to/paddlex_encrypted_model
 ```
 
-`-model_dir`用于指定inference模型路径,可使用[导出小度熊识别模型](deploy.md#导出inference模型)中导出的`inference_model`。加密完成后,加密过的模型会保存至指定的`-save_dir`下,包含`__model__.encrypted`、`__params__.encrypted`和`model.yml`三个文件,同时生成密钥信息,命令输出如下图所示,密钥为`kLAl1qOs5uRbFt0/RrIDTZW2+tOf5bzvUIaHGF8lJ1c=`
-![](images/encryt.png)
+`-model_dir`用于指定inference模型路径(参考[导出inference模型](../deploy_python.html#inference)将模型导出为inference格式模型),可使用[导出小度熊识别模型](../deploy_python.html#inference)中导出的`inference_model`。加密完成后,加密过的模型会保存至指定的`-save_dir`下,包含`__model__.encrypted`、`__params__.encrypted`和`model.yml`三个文件,同时生成密钥信息,命令输出如下图所示,密钥为`kLAl1qOs5uRbFt0/RrIDTZW2+tOf5bzvUIaHGF8lJ1c=`
+![](../../images/encrypt.png)
 
 ## 2. PaddleX C++加密部署
 
@@ -50,7 +50,7 @@ paddlex-encryption
 
 ## 样例
 
-可使用[导出小度熊识别模型](deploy.md#导出inference模型)中的测试图片进行预测。
+可使用[导出小度熊识别模型](../deploy_python.html#inference)中的测试图片进行预测。
 
 `样例一`:
 

+ 12 - 0
docs/tutorials/deploy/deploy_server/deploy_cpp/index.rst

@@ -0,0 +1,12 @@
+C++部署
+==============
+
+
+C++部署方案位于目录PaddleX/deploy/cpp/下,且独立于PaddleX其他模块。该方案支持在 Windows 和 Linux 完成编译、二次开发集成和部署运行,支持在Linux上完成加密部署。
+
+.. toctree::
+   :maxdepth: 1
+
+   deploy_cpp_win_vs2019.md
+   deploy_cpp_linux.md
+   encryption.md

+ 10 - 56
docs/tutorials/deploy/deploy.md → docs/tutorials/deploy/deploy_server/deploy_python.md

@@ -1,10 +1,7 @@
-# 模型预测部署
+# Python部署
+PaddleX已经集成了基于Python的高性能预测接口,在安装PaddleX后,可参照如下代码示例,进行预测。相关的接口文档可参考[paddlex.deploy](../../../apis/deploy.md)
 
-本文档指引用户如何采用更高性能地方式来部署使用PaddleX训练的模型。使用本文档模型部署方式,会在模型运算过程中,对模型计算图进行优化,同时减少内存操作,相对比普通的paddlepaddle模型加载和预测方式,预测速度平均可提升1倍,具体各模型性能对比见[预测性能对比](#预测性能对比)
-
-## 服务端部署
-
-### 导出inference模型
+## 导出inference模型
 
 在服务端部署的模型需要首先将模型导出为inference格式模型,导出的模型将包括`__model__`、`__params__`和`model.yml`三个文名,分别为模型的网络结构,模型权重和模型的配置文件(包括数据预处理参数等等)。在安装完PaddleX后,在命令行终端使用如下命令导出模型到当前目录`inferece_model`下。
 > 可直接下载小度熊分拣模型测试本文档的流程[xiaoduxiong_epoch_12.tar.gz](https://bj.bcebos.com/paddlex/models/xiaoduxiong_epoch_12.tar.gz)
@@ -22,59 +19,17 @@ paddlex --export_inference --model_dir=./xiaoduxiong_epoch_12 --save_dir=./infer
 paddlex --export_inference --model_dir=./xiaoduxiong_epoch_12 --save_dir=./inference_model --fixed_input_shape=[640,960]
 ```
 
-### Python部署
-PaddleX已经集成了基于Python的高性能预测接口,在安装PaddleX后,可参照如下代码示例,进行预测。相关的接口文档可参考[paddlex.deploy](apis/deploy.md)
+## 预测部署
 > 点击下载测试图片 [xiaoduxiong_test_image.tar.gz](https://bj.bcebos.com/paddlex/datasets/xiaoduxiong_test_image.tar.gz)
 
 ```
 import paddlex as pdx
-predictor = pdx.deploy.create_predictor('./inference_model')
+predictor = pdx.deploy.Predictor('./inference_model')
 result = predictor.predict(image='xiaoduxiong_test_image/JPEGImages/WeChatIMG110.jpeg')
 ```
 
-### C++部署
-
-C++部署方案位于目录`deploy/cpp/`下,且独立于PaddleX其他模块。该方案支持在 Windows 和 Linux 完成编译、二次开发集成和部署运行。具体使用方法和编译:
-
-- Linux平台:[linux](deploy_cpp_linux.md)
-- window平台:[windows](deploy_cpp_win_vs2019.md)
-
-### OpenVINO部署demo
-
-OpenVINO部署demo位于目录`deploy/openvino/`下,且独立于PaddleX其他模块,该demo目前支持在 Linux 完成编译和部署运行。目前PaddleX到OpenVINO的部署流程如下:
-
-graph LR
-   PaddleX --> ONNX --> OpenVINO IR --> OpenVINO Inference Engine
-#### step1
-
-PaddleX输出ONNX模型方法如下:
-
-```
-paddlex --export_onnx --model_dir=./xiaoduxiong_epoch_12 --save_dir=./onnx_model
-```
-
-|目前支持的模型|
-|-----|
-|ResNet18|
-|ResNet34|
-|ResNet50|
-|ResNet101|
-|ResNet50_vd|
-|ResNet101_vd|
-|ResNet50_vd_ssld|
-|ResNet101_vd_ssld
-|DarkNet53|
-|MobileNetV1|
-|MobileNetV2|
-|DenseNet121|
-|DenseNet161|
-|DenseNet201|
-
-得到ONNX模型后,OpenVINO的部署参考:[OpenVINO部署](deploy_openvino.md)
-
-### 预测性能对比
-
-#### 测试环境
+## 预测性能对比
+### 测试环境
 
 - CUDA 9.0
 - CUDNN 7.5
@@ -84,6 +39,9 @@ paddlex --export_onnx --model_dir=./xiaoduxiong_epoch_12 --save_dir=./onnx_model
 - Executor 指采用paddlepaddle普通的python预测方式
 - Batch Size均为1,耗时单位为ms/image,只计算模型运行时间,不包括数据的预处理和后处理
 
+### 性能对比
+
+
 | 模型 | AnalysisPredictor耗时 | Executor耗时 | 输入图像大小 |
 | :---- | :--------------------- | :------------ | :------------ |
 | resnet50 | 4.84 | 7.57 | 224*224 |
@@ -95,7 +53,3 @@ paddlex --export_onnx --model_dir=./xiaoduxiong_epoch_12 --save_dir=./onnx_model
 | faster_rcnn_r50_1x | 326.11 | 347.22 | 800*1067 |
 | mask_rcnn_r50_fpn_1x | 67.49 | 91.02 | 800*1088 |
 | mask_rcnn_r50_1x | 326.11 | 350.94 | 800*1067 |
-
-## 移动端部署
-
-> Lite模型导出正在集成中,即将开源...

+ 9 - 0
docs/tutorials/deploy/deploy_server/index.rst

@@ -0,0 +1,9 @@
+服务端部署
+==============
+
+.. toctree::
+   :maxdepth: 2
+
+   deploy_python.md
+   deploy_cpp/index.rst
+   encryption.md

BIN
docs/tutorials/deploy/images/vs2019_step4.png


+ 5 - 2
docs/tutorials/deploy/index.rst

@@ -1,8 +1,11 @@
 多端部署
 ==============
 
+本文档指引用户如何采用更高性能地方式来部署使用PaddleX训练的模型。使用本文档模型部署方式,会在模型运算过程中,对模型计算图进行优化,同时减少内存操作,相对比普通的paddlepaddle模型加载和预测方式,预测速度平均可提升1倍,具体各模型性能对比见服务端Python部署的预测性能对比章节。
+
 .. toctree::
    :maxdepth: 2
-   :caption: 文档目录:
 
-   
+   deploy_server/index.rst
+   deploy_openvino.md
+   deploy_lite.md