2021-06-23 08:58:10 +08:00
..
2021-06-23 08:58:10 +08:00
2021-06-23 08:58:10 +08:00
2021-06-23 08:58:10 +08:00
2021-06-23 08:58:10 +08:00
2021-06-23 08:58:10 +08:00
2021-06-23 08:58:10 +08:00
2021-06-23 08:58:10 +08:00
2021-06-23 08:58:10 +08:00

PaddleDetection 预测部署

训练得到一个满足要求的模型后,如果想要将该模型部署到已选择的平台上,需要通过tools/export_model.py将模型导出预测部署的模型和配置文件。 并在同一文件夹下导出预测时使用的配置文件,配置文件名为infer_cfg.yml

1、PaddleDetection目前支持的部署方式按照部署设备可以分为:

  • 在本机python语言部署,支持在有python paddle(支持CPUGPU)环境下部署,有两种方式:
    • 使用tools/infer.py,此种方式依赖PaddleDetection代码库。
    • 将模型导出,使用deploy/python/infer.py,此种方式不依赖PaddleDetection代码库,可以单个python文件部署。
  • 在本机C++语言使用paddle inference预测库部署,支持在LinuxWindows系统下部署。请参考文档C++部署
  • 在服务器端以服务形式部署,使用PaddleServing部署。
  • 在手机移动端部署,使用Paddle-Lite 在手机移动端部署。 常见模型部署Demo请参考Paddle-Lite-Demo
  • NV Jetson嵌入式设备上部署
  • TensorRT加速请参考文档TensorRT预测部署教程

2、模型导出

使用tools/export_model.py脚本导出模型已经部署时使用的配置文件,配置文件名字为infer_cfg.yml。模型导出脚本如下:

# 导出YOLOv3模型
python tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_coco.yml -o weights=weights/yolov3_darknet53_270e_coco.pdparams

预测模型会导出到output_inference/yolov3_darknet53_270e_coco目录下,分别为infer_cfg.yml, model.pdiparams, model.pdiparams.info, model.pdmodel

如果需要导出PaddleServing格式的模型,需要设置export_serving_model=True:

python tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_coco.yml -o weights=weights/yolov3_darknet53_270e_coco.pdparams --export_serving_model=True

预测模型会导出到output_inference/yolov3_darknet53_270e_coco目录下,分别为infer_cfg.yml, model.pdiparams, model.pdiparams.info, model.pdmodel, serving_client/文件夹, serving_server/文件夹。

模型导出具体请参考文档PaddleDetection模型导出教程

3、如何选择部署时依赖库的版本

1CUDA、cuDNN、TensorRT版本选择

由于CUDA、cuDNN、TENSORRT不一定都是向前兼容的需要使用与编译Paddle预测库使用的环境完全一致的环境进行部署。

2部署时预测库版本、预测引擎版本选择

  • Linux、Windows平台下C++部署需要使用Paddle预测库进行部署。 1Paddle官网提供在不同平台、不同环境下编译好的预测库您可以直接使用请在这里Paddle预测库 选择。 2如果您将要部署的平台环境Paddle官网上没有提供已编译好的预测库您可以自行编译编译过程请参考Paddle源码编译

注意: Paddle预测库版本需要>=2.0

  • Python语言部署需要在对应平台上安装Paddle Python包。如果Paddle官网上没有提供该平台下的Paddle Python包您可以自行编译编译过程请参考Paddle源码编译

  • PaddleServing部署 PaddleServing 0.4.0是基于Paddle 1.8.4开发PaddleServing 0.5.0是基于Paddle2.0开发。

  • Paddle-Lite部署 Paddle-Lite支持OP列表请参考Paddle-Lite支持的OP列表 请跟进所部署模型中使用到的op选择Paddle-Lite版本。

  • NV Jetson部署 Paddle官网提供在NV Jetson平台上已经编译好的预测库Paddle NV Jetson预测库 。 若列表中没有您需要的预测库,您可以在您的平台上自行编译,编译过程请参考Paddle源码编译

4、部署

  • C++部署,先使用跨平台编译工具CMake根据CMakeLists.txt生成Makefile,支持Windows、Linux、NV Jetson平台,然后进行编译产出可执行文件。可以直接使用cpp/scripts/build.sh脚本编译:
cd cpp
sh scripts/build.sh
  • Python部署可以使用使用tools/infer.py以来PaddleDetection源码部署或者使用deploy/python/infer.py单文件部署

  • PaddleServing部署请参考PaddleServing部署部署。

  • 手机移动端部署,请参考Paddle-Lite-Demo部署。

5、常见问题QA

  • 1、Paddle 1.8.4训练的模型,可以用Paddle2.0部署吗? Paddle 2.0是兼容Paddle 1.8.4的,因此是可以的。但是部分模型(如SOLOv2)使用到了Paddle 2.0中新增OP这类模型不可以。

  • 2、Windows编译时预测库是VS2015编译的选择VS2017或VS2019会有问题吗 关于VS兼容性问题请参考C++Visual Studio 2015、2017和2019之间的二进制兼容性

  • 3、cuDNN 8.0.4连续预测会发生内存泄漏吗? 经QA测试发现cuDNN 8系列连续预测时都有内存泄漏问题且cuDNN 8性能差于cuDNN 7推荐使用CUDA + cuDNN7.6.4的方式进行部署。