diff --git a/deploy/README.md b/deploy/README.md index 37007ac7387c5ec808adfb1f3ed200ea41f9b8f8..c3a1317369c5e96447304567d3a1827e0257df8d 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -3,3 +3,4 @@ 本目录为PaddleX模型部署代码, 编译和使用的教程参考: - [C++部署文档](../docs/deploy/deploy.md#C部署) +- [OpenVINO部署文档](../docs/deploy/deploy.md#openvino部署) diff --git a/docs/deploy/deploy.md b/docs/deploy/deploy.md index c7d15454dc938fe20a42020727bbebb5d4e1d638..7193dc3de315b43c85f3aa3d8ff24c7b02f98f3b 100644 --- a/docs/deploy/deploy.md +++ b/docs/deploy/deploy.md @@ -39,6 +39,39 @@ C++部署方案位于目录`deploy/cpp/`下,且独立于PaddleX其他模块。 - 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) + ### 预测性能对比 #### 测试环境 diff --git a/docs/deploy/deploy_openvino.md b/docs/deploy/deploy_openvino.md new file mode 100644 index 0000000000000000000000000000000000000000..9b9bb670ac4388feb0212cd8e4a33938255f197d --- /dev/null +++ b/docs/deploy/deploy_openvino.md @@ -0,0 +1,107 @@ +# OpenVINO 分类demo编译 + +## 说明 +本文档在 `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` + +**说明**:其中`C++`预测代码在`/root/projects/PaddleX/deploy/openvino` 目录,该目录不依赖任何`PaddleX`下其他目录。 + +### Step1: 软件依赖 + +- openvino: +[编译文档](https://github.com/openvinotoolkit/openvino/blob/2020/build-instruction.md#build-steps) + +- gflags: +[编译文档](https://gflags.github.io/gflags/#download) + +- opencv: +[编译文档](https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html) +说明:/root/projects/PaddleX/deploy/openvino/scripts/bootstrap.sh提供了预编译版本下载,也可自行编译。 + +- ngraph: +说明:openvino编译的过程中会生成ngraph的lib文件,位于{openvino根目录}/bin/intel64/Release/lib/下。 + +### Step2: 编译demo + + +编译`cmake`的命令在`scripts/build.sh`中,请根据Step1中编译软件的实际情况修改主要参数,其主要内容说明如下: +``` +# openvino预编译库的路径 +OPENVINO_DIR=/path/to/inference_engine/ +# gflags预编译库的路径 +GFLAGS_DIR=/path/to/gflags +# ngraph lib的路径,编译openvino时通常会生成 +NGRAPH_LIB=/path/to/ngraph/lib/ + +# opencv预编译库的路径, 如果使用自带预编译版本可不修改 +OPENCV_DIR=$(pwd)/deps/opencv3gcc4.8/ +# 下载自带预编译版本 +sh $(pwd)/scripts/bootstrap.sh + +rm -rf build +mkdir -p build +cd build +cmake .. \ + -DOPENCV_DIR=${OPENCV_DIR} \ + -DGFLAGS_DIR=${GFLAGS_DIR} \ + -DOPENVINO_DIR=${OPENVINO_DIR} \ + -DNGRAPH_LIB=${NGRAPH_LIB} +make + +``` + +修改脚本设置好主要参数后,执行`build`脚本: + ```shell + sh ./scripts/build.sh + ``` + +### Step3: 模型转换 + +将[]()生成的onnx文件转换为OpencVINO支持的格式,请参考:[Model Optimizer文档](https://docs.openvinotoolkit.org/latest/_docs_MO_DG_Deep_Learning_Model_Optimizer_DevGuide.html) + +### Step4: 预测 +编译成功后,预测demo的可执行程序分别为`build/classifer`,其主要命令参数说明如下: + +| 参数 | 说明 | +| ---- | ---- | +| --model_dir | Model Optimizer生成的.xml文件路径,请保证Model Optimizer生成的三个文件在同一路径下| +| --image | 要预测的图片文件路径 | +| --image_list | 按行存储图片路径的.txt文件 | +| --device | 运行的平台, 默认值为"CPU" | + + +## 样例 + +可使用[小度熊识别模型](deploy.md#导出inference模型)中导出的`inference_model`和测试图片进行预测。 + +`样例一`: + +测试图片 `/path/to/xiaoduxiong.jpeg` + +```shell +./build/classifier --model_dir=/path/to/inference_model --image=/path/to/xiaoduxiong.jpeg +``` + + +`样例二`: + +预测多个图片`/path/to/image_list.txt`,image_list.txt内容的格式如下: +``` +/path/to/images/xiaoduxiong1.jpeg +/path/to/images/xiaoduxiong2.jpeg +... +/path/to/images/xiaoduxiongn.jpeg +``` +```shell +./build/classifier --model_dir=/path/to/models/inference_model --image_list=/root/projects/images_list.txt - +``` + + diff --git a/docs/deploy/encryption.md b/docs/deploy/encryption.md new file mode 100644 index 0000000000000000000000000000000000000000..b94ec3bee41be02a7a87cd90b2f5392adbe21412 --- /dev/null +++ b/docs/deploy/encryption.md @@ -0,0 +1,57 @@ +# Paddle模型加密方案 + +飞桨团队推出模型加密方案,使用业内主流的AES加密技术对最终模型进行加密。飞桨用户可以通过PaddleX导出模型后,使用该方案对模型进行加密,预测时使用解密SDK进行模型解密并完成推理,大大提升AI应用安全性和开发效率。 + +## 1. 方案介绍 + +### 1.1 工具组成 + +[链接](http://wiki.baidu.com/pages/viewpage.action?pageId=1128566963) + +下载并解压后,目录包含内容为: +``` +paddle_model_encrypt +├── include # 头文件:paddle_model_decrypt.h(解密)和paddle_model_encrypt.h(加密) +| +├── lib # libpmodel-encrypt.so和libpmodel-decrypt.so动态库 +| +└── tool # paddle_encrypt_tool +``` + +### 1.2 二进制工具 + +#### 1.2.1 生成密钥 + +产生随机密钥信息(用于AES加解密使用)(32字节key + 16字节iv, 注意这里产生的key是经过base64编码后的,这样可以扩充选取key的范围) + +``` + +paddle_encrypt_tool -g +``` +#### 1.2.1 文件加密 + +``` + paddle_encrypt_tool -e -key keydata -infile infile -outfile outfile + +``` + +#### 1.3 SDK + +``` + +// 加密API + +int paddle_encrypt_model(const char* keydata, const char* infile, const char* outfile); + +// 加载加密模型API: + +int paddle_security_load_model( + paddle::AnalysisConfig *config, + const char *key, + const char *model_file, + const char *param_file); +``` + +## 2. PaddleX C++加密部署 + +