README.md 5.2 KB
Newer Older
W
wuzewu 已提交
1 2 3 4 5 6
# PaddleSeg C++预测部署方案

## 说明

本目录提供一个跨平台的图像分割模型的C++预测部署方案,用户通过一定的配置,加上少量的代码,即可把模型集成到自己的服务中,完成图像分割的任务。

B
Bin Long 已提交
7 8
主要设计的目标包括以下四点:
- 跨平台,支持在 windows 和 Linux 完成编译、开发和部署
W
wuzewu 已提交
9 10
- 支持主流图像分割任务,用户通过少量配置即可加载模型完成常见预测任务,比如人像分割等
- 可扩展性,支持用户针对新模型开发自己特殊的数据预处理、后处理等逻辑
B
Bin Long 已提交
11
- 高性能,除了`PaddlePaddle`自身带来的性能优势,我们还针对图像分割的特点对关键步骤进行了性能优化
W
wuzewu 已提交
12 13 14 15 16


## 主要目录和文件

```
B
Bin Long 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
inference
├── demo.cpp # 演示加载模型、读入数据、完成预测任务C++代码
|
├── conf
│   └── humanseg.yaml # 示例人像分割模型配置
├── images
│   └── humanseg # 示例人像分割模型测试图片目录
├── tools
│   └── visualize.py # 示例人像分割模型结果可视化脚本
├── docs
|   ├── linux_build.md # Linux 编译指南
|   ├── windows_vs2015_build.md # windows VS2015编译指南
│   └── windows_vs2019_build.md # Windows VS2019编译指南
|
├── utils # 一些基础公共函数
|
├── preprocess # 数据预处理相关代码
|
├── predictor # 模型加载和预测相关代码
|
├── CMakeList.txt # cmake编译入口文件
|
└── external-cmake # 依赖的外部项目cmake(目前仅有yaml-cpp)
W
wuzewu 已提交
40

B
Bin Long 已提交
41
```
W
wuzewu 已提交
42

B
Bin Long 已提交
43 44 45 46 47
## 编译
支持在`Windows``Linux`平台编译和使用:
- [Linux 编译指南](./docs/linux_build.md)
- [Windows 使用 Visual Studio 2019 Community 编译指南](./docs/windows_vs2019_build.md)
- [Windows 使用 Visual Studio 2015 编译指南](./docs/windows_vs2015_build.md)
W
wuzewu 已提交
48

B
Bin Long 已提交
49
`Windows`上推荐使用最新的`Visual Studio 2019 Community`直接编译`CMake`项目。
W
wuzewu 已提交
50

B
Bin Long 已提交
51
## 预测并可视化结果
W
wuzewu 已提交
52

B
Bin Long 已提交
53
完成编译后,便生成了需要的可执行文件和链接库,然后执行以下步骤:
W
wuzewu 已提交
54

B
Bin Long 已提交
55 56
### 1. 下载模型文件
我们提供了一个人像分割模型示例用于测试,点击右侧地址下载:[示例模型下载地址](https://paddleseg.bj.bcebos.com/inference_model/deeplabv3p_xception65_humanseg.tgz)
W
wuzewu 已提交
57

B
Bin Long 已提交
58
下载并解压,解压后目录结构如下:
W
wuzewu 已提交
59
```
B
Bin Long 已提交
60 61 62 63
deeplabv3p_xception65_humanseg
├── __model__ # 模型文件
|
└── __params__ # 参数文件
W
wuzewu 已提交
64
```
B
Bin Long 已提交
65 66 67 68 69 70 71 72
解压后把上述目录拷贝到合适的路径:

**假设**`Windows`系统上,我们模型和参数文件所在路径为`D:\projects\models\deeplabv3p_xception65_humanseg`

**假设**`Linux`上对应的路径则为`/root/projects/models/deeplabv3p_xception65_humanseg`


### 2. 修改配置
B
Bin Long 已提交
73

B
Bin Long 已提交
74
基于`PaddleSeg`训练的模型导出时,会自动生成对应的预测模型配置文件,请参考文档:[模型导出](../docs/model_export.md)
B
Bin Long 已提交
75 76 77

`inference`源代码(即本目录)的`conf`目录下提供了示例人像分割模型的配置文件`humanseg.yaml`, 相关的字段含义和说明如下:

B
Bin Long 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90
```yaml
DEPLOY:
    # 是否使用GPU预测
    USE_GPU: 1
    # 模型和参数文件所在目录路径
    MODEL_PATH: "/root/projects/models/deeplabv3p_xception65_humanseg"
    # 模型文件名
    MODEL_FILENAME: "__model__"
    # 参数文件名
    PARAMS_FILENAME: "__params__"
    # 预测图片的的标准输入尺寸,输入尺寸不一致会做resize
    EVAL_CROP_SIZE: (513, 513)
    # 均值
B
Bin Long 已提交
91
    MEAN: [0.40787450980392154, 0.4575254901960784, 0.481078431372549]
B
Bin Long 已提交
92 93 94 95 96 97 98 99 100 101 102 103 104 105
    # 方差
    STD: [1.0, 1.0, 1.0]
    # 图片类型, rgb 或者 rgba
    IMAGE_TYPE: "rgb"
    # 分类类型数
    NUM_CLASSES: 2
    # 图片通道数
    CHANNELS : 3
    # 预处理方式,目前提供图像分割的通用处理类SegPreProcessor
    PRE_PROCESSOR: "SegPreProcessor"
    # 预测模式,支持 NATIVE 和 ANALYSIS
    PREDICTOR_MODE: "ANALYSIS"
    # 每次预测的 batch_size
    BATCH_SIZE : 3
W
wuzewu 已提交
106
```
B
Bin Long 已提交
107
修改字段`MODEL_PATH`的值为你在**上一步**下载并解压的模型文件所放置的目录即可。
W
wuzewu 已提交
108

B
Bin Long 已提交
109
### 3. 执行预测
W
wuzewu 已提交
110

B
Bin Long 已提交
111
在终端中切换到生成的可执行文件所在目录为当前目录(Windows系统为`cmd`)。
W
wuzewu 已提交
112

B
Bin Long 已提交
113 114 115
`Linux` 系统中执行以下命令:
```shell
./demo --conf=/root/projects/PaddleSeg/inference/conf/humanseg.yaml --input_dir=/root/projects/PaddleSeg/inference/images/humanseg/
W
wuzewu 已提交
116
```
B
Bin Long 已提交
117 118 119
`Windows` 中执行以下命令:
```shell
D:\projects\PaddleSeg\inference\build\Release>demo.exe --conf=D:\\projects\\PaddleSeg\\inference\\conf\\humanseg.yaml --input_dir=D:\\projects\\PaddleSeg\\inference\\images\humanseg\\
W
wuzewu 已提交
120 121
```

B
Bin Long 已提交
122

W
wuzewu 已提交
123 124 125 126
预测使用的两个命令参数说明如下:

| 参数 | 含义 |
|-------|----------|
B
Bin Long 已提交
127
| conf | 模型配置的Yaml文件路径 |
W
wuzewu 已提交
128 129 130
| input_dir | 需要预测的图片目录 |


B
Bin Long 已提交
131
配置文件说明请参考上一步,样例程序会扫描input_dir目录下的所有图片,并生成对应的预测结果图片:
W
wuzewu 已提交
132

B
Bin Long 已提交
133
文件`demo.jpg`预测的结果存储在`demo_jpg.png`中,可视化结果在`demo_jpg_scoremap.png`中, 原始尺寸的预测结果在`demo_jpg_recover.png`中。
W
wuzewu 已提交
134 135

输入原图  
B
Bin Long 已提交
136
![avatar](images/humanseg/demo2.jpeg)
W
wuzewu 已提交
137 138

输出预测结果   
B
Bin Long 已提交
139
![avatar](images/humanseg/demo2_jpeg_recover.png)