Linux平台

前置条件

  • OS: Ubuntu、Raspbian OS
  • GCC* 5.4.0
  • CMake 3.0+
  • PaddleX 1.0+
  • OpenVINO 2020.4或者2021.1+
  • 硬件平台:CPU、VPU

说明:PaddleX安装请参考PaddleX , OpenVINO安装请根据相应的系统参考OpenVINO-Linux或者OpenVINO-Raspbian

注意:CPU下请使用OpenVINO 2020.1+版本、VPU下请使用2020.4版本

请确保系统已经安装好上述基本软件,并配置好相应环境,下面所有示例以工作目录 /root/projects/演示

预测部署

文档提供了c++下预测部署的方法,如果需要在python下预测部署请参考python预测部署

Step1 下载PaddleX预测代码

mkdir -p /root/projects
cd /root/projects
git clone https://github.com/PaddlePaddle/PaddleX.git
cd PaddleX
git checkout release/1.3

说明:其中C++预测代码在PaddleX/deploy/openvino 目录,该目录不依赖任何PaddleX下其他目录。

Step2 软件依赖

Step3中的编译脚本会一键安装第三方依赖软件的预编译包,用户不需要单独下载或编译这些依赖软件。若需要自行编译第三方依赖软件请参考:

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
# ngraph lib预编译库的路径
NGRAPH_LIB=$INTEL_OPENVINO_DIR/deployment_tools/ngraph/lib
# opencv预编译库的路径
OPENCV_DIR=$(pwd)/deps/opencv/
#cpu架构(x86或armv7)
ARCH=x86

执行build脚本:

sh ./scripts/build.sh

Step4: 预测

编译成功后,分类任务的预测可执行程序为classifier,检测任务的预测可执行程序为detector,分割任务的预测可执行程序为segmenter,其主要命令参数说明如下:

参数 说明
--model_dir 模型转换生成的.xml文件路径,请保证模型转换生成的三个文件在同一路径下
--image 要预测的图片文件路径
--image_list 按行存储图片路径的.txt文件
--device 运行的平台,可选项{"CPU","MYRIAD"},默认值为"CPU",如在VPU上请使用"MYRIAD"
--cfg_file PaddleX model 的.yml配置文件
--save_dir 可视化结果图片保存地址,仅适用于检测任务,默认值为" ",即不保存可视化结果

样例

样例一: linux系统在CPU下做单张图片的分类任务预测测试图片 /path/to/test_img.jpeg

./build/classifier --model_dir=/path/to/openvino_model --image=/path/to/test_img.jpeg --cfg_file=/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
./build/detector --model_dir=/path/to/models/openvino_model --image_list=/root/projects/images_list.txt --cfg_file=/path/to/PadlleX_model.yml --save_dir ./output

样例三:树莓派(Raspbian OS)在VPU下做单张图片分类任务预测 测试图片 /path/to/test_img.jpeg

./build/classifier --model_dir=/path/to/openvino_model --image=/path/to/test_img.jpeg --cfg_file=/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
yolov3-mobilnetv1 76.63 46.26 608*608
unet 276.40 211.49 512*512

测试二: 在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