heliqi 4 éve
szülő
commit
ac922698a2
1 módosított fájl, 93 hozzáadás és 22 törlés
  1. 93 22
      dygraph/deploy/cpp/docs/manufacture_sdk/README.md

+ 93 - 22
dygraph/deploy/cpp/docs/manufacture_sdk/README.md

@@ -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), 里边有详细的部署介绍。