模型训练完后,往往在实际应用过程中对实时性都有一定的要求,而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环境安装
系统环境
ubuntu1804,cuda11.1,nvidia-470, Docker-19.03.0tensorrt安装
在docker镜像中安装TensorRT-7.2.1.6,这个需要自己去官网下载,这里不详细介绍了。paddle-inference安装
进入paddlepaddle的官网进行下载:https://www.paddlepaddle.org.cn/inference/user_guides/download_lib.html
根据自己的系统环境进行下载,下载完paddle_inference.tgz文件后,将其解压就可以了,不需要编译安装,里面是编译好的lib库。
2.2编译运行
编译
首先需要修改编译脚本run_seg_gpu_trt_dynamic_shape.sh
里面的tensorrt和paddle_inference的路径。
还有需要去掉文件中的编译选项–dynamic_shape_path,这个没有用到,也没有这个文件,不去掉会编译报下面的错。
在编译的过程中可能还会有一些错误,可参考下面文章里面讲的比较清楚。https://gitee.com/paddlepaddle/Serving/blob/develop/doc/FAQ_CN.mdDynamic Shape
测试代码中的dynamic shape只是给了一个样例,如果要用dynamic shape运行deeplabv3模型是会报错的,会显示有些层dynamic shape没有设置。
需要对代码进行修改,对报错的层进行形状设置,这里以hardnet模型为例修改如下:
运行推理
bash run_seg_gpu_trt_dynamic_shape.sh