Explorar o código

update openvino doc

syyxsxx %!s(int64=5) %!d(string=hai) anos
pai
achega
fa6b0730d6

+ 37 - 0
docs/deploy/openvino/export_openvino_model.md

@@ -0,0 +1,37 @@
+# OpenVINO模型转换
+将Paddle模型转换为OpenVINO的Inference Engine  
+
+## 环境依赖
+
+* ONNX 1.5.0
+* PaddleX 1.0+
+* OpenVINO 2020.4
+
+**说明**:PaddleX安装请参考[PaddleX](https://paddlex.readthedocs.io/zh_CN/latest/install.html) , OpenVINO安装请参考[OpenVINO](https://docs.openvinotoolkit.org/latest/index.html),ONNX请安装1.5.0版本否则会出现转模型错误。
+
+请确保系统已经安装好上述基本软件,**下面所有示例以工作目录 `/root/projects/`演示**。
+
+## 导出inference模型
+paddle模型转openvino之前需要先把paddle模型导出为inference格式模型,导出的模型将包括__model__、__params__和model.yml三个文件名。导出命令如下
+```
+paddlex --export_inference --model_dir=/path/to/paddle_model --save_dir=./inference_model --fixed_input_shape=[w,h]
+```
+
+## 导出OpenVINO模型
+
+```
+cd /root/projects/python
+
+python convertor.py --model_dir /path/to/inference_model --save_dir /path/to/openvino_model --fixed_input_shape [w,h]
+```
+**转换成功后会在save_dir下出现后缀名为.xml、.bin、.mapping三个文件**   
+转换参数说明如下:
+
+|  参数   | 说明  |
+|  ----  | ----  |
+| --model_dir  | Paddle模型路径,请确保__model__, \_\_params__model.yml在同一个目录|
+| --save_dir  | openvino模型保存路径 |
+| --fixed_input_shape  | 模型输入的[W,H] |
+| --data type(option)  | FP32、FP16,默认为FP32,VPU下的IR需要为FP16 |
+
+

+ 3 - 1
docs/deploy/openvino/index.rst

@@ -6,6 +6,8 @@ OpenVINO部署
    :maxdepth: 2
    :caption: 文档目录:
 
+   introduction.md
    windows.md
    linux.md
-   intel_movidius.md
+   python.md
+   export_openvino_model.md 

+ 0 - 1
docs/deploy/openvino/intel_movidius.md

@@ -1 +0,0 @@
-# Intel计算棒

+ 29 - 0
docs/deploy/openvino/introduction.md

@@ -0,0 +1,29 @@
+# OpenVINO部署简介
+PaddleX支持将训练好的paddle模型通过openvino实现模型的预测加速,OpenVINO详细资料与安装流程请参考[OpenVINO](https://docs.openvinotoolkit.org/latest/index.html)
+
+## 部署支持情况
+下表提供了PaddleX在不同环境下对使用OpenVINO加速支持情况  
+|硬件平台|Linux|Windows|Raspbian OS|c++|python |分类|检测|分割|  
+| ----|  ---- | ---- | ----|  ---- | ---- |---- | ---- |---- |---- | ---- |
+|CPU|支持|支持|不支持|支持|支持|支持|支持|支持|
+|VPU|支持|支持|支持|支持|支持|支持|不支持|不支持|  
+其中Raspbian OS为树莓派操作系统。
+
+## 部署流程
+**PaddleX到OpenVINO的部署流程可以分为如下两步**: 
+
+  * **模型转换**:将paddle的模型转换为openvino的Inference Engine
+  * **预测部署**:使用Inference Engine进行预测
+
+## 模型转换 
+**模型转换请参考文档[模型转换](./export_openvino_model.md)**  
+**说明**:由于不同软硬件平台下OpenVINO模型转换方法一致,后续文档中不再赘述。
+
+## 预测部署
+由于不同软硬下部署OpenVINO实现预测的方式不完全一致,具体请参考:  
+**[Linux](./linux.md)**:介绍了PaddleX在操作系统为Linux或者Raspbian OS,编程语言为C++,硬件平台为
+CPU或者VPU的情况下使用OpenVINO进行预测加速  
+
+**[Windows](./windows.md)**:介绍了PaddleX在操作系统为Window,编程语言为C++,硬件平台为CPU或者VPU的情况下使用OpenVINO进行预测加速  
+
+**[python](./windows.md)**:介绍了PaddleX在python下使用OpenVINO进行预测加速

+ 147 - 0
docs/deploy/openvino/linux.md

@@ -1 +1,148 @@
 # Linux平台
+
+
+## 前置条件
+
+* OS: Ubuntu、Raspbian OS
+* GCC* 5.4.0
+* CMake 3.0+
+* PaddleX 1.0+
+* OpenVINO 2020.4 
+* 硬件平台:CPU、VPU
+  
+**说明**:PaddleX安装请参考[PaddleX](https://paddlex.readthedocs.io/zh_CN/latest/install.html) , OpenVINO安装请参考[OpenVINO-Linux](https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html)或者[OpenVINO-Raspbian](https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_raspbian.html)
+
+请确保系统已经安装好上述基本软件,并配置好相应环境,**下面所有示例以工作目录 `/root/projects/`演示**。
+
+
+
+## 预测部署  
+
+文档提供了c++下预测部署的方法,如果需要在python下预测部署请参考[python预测部署](./python.md)
+
+### Step1 下载PaddleX预测代码
+```
+mkdir -p /root/projects
+cd /root/projects
+git clone https://github.com/PaddlePaddle/PaddleX.git
+```
+**说明**:其中C++预测代码在PaddleX\deploy\openvino 目录,该目录不依赖任何PaddleX下其他目录。
+
+### Step2 软件依赖
+提供了依赖软件预编包或者一键编译,用户不需要单独下载或编译第三方依赖软件。若需要自行编译第三方依赖软件请参考:
+
+- gflags:编译请参考 [编译文档](https://gflags.github.io/gflags/#download)  
+
+- glog:编译请参考[编译文档](https://github.com/google/glog)
+
+- opencv: 编译请参考 
+[编译文档](https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html)
+ 
+
+  
+### Step3: 编译
+编译`cmake`的命令在`scripts/build.sh`中,若在树莓派(Raspbian OS)上编译请修改ARCH参数x86为armv7,若自行编译第三方依赖软件请根据Step1中编译软件的实际情况修改主要参数,其主要内容说明如下:
+```
+# openvino预编译库的路径
+OPENVINO_DIR=$INTEL_OPENVINO_DIR/inference_engine
+# gflags预编译库的路径
+GFLAGS_DIR=$(pwd)/deps/gflags
+# glog预编译库的路径
+GLOG_DIR=$(pwd)/deps/glog
+# ngraph lib预编译库的路径
+NGRAPH_LIB=$INTEL_OPENVINO_DIR/deployment_tools/ngraph/lib
+# opencv预编译库的路径
+OPENCV_DIR=$(pwd)/deps/opencv/
+#cpu架构(x86或armv7)
+ARCH=x86
+```
+执行`build`脚本:
+ ```shell
+ sh ./scripts/build.sh
+ ```  
+
+### Step4: 预测
+
+编译成功后,分类任务的预测可执行程序为`classifier`,分割任务的预测可执行程序为`segmenter`,检测任务的预测可执行程序为`detector`,其主要命令参数说明如下:
+
+|  参数   | 说明  |
+|  ----  | ----  |
+| --model_dir  | 模型转换生成的.xml文件路径,请保证模型转换生成的三个文件在同一路径下|
+| --image  | 要预测的图片文件路径 |
+| --image_list  | 按行存储图片路径的.txt文件 |
+| --device  | 运行的平台,可选项{"CPU","MYRIAD"},默认值为"CPU",如在VPU上请使用"MYRIAD"|
+| --cfg_dir | PaddleX model 的.yml配置文件 |
+| --save_dir | 可视化结果图片保存地址,仅适用于检测和分割任务,默认值为" "既不保存可视化结果 |
+
+### 样例
+`样例一`:
+linux系统在CPU下做单张图片的分类任务预测  
+测试图片 `/path/to/test_img.jpeg`  
+
+```shell
+./build/classifier --model_dir=/path/to/openvino_model --image=/path/to/test_img.jpeg --cfg_dir=/path/to/PadlleX_model.yml
+```
+
+
+`样例二`:
+linux系统在CPU下做多张图片的分割任务预测,并保存预测可视化结果
+预测多个图片`/path/to/image_list.txt`,image_list.txt内容的格式如下:
+```
+/path/to/images/test_img1.jpeg
+/path/to/images/test_img2.jpeg
+...
+/path/to/images/test_imgn.jpeg
+```
+
+```shell
+./build/segmenter --model_dir=/path/to/models/openvino_model --image_list=/root/projects/images_list.txt --cfg_dir=/path/to/PadlleX_model.yml --save_dir ./output
+```
+
+`样例三`:  
+树莓派(Raspbian OS)在VPU下做单张图片分类任务预测
+测试图片 `/path/to/test_img.jpeg`  
+
+```shell
+./build/classifier --model_dir=/path/to/openvino_model --image=/path/to/test_img.jpeg --cfg_dir=/path/to/PadlleX_model.yml --device=MYRIAD
+```
+
+## 性能测试
+`测试一`:  
+在服务器CPU下测试了OpenVINO对PaddleX部署的加速性能:
+- cpu:Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
+- openvino: 2020.4
+- paddleX:采用paddle预测库(1.8),打开mkldnn加速,打开多线程。
+- 模型来自paddleX tutorials,Batch Size均为1,耗时单位为ms/image,只计算模型运行时间,不包括数据的预处理和后处理,20张图片warmup,100张图片测试性能。
+
+|模型| paddleX| openvino |  图片输入大小|
+|---|---|---|---|
+|resnet-50 | 20.56 | 16.12 | 224*224 |
+|mobilenet-V2 | 5.16 | 2.31 |224*224|
+|hrnet | None | 63.35 |512*512|
+|unet | 276.40 | 211.49 |512*512|
+|deeplabv3 | None | 25.91 |512*512|
+|yolov3-mobilnetv1 |76.63| 46.26|608*608 |   
+
+`测试二`:
+在PC机上插入VPU架构的神经计算棒(NCS2),通过Openvino加速。
+- cpu:Intel(R) Core(TM) i5-4300U 1.90GHz
+- vpu:Movidius Neural Compute Stick2
+- openvino: 2020.4
+- 模型来自paddleX tutorials,Batch Size均为1,耗时单位为ms/image,只计算模型运行时间,不包括数据的预处理和后处理,20张图片warmup,100张图片测试性能。  
+
+|模型|openvino|输入图片|
+|---|---|---|
+|mobilenetV2|24.00|224*224|
+|resnet50_vd_ssld|58.53|224*224|    
+
+`测试三`:
+在树莓派3B上插入VPU架构的神经计算棒(NCS2),通过Openvino加速。
+- cpu :ARM Cortex-A72 1.2GHz 64bit
+- vpu:Movidius Neural Compute Stick2
+- openvino: 2020.4
+- 模型来自paddleX tutorials,Batch Size均为1,耗时单位为ms/image,只计算模型运行时间,不包括数据的预处理和后处理,20张图片warmup,100张图片测试性能。  
+
+|模型|openvino|输入图片大小|
+|---|---|---|
+|mobilenetV2|43.15|224*224|
+|resnet50|82.66|224*224|  

+ 51 - 0
docs/deploy/openvino/python.md

@@ -0,0 +1,51 @@
+# Python预测部署
+文档说明了在python下基于OpenVINO的预测部署,部署前需要先将paddle模型转换为OpenVINO的Inference Engine,请参考[模型转换](docs/deploy/openvino/export_openvino_model.md)。目前CPU硬件上支持PadlleX的分类、检测、分割模型;VPU上支持PaddleX的分类模型。
+
+## 前置条件
+* Python 3.6+
+* OpenVINO 2020.4
+
+**说明**:OpenVINO安装请参考[OpenVINO](https://docs.openvinotoolkit.org/latest/index.html)  
+
+
+请确保系统已经安装好上述基本软件,**下面所有示例以工作目录 `/root/projects/`演示**。
+
+## 预测部署
+运行/root/projects/PaddleX/deploy/openvino/python目录下demo.py文件可以进行预测,其命令参数说明如下:
+
+|  参数   | 说明  |
+|  ----  | ----  |
+| --model_dir  | 模型转换生成的.xml文件路径,请保证模型转换生成的三个文件在同一路径下|
+| --img  | 要预测的图片文件路径 |
+| --image_list  | 按行存储图片路径的.txt文件 |
+| --device  | 运行的平台, 默认值为"CPU" |
+| --cfg_dir | PaddleX model 的.yml配置文件 |
+  
+### 样例
+`样例一`:  
+测试图片 `/path/to/test_img.jpeg`  
+
+```
+cd /root/projects/python  
+
+python demo.py --model_dir /path/to/openvino_model --img /path/to/test_img.jpeg --cfg_dir /path/to/PadlleX_model.yml
+```  
+
+样例二`:
+
+预测多个图片`/path/to/image_list.txt`,image_list.txt内容的格式如下:
+
+```
+/path/to/images/test_img1.jpeg
+/path/to/images/test_img2.jpeg
+...
+/path/to/images/test_imgn.jpeg
+```
+
+```
+cd /root/projects/python  
+
+python demo.py --model_dir /path/to/models/openvino_model --image_list /root/projects/images_list.txt --cfg_dir=/path/to/PadlleX_model.yml
+```
+
+

+ 111 - 0
docs/deploy/openvino/windows.md

@@ -1 +1,112 @@
 # Windows平台
+
+## 说明
+Windows 平台下,我们使用`Visual Studio 2019 Community` 进行了测试。微软从`Visual Studio 2017`开始即支持直接管理`CMake`跨平台编译项目,但是直到`2019`才提供了稳定和完全的支持,所以如果你想使用CMake管理项目编译构建,我们推荐你使用`Visual Studio 2019`环境下构建。
+
+## 前置条件
+* Visual Studio 2019
+* OpenVINO 2020.4
+* CMake 3.0+
+
+**说明**:PaddleX安装请参考[PaddleX](https://paddlex.readthedocs.io/zh_CN/latest/install.html) , OpenVINO安装请参考[OpenVINO-Windows](hhttps://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_windows.html)  
+
+**注意**:安装完OpenVINO后需要手动添加OpenVINO目录到系统环境变量,否则在运行程序时会出现找不到dll的情况。以OpenVINO不改变OpenVINO安装目录情况下为示例,流程如下
+- 我的电脑->属性->高级系统设置->环境变量
+    - 在系统变量中找到Path(如没有,自行创建),并双击编辑
+    - 新建,将OpenVINO以下路径填入并保存:  
+      `C:\Program File (x86)\IntelSWTools\openvino\inference_engine\bin\intel64\Release`  
+      `C:\Program File (x86)\IntelSWTools\openvino\inference_engine\external\tbb\bin`  
+      `C:\Program File (x86)\IntelSWTools\openvino\deployment_tools\ngraph\lib`  
+
+请确保系统已经安装好上述基本软件,并配置好相应环境,**下面所有示例以工作目录为 `D:\projects`演示。**
+
+## 预测部署  
+
+文档提供了c++下预测部署的方法,如果需要在python下预测部署请参考[python预测部署](./python.md)
+
+### Step1: 下载PaddleX预测代码
+
+```shell
+d:
+mkdir projects
+cd projects
+git clone https://github.com/PaddlePaddle/PaddleX.git
+```
+
+**说明**:其中`C++`预测代码在`PaddleX\deploy\openvino` 目录,该目录不依赖任何`PaddleX`下其他目录。
+
+### Step2 软件依赖
+提供了依赖软件预编译库,[gflas-glog](https://bj.bcebos.com/paddlex/deploy/windows/third-parts.zip),[opencv](https://bj.bcebos.com/paddleseg/deploy/opencv-3.4.6-vc14_vc15.exe),请下载上面两个连接的预编译库。若需要自行下载请参考:
+- gflags:[下载地址](https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/gflags)
+- glog:[编译文档](https://github.com/google/glog)
+- opencv:[下载地址](https://opencv.org/releases/)  
+下载完opencv后需要配置环境变量,如下流程所示  
+    - 我的电脑->属性->高级系统设置->环境变量
+    - 在系统变量中找到Path(如没有,自行创建),并双击编辑
+    - 新建,将opencv路径填入并保存,如`D:\projects\opencv\build\x64\vc14\bin`
+
+### Step3: 使用Visual Studio 2019直接编译CMake
+1. 打开Visual Studio 2019 Community,点击`继续但无需代码`
+2. 点击: `文件`->`打开`->`CMake` 选择C++预测代码所在路径(例如`D:\projects\PaddleX\deploy\openvino`),并打开`CMakeList.txt`:
+3. 点击:`项目`->`CMake设置`
+4. 点击`浏览`,分别设置编译选项指定`OpenVINO`、`Gflags`、`GLOG`、`NGRAPH`、`OPENCV`的路径  
+
+|  参数名   | 含义  |
+|  ----  | ----  |
+| OPENCV_DIR  | opencv库路径 |
+| OPENVINO_DIR | OpenVINO推理库路径,在OpenVINO安装目录下的deployment/inference_engine目录,若未修改OpenVINO默认安装目录可以不用修改 |
+| NGRAPH——LIB | OpenVINO的ngraph库路径,在OpenVINO安装目录下的deployment/ngraph/lib目录,若未修改OpenVINO默认安装目录可以不用修改 |
+| GFLAGS_DIR | gflags库路径 |
+| GLOG_DIR  | glog库路径 |
+| WITH_STATIC_LIB | 是否静态编译,默认为True |
+**设置完成后**, 点击`保存并生成CMake缓存以加载变量`。
+5. 点击`生成`->`全部生成`
+### Step5: 预测
+上述`Visual Studio 2019`编译产出的可执行文件在`out\build\x64-Release`目录下,打开`cmd`,并切换到该目录:
+
+```
+D:
+cd D:\projects\PaddleX\deploy\cpp\out\build\x64-Release
+```
+
+* 编译成功后,图片预测demo的入口程序为`detector.exe`,`classifier.exe`,`segmenter.exe`,用户可根据自己的模型类型选择,其主要命令参数说明如下:
+
+|  参数   | 说明  |
+|  ----  | ----  |
+| --model_dir  | 模型转换生成的.xml文件路径,请保证模型转换生成的三个文件在同一路径下|
+| --image  | 要预测的图片文件路径 |
+| --image_list  | 按行存储图片路径的.txt文件 |
+| --device  | 运行的平台,可选项{"CPU","MYRIAD"},默认值为"CPU",如在VPU上请使用"MYRIAD"|
+| --cfg_dir | PaddleX model 的.yml配置文件 |
+| --save_dir | 可视化结果图片保存地址,仅适用于检测和分割任务,默认值为" "既不保存可视化结果 |
+
+### 样例
+`样例一`:
+在CPU下做单张图片的分类任务预测  
+测试图片 `/path/to/test_img.jpeg`  
+
+```shell
+./classifier.exe --model_dir=/path/to/openvino_model --image=/path/to/test_img.jpeg --cfg_dir=/path/to/PadlleX_model.yml
+```
+
+`样例二`:
+在CPU下做多张图片的分割任务预测,并保存预测可视化结果
+预测多个图片`/path/to/image_list.txt`,image_list.txt内容的格式如下:
+```
+/path/to/images/test_img1.jpeg
+/path/to/images/test_img2.jpeg
+...
+/path/to/images/test_imgn.jpeg
+```
+
+```shell
+./segmenter.exe --model_dir=/path/to/models/openvino_model --image_list=/root/projects/images_list.txt --cfg_dir=/path/to/PadlleX_model.yml --save_dir ./output
+```
+
+`样例三`:  
+在VPU下做单张图片分类任务预测
+测试图片 `/path/to/test_img.jpeg`  
+
+```shell
+.classifier.exe --model_dir=/path/to/openvino_model --image=/path/to/test_img.jpeg --cfg_dir=/path/to/PadlleX_model.yml --device=MYRIAD
+```