README.md 5.1 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 74 75 76 77

基于`PaddleSeg`训练的模型导出时,会自动生成对应的预测模型配置文件,请参考文档:[模型导出](../docs/export_model.md)

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

B
Bin Long 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
```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)
    # 均值
    MEAN: [104.008, 116.669, 122.675]
    # 方差
    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)