浏览代码

Develop doc (#924)

* add encryption

* add encryption docs

* modify encryption docs

* modify older deploy docs

* modify older deploy docs
heliqi 4 年之前
父节点
当前提交
7b5df2cda9

+ 7 - 2
deploy/README.md

@@ -1,6 +1,11 @@
 # 模型部署
 
-本目录为PaddleX模型部署代码,编译和使用教程参考:
+我们已发布全新的cpp deploy部署模块,除了支持PaddleX静态图、动态图导出模型,还支持PaddleDetection、PaddleSeg、PaddleClas套件导出的模型进行部署。同时在新模块还支持TensorRT、Triton等第三方推理引擎,详情请看文档:
+
+- [全新cpp部署](../dygraph/deploy/cpp)
+
+
+本目录为PaddleX模型静态图版本部署代码,编译和使用教程参考:
 
 - [服务端部署](../docs/deploy/server/)
   - [Python部署](../docs/deploy/server/python.md)
@@ -15,4 +20,4 @@
     - [模型裁剪](../docs/deploy/paddlelite/slim/prune.md)
   - [Android平台](../docs/deploy/paddlelite/android.md)
 - [OpenVINO部署](../docs/deploy/openvino/introduction.md)
-- [树莓派部署](../docs/deploy/raspberry/Raspberry.md)
+- [树莓派部署](../docs/deploy/raspberry/Raspberry.md)

+ 9 - 2
dygraph/deploy/cpp/README.md

@@ -15,15 +15,22 @@
 
 ## 文档
 ### PaddleInference编译说明
-- [Linux编译指南](./docs/compile/paddle/linux.md)
-- [Windows编译指南](./docs/compile/paddle/windows.md)
+- [Linux编译(支持加密)指南](./docs/compile/paddle/linux.md)
+- [Windows编译(支持加密)指南](./docs/compile/paddle/windows.md)
 - [Jetson编译指南](./docs/compile/paddle/jetson.md)
 
 ### 模型部署说明
+- [PaddleX部署指南](./docs/models/paddlex.md)
 - [PaddleDetection部署指南](./docs/models/paddledetection.md)
 - [PaddleSeg部署指南](./docs/models/paddleseg.md)
 - [PaddleClas部署指南](./docs/models/paddleclas.md)
 
+### 模型预测示例
+- [单卡加载模型预测示例](./docs/demo/model_infer.md)
+- [多卡加载模型预测示例](./docs/demo/multi_gpu_model_infer.md)
+- [PaddleInference集成TensorRT加载模型预测示例](./docs/demo/tensorrt_infer.md)
+- [模型加密预测示例](./docs/demo/decrypt_infer.md)
+
 ### API说明
 
 - [部署相关API说明](./docs/apis/model.md)

+ 12 - 6
dygraph/deploy/cpp/docs/compile/paddle/linux.md

@@ -47,7 +47,9 @@ PaddlePaddle C++ 预测库针对是否使用GPU、是否支持TensorRT、以及
 | CUDA_LIB      | cuda相关lib文件所在的目录路径                                                        |
 | CUDNN_LIB     | cudnn相关lib文件所在的目录路径                                                       |
 | WITH_TENSORRT | ON或OFF,表示是否使用开启TensorRT                                                    |
-| TENSORRT_DIR  | TensorRT 的路径,如果开启TensorRT开关WITH_TENSORRT,需修改为您实际安装的TensorRT路径 |
+| TENSORRT_DIR  | TensorRT 的路径,如果开启TensorRT开关WITH_TENSORRT,需修改为您实际安装的TensorRT路径     |
+| WITH_ENCRYPTION      | ON或OFF,表示是否开启加密模块                             |
+| OPENSSL_DIR    | OPENSSL所在路径,解密所需。默认为`PaddleX/deploy/cpp/deps/penssl-1.1.0k`目录下        |
 
 ### Step 4. 编译
 修改完build.sh后执行编译, **[注意]**: 以下命令在`PaddleX/dygraph/deploy/cpp`目录下进行执行
@@ -57,25 +59,29 @@ sh script/build.sh
 ```
 #### 编译环境无法联网导致编译失败?
 
-> 编译过程,会调用script/bootstrap.sh联网下载opencv,以及yaml依赖包,如无法联网,用户按照下操作手动下载
+> 编译过程,会调用script/bootstrap.sh联网下载opencv、openssl,以及yaml依赖包,如无法联网,用户按照下操作手动下载
 >
 > 1. 根据系统版本,点击右侧链接下载不同版本的opencv依赖 [Ubuntu 16.04](https://bj.bcebos.com/paddleseg/deploy/opencv3.4.6gcc4.8ffmpeg.tar.gz2)/[Ubuntu 18.04](https://bj.bcebos.com/paddlex/deploy/opencv3.4.6gcc4.8ffmpeg_ubuntu_18.04.tar.gz2)
 > 2. 解压下载的opencv依赖(解压后目录名为opencv3.4.6gcc4.8ffmpeg),创建目录`PaddleX/dygraph/deploy/cpp/deps`,将解压后的目录拷贝至该创建的目录下
-> 3. [点击下载yaml依赖包](https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip),无需解压
+> 3. 点击[下载yaml依赖包](https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip),无需解压
 > 4. 修改`PaddleX/deploy/cpp/cmake/yaml.cmake`文件,将`URL https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip`中网址替换为第3步中下载的路径,如改为`URL /Users/Download/yaml-cpp.zip`
-> 5. 重新执行`sh script/build.sh`即可编译
+> 5. 如果**开启加密**,点击[下载openssl](https://bj.bcebos.com/paddlex/tools/openssl-1.1.0k.tar.gz),将解压后的目录拷贝至跟opencv同级目录,即`PaddleX/dygraph/deploy/cpp/deps`目录。
+> 6. 重新执行`sh script/build.sh`即可编译
 
 
 
 ### Step 5. 编译结果
 
-编译后会在`PaddleX/dygraph/deploy/cpp/build/demo`目录下生成`model_infer`、`multi_gpu_model_infer`和`batch_infer`等几个可执行二进制文件示例,分别用于在单卡/多卡/多batch上加载模型进行预测,示例使用参考如下文档
+编译后会在`PaddleX/dygraph/deploy/cpp/build/demo`目录下生成`model_infer`、`multi_gpu_model_infer`和`batch_infer`等几个可执行二进制文件示例,分别用于在单卡/多卡/多batch上加载模型进行预测,示例使用参考如下文档
 
 - [单卡加载模型预测示例](../../demo/model_infer.md)
 - [多卡加载模型预测示例](../../demo/multi_gpu_model_infer.md)
-- [PaddleInference集成TensorRT加载模型预测示例](../../demo/tensorrt_infer.md)
 
+如果编译时开启TensorRT, 会多成一个`tensorrt_infer`二进制文件示例。示例使用参考如下文档:
+- [PaddleInference集成TensorRT加载模型预测示例](../../demo/tensorrt_infer.md)
 
+如果编译时开启加密, 会多成一个`decrypt_infer`二进制文件示例。示例使用参考如下文档:
+- [模型加密预测示例](../../demo/decrypt_infer.md)
 
 ## 其它文档
 

+ 12 - 3
dygraph/deploy/cpp/docs/compile/paddle/windows.md

@@ -47,7 +47,7 @@ PaddlePaddle C++ 预测库针对是否使用GPU、是否支持TensorRT、以及
 └── \version.txt # 版本和编译信息
 ```
 
-### Step3: 安装配置OpenCV
+### Step3: 安装配置OpenCV和加密
 
 1. 在OpenCV官网下载适用于Windows平台的3.4.6版本  [下载地址](https://bj.bcebos.com/paddleseg/deploy/opencv-3.4.6-vc14_vc15.exe)  
 2. 运行下载的可执行文件,将OpenCV解压至指定目录,例如`D:\projects\opencv`
@@ -56,6 +56,7 @@ PaddlePaddle C++ 预测库针对是否使用GPU、是否支持TensorRT、以及
    - 在系统变量中找到Path(如没有,自行创建),并双击编辑
    - 新建,将opencv路径填入并保存,如`D:\projects\opencv\build\x64\vc15\bin`
    - 在进行cmake构建时,会有相关提示,请注意vs2019的输出
+4. 如果**开启加密**,点击[下载openssl](https://bj.bcebos.com/paddlex/tools/windows_openssl1.1.0k.zip),并解压至某个目录
 
 ### Step4: 使用Visual Studio 2019直接编译CMake
 
@@ -70,10 +71,11 @@ PaddlePaddle C++ 预测库针对是否使用GPU、是否支持TensorRT、以及
 
 3. 打开项目时,可能会自动构建。由于没有进行下面的依赖路径设置会报错,这个报错可以先忽略。
 
-  点击:`项目`->`CMake设置`
+  点击:`项目`->`CMake设置`(也可能叫`PaddleDeploy`的CMake设置)
   ![](../../images/vs2019_step4.png)
 
 4. 点击`浏览`,分别设置编译选项指定`CUDA`、`OpenCV`、`Paddle预测库`的路径(也可以点击右上角的“编辑 JSON”,直接修改json文件,然后保存点 项目->生成缓存)
+   如果**需要模型加密**,需要把WITH_ENCRYPTION勾选上,并填写openssl解压后的路径。
    ![](../../images/vs2019_step5.png)
    依赖库路径的含义说明如下(带*表示仅在使用**GPU版本**预测库时指定, 其中CUDA库版本尽量与Paddle预测库的对齐,例如Paddle预测库是**使用9.0、10.0版本**编译的,则编译PaddleX预测代码时**不使用9.2、10.1等版本**CUDA库):
 
@@ -88,8 +90,10 @@ PaddlePaddle C++ 预测库针对是否使用GPU、是否支持TensorRT、以及
 - 如果使用`CPU`版预测库,请把`WITH_GPU`的`值`去掉勾
 - 如果使用的是`openblas`版本,请把`WITH_MKL`的`值`去掉勾
 - 如果无法联网,请手动点击下载 [yaml-cpp.zip](https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip),无需解压,并修改`PaddleX\dygraph\deploy\cpp\cmake\yaml.cmake`中将`URL https://bj.bcebos.com/paddlex/deploy/deps/yaml-cpp.zip` 中的网址替换为第3步中下载的路径,如改为`URL D:\projects\yaml-cpp.zip`。
+- 如果使用GPU, 当前官网下载的Paddle预测库一定要链接TensorRT。
+- 如果使用加密部署, 一定记得勾选上WITH_ENCRYPTION,并填写[OpenSSL](https://bj.bcebos.com/paddlex/tools/windows_openssl1.1.0k.zip)路径
 
-5. 保存并生成CMake缓存
+1. 保存并生成CMake缓存
 
 ![](../../images/vs2019_step6.png)
 **设置完成后**, 点击上图中`保存并生成CMake缓存以加载变量`。然后我们可以看到vs的输出会打印CMake生成的过程,出现`CMake 生成完毕`且无报错代表生成完毕。
@@ -104,8 +108,13 @@ PaddlePaddle C++ 预测库针对是否使用GPU、是否支持TensorRT、以及
 
 - [单卡加载模型预测示例](../../demo/model_infer.md)
 - [多卡加载模型预测示例](../../demo/multi_gpu_model_infer.md)
+
+如果编译时开启TensorRT, 会多成一个`tensorrt_infer`二进制文件示例。示例使用参考如下文档:
 - [PaddleInference集成TensorRT加载模型预测示例](../../demo/tensorrt_infer.md)
 
+如果编译时开启加密, 会多成一个`decrypt_infer`二进制文件示例。示例使用参考如下文档:
+- [模型加密预测示例](../../demo/decrypt_infer.md)
+
 
 
 ## 其它文档

+ 98 - 0
dygraph/deploy/cpp/docs/demo/decrypt_infer.md

@@ -0,0 +1,98 @@
+# 模型加密预测示例
+
+本文档说明`PaddleX/deploy/cpp/demo/decrypt_infer.cpp`编译后的使用方法,仅供用户参考进行使用,开发者可基于此demo示例进行二次开发,满足集成的需求。
+
+## 步骤一、编译
+参考编译文档
+
+- [Linux系统上编译指南](../compile/paddle/linux.md)
+- [Windows系统上编译指南](../compile/paddle/windows.md)
+
+**注意**:编译时打开加密开关WITH_ENCRYPTION, 并填写OpenSSL路径
+
+## 步骤二、准备PaddlePaddle部署模型
+开发者可从以下套件获取部署模型,需要注意,部署时需要准备的是导出来的部署模型,一般包含`model.pdmodel`、`model.pdiparams`和`deploy.yml`三个文件,分别表示模型结构、模型权重和各套件自行定义的配置信息。
+- [PaddleDetection导出模型](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.0/deploy/EXPORT_MODEL.md)
+- [PaddleSeg导出模型](https://github.com/PaddlePaddle/PaddleSeg/blob/release/v2.0/docs/model_export.md)
+- [PaddleClas导出模型](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.1/docs/zh_CN/tutorials/getting_started.md#4-%E4%BD%BF%E7%94%A8inference%E6%A8%A1%E5%9E%8B%E8%BF%9B%E8%A1%8C%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86)
+- [PaddleX导出模型](https://github.com/PaddlePaddle/PaddleX/blob/develop/dygraph/docs/apis/export_model.md)
+
+
+用户也可直接下载本教程中从PaddleDetection中导出的YOLOv3模型进行测试,[点击下载](https://bj.bcebos.com/paddlex/deploy2/models/yolov3_mbv1.tar.gz)。
+
+## 步骤三、对模型文件进行加密
+
+加密工具我们已经制作好,直接下载并执行指令,即可将模型加密保存到指定目录:
+- [windows加密工具](https://bj.bcebos.com/paddlex/deploy/windows_paddle_encrypt_tool)
+- [linux加密工具](https://bj.bcebos.com/paddlex/deploy/linx_paddle_encrypt_tool)
+
+以YOLOV3模型为例,对其进行加密.
+```sh
+#windows为paddle_encrypt_tool.exe
+./paddle_encrypt_tool --model_filename=yolov3_mbv1/model/model.pdmodel \
+                      --params_filename=yolov3_mbv1/model/model.pdiparams \
+                      --cfg_file=yolov3_mbv1/model/infer_cfg.yml \
+                      --save_dir=yolov3_encryption
+
+# 可加 --key 参数指定使用自己的密钥对模型进行加密, 如果不加默认为随机生产key
+# 注意 --key 参数必须为原长为32位的密钥,并经过base64编码
+# 例如 12345678123456781234567812345678密钥,经过base64编码后为MTIzNDU2NzgxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2Nzg=。输入参数为: --key=MTIzNDU2NzgxMjM0NTY3ODEyMzQ1Njc4MTIzNDU2Nzg=
+```
+
+执行加密指令成功后会出现如下打印, 注意一定要保存好key, 部署时需要传入正确的密钥key才能部署:
+```
+key is 2DTPfe+K+I/hkHlDMDAoXdVzotbC8UCF9Ti0rwWd+KU=
+save to yolov3_encryption
+```
+
+执行加密指令后,会在指定目录(如上指令中的yolov3_encryption)生成三个加密文件用于部署:
+```
+yolov3_encryption
+├── encrypted.pdmodel       #模型文件,对应部署的model_filename参数
+├── encrypted.pdparams      #模型参数,对应部署的params_filename参数
+└── encrypted.yml           #配置文件,对应部署的cfg_file参数
+```
+
+## 步骤四、对加密模型进行预测
+以步骤三中加密后的YOLOv3模型为例,执行如下命令即可进行模型加密预测
+
+```sh
+# 使用GPU 加参数 --use_gpu=1
+build/demo/decrypt_infer --model_filename=yolov3_encryption/encrypted.pdmodel \
+                         --params_filename=yolov3_encryption/encrypted.pdparams \
+                         --cfg_file=yolov3_encryption/model/encrypted.yml \
+                         --image=yolov3_mbv1/images/000000010583.jpg \
+                         --model_type=det \
+                         --key=2DTPfe+K+I/hkHlDMDAoXdVzotbC8UCF9Ti0rwWd+KU=
+```
+**注意**:密钥key一定是步骤三中使用加密工具对模型进行加密得到的key, 如果不传入key默认加载普通未加密模型。
+
+输出结果如下(分别为类别id、标签、置信度、xmin、ymin、w, h)
+```
+Box(0	person	0.0386442	2.11425	53.4415	36.2138	197.833)
+Box(39	bottle	0.0134608	2.11425	53.4415	36.2138	197.833)
+Box(41	cup	0.0255145	2.11425	53.4415	36.2138	197.833)
+Box(43	knife	0.0824398	509.703	189.959	100.65	93.9368)
+Box(43	knife	0.0211949	448.076	167.649	162.924	143.557)
+Box(44	spoon	0.0234474	509.703	189.959	100.65	93.9368)
+Box(45	bowl	0.0461333	0	0	223.386	83.5562)
+Box(45	bowl	0.0191819	3.91156	1.276	225.888	214.273)
+```
+### 参数说明
+
+| 参数            | 说明                                                                                                         |
+| --------------- | ------------------------------------------------------------------------------------------------------------ |
+| model_filename  | **[必填]** 模型结构文件路径,如`yolov3_darknet/model.pdmodel`                                                |
+| params_filename | **[必填]** 模型权重文件路径,如`yolov3_darknet/model.pdiparams`                                              |
+| cfg_file        | **[必填]** 模型配置文件路径,如`yolov3_darknet/infer_cfg.yml`                        |
+| model_type      | **[必填]** 模型来源,det/seg/clas/paddlex,分别表示模型来源于PaddleDetection、PaddleSeg、PaddleClas和PaddleX |
+| image           | 待预测的图片文件路径                                                                |
+| use_gpu         | 是否使用GPU,0或者1,默认为0                                                        |
+| gpu_id          | 使用GPU预测时的GUI设备ID,默认为0                                                    |
+| gpu_id          | 使用GPU预测时的GUI设备ID,默认为0                                                    |
+| key             | 对模型加密使用的key,默认为空,只能加载未加密模型                                         |
+
+
+## 相关文档
+
+- [部署接口和数据结构文档](../apis/model.md)

+ 1 - 1
dygraph/deploy/cpp/docs/demo/model_infer.md

@@ -12,7 +12,7 @@
 - [PaddleDetection导出模型](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.0/deploy/EXPORT_MODEL.md)
 - [PaddleSeg导出模型](https://github.com/PaddlePaddle/PaddleSeg/blob/release/v2.0/docs/model_export.md)
 - [PaddleClas导出模型](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.1/docs/zh_CN/tutorials/getting_started.md#4-%E4%BD%BF%E7%94%A8inference%E6%A8%A1%E5%9E%8B%E8%BF%9B%E8%A1%8C%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86)
-- [PaddleX导出模型](https://paddlex.readthedocs.io/zh_CN/develop/deploy/export_model.html)
+- [PaddleX导出模型](https://github.com/PaddlePaddle/PaddleX/blob/develop/dygraph/docs/apis/export_model.md)
 
 
 用户也可直接下载本教程中从PaddleDetection中导出的YOLOv3模型进行测试,[点击下载](https://bj.bcebos.com/paddlex/deploy2/models/yolov3_mbv1.tar.gz)。

+ 1 - 1
dygraph/deploy/cpp/docs/demo/multi_gpu_model_infer.md

@@ -22,7 +22,7 @@
 - [PaddleDetection导出模型](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.0/deploy/EXPORT_MODEL.md)
 - [PaddleSeg导出模型](https://github.com/PaddlePaddle/PaddleSeg/blob/release/v2.0/docs/model_export.md)
 - [PaddleClas导出模型](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.1/docs/zh_CN/tutorials/getting_started.md#4-%E4%BD%BF%E7%94%A8inference%E6%A8%A1%E5%9E%8B%E8%BF%9B%E8%A1%8C%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86)
-- [PaddleX导出模型](https://paddlex.readthedocs.io/zh_CN/develop/deploy/export_model.html)
+- [PaddleX导出模型](https://github.com/PaddlePaddle/PaddleX/blob/develop/dygraph/docs/apis/export_model.md)
 
 
 

+ 1 - 1
dygraph/deploy/cpp/docs/demo/tensorrt_infer.md

@@ -14,7 +14,7 @@
 - [PaddleDetection导出模型](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.0/deploy/EXPORT_MODEL.md)
 - [PaddleSeg导出模型](https://github.com/PaddlePaddle/PaddleSeg/blob/release/v2.0/docs/model_export.md)
 - [PaddleClas导出模型](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.1/docs/zh_CN/tutorials/getting_started.md#4-%E4%BD%BF%E7%94%A8inference%E6%A8%A1%E5%9E%8B%E8%BF%9B%E8%A1%8C%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86)
-- [PaddleX导出模型](https://paddlex.readthedocs.io/zh_CN/develop/deploy/export_model.html)
+- [PaddleX导出模型](https://github.com/PaddlePaddle/PaddleX/blob/develop/dygraph/docs/apis/export_model.md)
 
 用户也可直接下载本教程中从PaddleDetection中导出的YOLOv3模型进行测试,[点击下载](https://bj.bcebos.com/paddlex/deploy2/models/yolov3_mbv1.tar.gz)。
 

+ 58 - 0
dygraph/deploy/cpp/docs/models/paddlex.md

@@ -0,0 +1,58 @@
+# PaddleX模型部署
+
+当前对PaddleX静态图和动态图版本导出的模型都支持
+
+
+## 步骤一 部署模型导出
+
+请参考[PaddlX模型导出文档](https://github.com/PaddlePaddle/PaddleX/blob/develop/dygraph/docs/apis/export_model.md)
+
+
+## 步骤二 编译
+
+参考编译文档
+
+- [Linux系统上编译指南](../compile/paddle/linux.md)
+- [Windows系统上编译指南](../compile/paddle/windows.md)
+
+
+## 步骤三 模型预测
+
+编译后即可获取可执行的二进制demo程序`model_infer`和`multi_gpu_model_infer`,分别用于在单卡/多卡上加载模型进行预测,对于分类模型,调用如下命令即可进行预测
+
+```sh
+# 使用gpu加 --use_gpu=1 参数
+./build/demo/model_infer --model_filename=model.pdmodel \
+                         --params_filename=model.pdiparams \
+                         --cfg_file=model.yml \
+                         --image=test.jpg \
+                         --model_type=paddlex
+```
+
+检测模型的输出结果如下(分别为类别id, 类别标签,置信度,xmin, ymin, width, height)
+
+```
+Box(0   person  0.295455    424.517 163.213 38.1692 114.158)
+Box(0   person  0.13875 381.174 172.267 22.2411 44.209)
+Box(0   person  0.0255658   443.665 165.08  35.4124 129.128)
+Box(39  bottle  0.356306    551.603 288.384 34.9819 112.599)
+```
+
+分割模型输出结果如下(由于分割结果的score_map和label_map不便于直接输出,因此在demo程序中仅输出这两个mask的均值和方差)
+
+```
+ScoreMask(mean: 12.4814 std:    10.4955)    LabelMask(mean: 1.98847 std:    10.3141)
+```
+
+分类模型输出结果如下(分别为类别id, 类别标签,置信度)
+
+```
+Classify(809    sunscreen   0.939211)
+```
+
+关于demo程序的详细使用方法可分别参考以下文档
+
+- [单卡加载模型预测示例](../demo/model_infer.md)
+- [多卡加载模型预测示例](../demo/multi_gpu_model_infer.md)
+- [PaddleInference集成TensorRT加载模型预测示例](../../demo/tensorrt_infer.md)
+- [模型加密预测示例](./docs/demo/decrypt_infer.md)