在新版本的PaddleX中,对于CPP的部署代码方式做了非常大的变化:
下面我们具体以Windows系统为例,基于PaddleX的这套CPP,说明一下如何实现工业化的部署(trt加速)
项目使用环境说明:
CUDA11.0 Cudnn 8.0
opencv版本3.4.6
PaddleInference release2.3版本 匹配cuda11.0的预测库
TensorRT 7.2.3
Cmake 3.5
VS2019 社区版
下载好PaddleX代码和PaddleInference预测库
下载Tensorrt,并设置系统环境变量 在本项目中使用的cuda版本是11.0,下载对应的trt版本
为了便于项目管理,将所有的文件汇总到一个文件夹中
用户可根据OpenCV的位置,自行配置系统环境变量
为了降低开发难度,在本示例中提供了修改好的预测代码、相关头文件、CmakeLists文件,用户自主替换后进行编译即可生成dll
替换model_infer.cpp预测代码:使用示例中dlldemo
文件夹中的model_infer.cpp
和CMakeLists.txt
文件,替换PaddleX/deploy/cpp/demo/
目录下的同名文件
替换相关头文件:使用示例中dlldemo
文件夹中的logger.h
、model_infer.h
、thread_pool.h
、timer.h
四个头文件放置于PaddleX/deploy/cpp/model_deploy/common/include/
目录下
使用Cmake进行编译,我们主要对PaddleX/deploy/cpp
中代码进行编译,并创建out
文件夹用来承接编译生成的内容
点击Configure进行选项
选择X64,并点击finish
点击Generate进行生成,此时生成失败,
用户在这里补充opencv tensorrt paddle预测库,cuda的lib库的路径,并且勾选WITH_GPU WITH_MKL WITH_TENSORRT 几项然后重新进行生成
最终在out文件夹中出现了.sln文件,则表示通过cmake生成成功了解决方案
打开sln文件,会发现在PaddleDeploy目录下生成了7个项目,其中关键的是
batch_infer
model_infer
multi_gpu_model_infer
tensorrt_infer
目前已经给出了C#项目,支持PaddleX PaddleClas PaddleDetection PaddleSeg的模型去预测,为了方便大家使用,提供了多线程、一键启动tensoRT等功能。
用户只需要下载好C#工程 csharp
运行.sln文件即可呈现如下文件形式:
用户选择Debug X64模式进行调式
此外需保证在C#项目的bin\x64\Debug
下包含以下dll,再进行预测推理
model_infer.dll
, 位于上边cmkae编译的目录下: PaddleX\deploy\cpp\out\paddle_deploy\Release
PaddleX\deploy\cpp\out\paddle_deploy
paddle2onnx.dll
、onnxruntime.dll
,位于paddle_inference\third_party\install\paddle2onnx
paddle_inference\third_party\install\onnxruntime
文件中OpenCvSharp.Extensions.dll
位于libs\opencvsharp453\NativeLib\x64
中,移动到bin
目录下即可如下全部dll所需文件
1.可加载PaddleSeg, PaddleClas, PaddleDetection以及PaddleX导出的部署模型, 分别对应模型选择中的: seg, clas, det, paddlex
2.目前也支持GPU下加载MaskRCNN进行实例分割可视化推理,需选择模型: mask
3.点击初始化模型,选择模型文件夹即可 —— 文件夹格式如下
4.支持一键启动TensorRT进行加速
5.支持多线程调用。
正常加载模型预测
多线程预测
开启TensorRT预测
图像识别流程
目标检测流程
语义分割流程
实例分割流程(MaskRCNN)
该流程在任何模型类型下都是成立的,只是det类型只对应目标检测流程,seg类型只对应语义分割流程, clas类型只对应图像识别流程, mask类型只对应实例分割流程(MaskRCNN)。 在paddlex类型下时,底层也是自动转为det、seg、clas类型进行实现的。