|
|
@@ -12,7 +12,8 @@ PaddleX-Deploy全面升级,支持飞桨视觉套件PaddleX、PaddleDetection
|
|
|
* [2 下载安装Manufacture SDK](#2)
|
|
|
* [3 Pipeline配置文件说明](#3)
|
|
|
* [4 Pipeline Node说明](#4)
|
|
|
-* [5 多模型串联的工业表计读数部署](#5)
|
|
|
+* [5 使用Pipeline部署](#5)
|
|
|
+* [6 多模型串联的工业表计读数部署](#6)
|
|
|
|
|
|
## <h2 id="1">1 Manufactue SDK简介</h2>
|
|
|
|
|
|
@@ -36,19 +37,28 @@ PaddleX Manufacture基于[PaddleX-Deploy](https://github.com/PaddlePaddle/Paddle
|
|
|
Manufature SDK的文件夹结构如下所示:
|
|
|
|
|
|
```
|
|
|
+PaddleXManufacture
|
|
|
+├── demo # 使用PaddleXManufacture的demo
|
|
|
+├── include # 存放PaddleXManufacture的头文件
|
|
|
+├── lib # 存放PaddleXManufacture的链接库
|
|
|
+├── share # 用于find_package
|
|
|
+├── third_party # 依赖的第三方库,paddle推理引擎、yaml-cpp、mkl等
|
|
|
+└── version.txt # 版本信息
|
|
|
```
|
|
|
|
|
|
+
|
|
|
+
|
|
|
### 下载安装Windows Manufacture SDK
|
|
|
|
|
|
-| 版本说明 | Manufacture SDK | 编译器 | 构建工具 | cuDNN | CUDA |
|
|
|
-| -- | -- | -- | -- | -- | -- |
|
|
|
-| | | | | | |
|
|
|
+| 版本说明 | Manufacture SDK | 编译器 | 构建工具 | cuDNN | CUDA | TensorRT |
|
|
|
+| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ------------ | ----- | ---- | -------- |
|
|
|
+| v1.0 | [PaddleXManufacture_win64_210_cuda102_cudnn76_trt70](ttps://bj.bcebos.com/paddlex/examples2/manufacture_sdk//PaddleXManufacture_win64_210_cuda102_cudnn76_trt70.zip) | gcc 8.2 | cmake+vs2019 | 7.6 | 10.2 | 7.0 |
|
|
|
|
|
|
### 下载安装Linux Manufacture SDK
|
|
|
|
|
|
-| 版本说明 | Manufacture SDK |
|
|
|
-| -- | -- |
|
|
|
-| | |
|
|
|
+| 版本说明 | Manufacture SDK | 编译器 | 构建工具 | cuDNN | CUDA | TensorRT |
|
|
|
+| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -------- | ----- | ---- | -------- |
|
|
|
+| v1.0 | [PaddleXManufacture_linux_paddle210_cuda102_cudnn8_trt72](https://bj.bcebos.com/paddlex/examples2/manufacture_sdk/PaddleXManufacture_linux_paddle210_cuda102_cudnn8_trt72.tar.gz) | gcc 8.2 | cmake | 8 | 10.2 | 7.2 |
|
|
|
|
|
|
## <h2 id="3">3 Pipeline配置文件说明</h2>
|
|
|
|
|
|
@@ -78,26 +88,87 @@ version: 1.0.0
|
|
|
|
|
|
从上面示例可以看出,Pipeline配置文件是一个存储字典的`yaml`文件,文件中**必须包含`pipeline_name`和`pipeline_nodes`两个关键字**。每个关键词和键值说明如下:
|
|
|
|
|
|
-| 关键字 | 键值 |
|
|
|
-| -- | -- |
|
|
|
-| pipeline_name | Pipeline的名称 |
|
|
|
-| pipeline_nodes | Pipeline的节点列表。列表中**必须包含输入节点(Source)和输出节点(Sink)**。**列表中每个节点还是一个字典,关键字是该节点的名字,键值用于定义节点类型(type)、节点初始化参数(init_params)、连接的下一个节点的名字(next),需要注意的是,每个节点的名字是独语无二的**。|
|
|
|
+| 关键字 | 键值 |
|
|
|
+| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
|
+| pipeline_name | Pipeline的名称 |
|
|
|
+| pipeline_nodes | Pipeline的节点列表。列表中**必须包含输入节点(Source)和输出节点(Sink)**。**列表中每个节点还是一个字典,关键字是该节点的名字,键值用于定义节点类型(type)、节点初始化参数(init_params)、连接的下一个节点的名字(next),需要注意的是,每个节点的名字是独语无二的**。 |
|
|
|
|
|
|
## <h2 id="4">4 Pipeline Node说明</h2>
|
|
|
|
|
|
目前支持的功能节点有:输入、图像解码、图像缩放、感兴趣区域提取、模型推理、检测框过滤、检测/分割结果可视化、输出。各功能节点的类型、初始化参数说明如下:
|
|
|
|
|
|
-| 功能类型 type | 功能作用 |初始化参数 init_params | 下一个节点 next | 上一个节点 |
|
|
|
-| -- | -- | -- | -- | -- |
|
|
|
-| Source | 接收Pipeline所需的输入数据 | 无 | `str/List(str)`: 可以是单个节点名字或多个节点名字组成的列表 | 无 |
|
|
|
-| Decode | 图像解码 | 无 | `str/List(str)`: 可以是单个节点名字或多个节点名字组成的列表 | 只能有一个 |
|
|
|
-| Resize | 图像大小缩放 | `width (int)`: 目标宽;<br>`height (int)`: 目标高;<br>`interp (int)`:差值类型,默认为`1`;| str/List(str): 可以是单个节点名字或多个节点名字组成的列表 | 只能有一个 |
|
|
|
-| Predict | PaddleX导出的分类/检测/分割模型预测 | `model_dir (str)`: PaddleX导出后的模型文件夹所在路径;<br>`use_gpu (bool)`: 是否使用GPU,默认为`false`;<br>`gpu_id (int)`:GPU卡号,在`use_gpu`为`true`时有效;<br>`use_trt (bool)`: 是否开启TensorRT加速GPU端预测 | `str/List(str)`: 可以是单个节点名字或多个节点名字组成的列表 | 只能有一个 |
|
|
|
-| FilterBbox | 过滤置信度低于阈值的检测框 | `score_thresh (float)`: 置信度阈值 | `str/List(str)`: 可以是单个节点名字或多个节点名字组成的列表 | 只能有一个 |
|
|
|
-| RoiCrop | 感兴趣区域提取 | 无 | `str/List(str)`: 可以是单个节点名字或多个节点名字组成的列表 | 必须有两个:能给出图像数据的节点、能给出检测模型预测结果的节点 |
|
|
|
-| Visualize | 目标检测/实例分割/语义分割模型预测结果可视化 | `save_dir (str)`: 存储可视化结果的文件夹路径 | 无 (可视化结果只能本地保存) | 必须有两个:能给出图像数据的节点、能给目标检测/实例分割/语义分割模型预测结果的节点 |
|
|
|
-| Sink | 获取Pipeline的输出数据 | 无 | 无 | 只能有一个 |
|
|
|
+| 功能类型 type | 功能作用 | 初始化参数 init_params | 下一个节点 next | 上一个节点 |
|
|
|
+| ------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------- |
|
|
|
+| Source | 接收Pipeline所需的输入数据 | 无 | `str/List(str)`: 可以是单个节点名字或多个节点名字组成的列表 | 无 |
|
|
|
+| Decode | 图像解码 | 无 | `str/List(str)`: 可以是单个节点名字或多个节点名字组成的列表 | 只能有一个 |
|
|
|
+| Resize | 图像大小缩放 | `width (int)`: 目标宽;<br>`height (int)`: 目标高;<br>`interp (int)`:差值类型,默认为`1`; | str/List(str): 可以是单个节点名字或多个节点名字组成的列表 | 只能有一个 |
|
|
|
+| Predict | PaddleX导出的分类/检测/分割模型预测 | `model_dir (str)`: PaddleX导出后的模型文件夹所在路径;<br>`use_gpu (bool)`: 是否使用GPU,默认为`false`;<br>`gpu_id (int)`:GPU卡号,在`use_gpu`为`true`时有效;<br>`use_trt (bool)`: 是否开启TensorRT加速GPU端预测 | `str/List(str)`: 可以是单个节点名字或多个节点名字组成的列表 | 只能有一个 |
|
|
|
+| FilterBbox | 过滤置信度低于阈值的检测框 | `score_thresh (float)`: 置信度阈值 | `str/List(str)`: 可以是单个节点名字或多个节点名字组成的列表 | 只能有一个 |
|
|
|
+| RoiCrop | 感兴趣区域提取 | 无 | `str/List(str)`: 可以是单个节点名字或多个节点名字组成的列表 | 必须有两个:能给出图像数据的节点、能给出检测模型预测结果的节点 |
|
|
|
+| Visualize | 目标检测/实例分割/语义分割模型预测结果可视化 | `save_dir (str)`: 存储可视化结果的文件夹路径 | 无 (可视化结果只能本地保存) | 必须有两个:能给出图像数据的节点、能给目标检测/实例分割/语义分割模型预测结果的节点 |
|
|
|
+| Sink | 获取Pipeline的输出数据 | 无 | 无 | 只能有一个 |
|
|
|
|
|
|
**注意:上一个节点不需要在Pipeline配置文件中指定,只需要指定下一个节点即可,实际运行时程序解析连接至上一个节点**。
|
|
|
|
|
|
-## <h2 id="5">多模型串联的工业表计读数部署</h2>
|
|
|
+## <h2 id="5">使用Pipeline部署</h2>
|
|
|
+
|
|
|
+我们在SDK下载包里放置了demo目录,下面以该demo为例讲解如何使用Pipeline部署。
|
|
|
+
|
|
|
+一. 代码调用 —— 只需关注这几个接口: 初始化、设置输入、推理运行、获取输出 (demo/pipeline_infer.cpp)
|
|
|
+```c++
|
|
|
+#include "pipeline/include/pipeline.h" // Pipline 入口头文件
|
|
|
+
|
|
|
+std::vector<std::string> image_paths = {image_path}; // 输入图片地址
|
|
|
+PaddleXPipeline::Pipeline pipeline; // 创建Pipeline实例
|
|
|
+pipeline.Init(pipeline_cfg); // 初始化Pipeline, pipeline_cfg为上文所说的Pipeline配置文件
|
|
|
+pipeline.SetInput("src0", image_paths); // 设置输入, src0为上文配置文件中的输入节点名
|
|
|
+pipeline.Run(); // 推理接口
|
|
|
+std::vector<PaddleDeploy::Result> results; // 初始化结果
|
|
|
+pipeline.GetOutput("sink0", &results); // 获取结果并存入参数results中, sink0为配置中的输出节点
|
|
|
+std::cout << results[0] << std::endl; // 打印结果
|
|
|
+```
|
|
|
+
|
|
|
+二. 如何编写CMakeLists.txt —— 使用find_package轻松搞定 (demo/CMakeLists.txt)
|
|
|
+
|
|
|
+```cmake
|
|
|
+# PADDLEX_DIR 为下载并解压的Manufacture SDK的目录
|
|
|
+find_package(PaddleXManufacture REQUIRED PATHS ${PADDLEX_DIR}/share NO_DEFAULT_PATH)
|
|
|
+include_directories(${PaddleXManufacture_INCLUDE_DIRS})
|
|
|
+set(DEPS ${DEPS} ${PaddleXManufacture_LIBS})
|
|
|
+```
|
|
|
+
|
|
|
+SDK的预处理中使用了OpenCV, 所以需要额外下载链接:
|
|
|
+
|
|
|
+ [windows环境OpenCV下载地址](https://bj.bcebos.com/paddleseg/deploy/opencv-3.4.6-vc14_vc15.exe)
|
|
|
+
|
|
|
+ [ubuntu 16.0环境OpenCV下载地址](https://bj.bcebos.com/paddleseg/deploy/opencv3.4.6gcc4.8ffmpeg.tar.gz2)
|
|
|
+
|
|
|
+使用GPU、TensorRT版,需要额外链接CUDA、cuDNN 和TensorRT。本地安装链接的CUDA、cuDNN、TensorRT的版本一定要跟SDK编译时所使用的版本一致。
|
|
|
+
|
|
|
+具体可参考SDK下载包中的demo/CMakeLists.txt
|
|
|
+
|
|
|
+三.编译运行
|
|
|
+
|
|
|
+windows编译可以看[表计读数案例](https://github.com/PaddlePaddle/PaddleX/tree/develop/dygraph/examples/meter_reader#8)
|
|
|
+
|
|
|
+linux上需要修改CMakeLists.txt 各个库位置,然后执行一下几行命令:
|
|
|
+
|
|
|
+```shell
|
|
|
+mkdir -p build
|
|
|
+cd build
|
|
|
+cmkae ..
|
|
|
+make
|
|
|
+```
|
|
|
+
|
|
|
+编译后会在build目录生成 pipeline_infer.exe 或 pipeline_infer 可执行文件, 运行命令:
|
|
|
+
|
|
|
+```
|
|
|
+# pipeline_cfg 填pipeline配置文件路径
|
|
|
+# image 填图片路径
|
|
|
+pipeline_infer --pipeline_cfg /path/pipeline.yaml --image /path/image.png
|
|
|
+```
|
|
|
+
|
|
|
+
|
|
|
+## <h2 id="6">多模型串联的工业表计读数部署</h2>
|
|
|
+
|
|
|
+多模型串联可以看我们的[表计读数案例](https://github.com/PaddlePaddle/PaddleX/tree/develop/dygraph/examples/meter_reader#8), 里边有详细的部署介绍。
|