PaddleSeg之语义分割模型部署

发布于:2022-12-22 ⋅ 阅读:(756) ⋅ 点赞:(0)

模型训练完后,往往在实际应用过程中对实时性都有一定的要求,而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目录下,下图是导出的主要文件。
在这里插入图片描述
模型的可视化,可以通过visualdl进行查看。

visualdl --logdir ./log

选择网络结构-静态,然后上传模型,选择model.pdmodel。
在这里插入图片描述
在这里插入图片描述

2.部署

PaddleSeg提供的部署Demo代码在PaddleSeg/deploy/cpp目录下。
在这里插入图片描述
里面包括了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
    在这里插入图片描述
    根据自己的系统环境进行下载,下载完paddle_inference.tgz文件后,将其解压就可以了,不需要编译安装,里面是编译好的lib库。

2.2编译运行

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

  2. Dynamic Shape
    测试代码中的dynamic shape只是给了一个样例,如果要用dynamic shape运行deeplabv3模型是会报错的,会显示有些层dynamic shape没有设置。
    在这里插入图片描述
    需要对代码进行修改,对报错的层进行形状设置,这里以hardnet模型为例修改如下:
    在这里插入图片描述

  3. 运行推理

bash run_seg_gpu_trt_dynamic_shape.sh

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看