PaddleSeg之语义分割模型部署

模型训练完后,往往在实际应用过程中对实时性都有一定的要求,而python运行效率比较慢,所以需要采用其他加速的部署方案,这里主要介绍下PaddleSeg的C++部署方案。

1.模型导出

python export.py --config ./configs/deeplabv3p/deeplabv3p_resnet101_os8_cityscapes_769x769_80k.yml --model_path ./model/resnet101_vd_ssld/model.pdparams --save_dir model

导出后保存在model目录下,下图是导出的主要文件。
PaddleSeg之语义分割模型部署_第1张图片
模型的可视化,可以通过visualdl进行查看。

visualdl --logdir ./log

选择网络结构-静态,然后上传模型,选择model.pdmodel。
PaddleSeg之语义分割模型部署_第2张图片
PaddleSeg之语义分割模型部署_第3张图片

2.部署

PaddleSeg提供的部署Demo代码在PaddleSeg/deploy/cpp目录下。
PaddleSeg之语义分割模型部署_第4张图片
里面包括了cpu、gpu、gpu+tensorrt和gpu+tensorrt+dynamic shape四种运行方式,可以根据自己的硬件环境选择采用哪种方式。
这里介绍稍微难一点的方式gpu+tensorrt+dynamic shape。环境还是采用Docker的方式进行部署。

2.1环境安装

  1. 系统环境
    ubuntu1804,cuda11.1,nvidia-470, Docker-19.03.0

  2. tensorrt安装
    在docker镜像中安装TensorRT-7.2.1.6,这个需要自己去官网下载,这里不详细介绍了。

  3. paddle-inference安装
    进入paddlepaddle的官网进行下载:https://www.paddlepaddle.org.cn/inference/user_guides/download_lib.html
    PaddleSeg之语义分割模型部署_第5张图片
    根据自己的系统环境进行下载,下载完paddle_inference.tgz文件后,将其解压就可以了,不需要编译安装,里面是编译好的lib库。

2.2编译运行

  1. 编译
    首先需要修改编译脚本run_seg_gpu_trt_dynamic_shape.sh
    里面的tensorrt和paddle_inference的路径。
    PaddleSeg之语义分割模型部署_第6张图片
    还有需要去掉文件中的编译选项–dynamic_shape_path,这个没有用到,也没有这个文件,不去掉会编译报下面的错。
    PaddleSeg之语义分割模型部署_第7张图片
    在编译的过程中可能还会有一些错误,可参考下面文章里面讲的比较清楚。https://gitee.com/paddlepaddle/Serving/blob/develop/doc/FAQ_CN.md

  2. Dynamic Shape
    测试代码中的dynamic shape只是给了一个样例,如果要用dynamic shape运行deeplabv3模型是会报错的,会显示有些层dynamic shape没有设置。
    PaddleSeg之语义分割模型部署_第8张图片
    需要对代码进行修改,对报错的层进行形状设置,这里以hardnet模型为例修改如下:
    PaddleSeg之语义分割模型部署_第9张图片

  3. 运行推理

bash run_seg_gpu_trt_dynamic_shape.sh

PaddleSeg之语义分割模型部署_第10张图片

你可能感兴趣的:(深度学习,图像识别,自动驾驶,人工智能,计算机视觉,深度学习,paddlepaddle)