提交 fa6b0730 编写于 作者: S syyxsxx

update openvino doc

上级 121a9f0f
# 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 |
......@@ -6,6 +6,8 @@ OpenVINO部署
:maxdepth: 2
:caption: 文档目录:
introduction.md
windows.md
linux.md
intel_movidius.md
python.md
export_openvino_model.md
# 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进行预测加速
\ No newline at end of file
# 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|
# 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
```
# 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
```
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册