Skip to content

Commit 33da06e

Browse files
authored
Merge pull request #62 from joey12300/release/v0.1.0
update linux_build.md and CMakeLists.txt
2 parents f038529 + 0b3b5dd commit 33da06e

File tree

12 files changed

+165
-87
lines changed

12 files changed

+165
-87
lines changed

inference/CMakeLists.txt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ link_directories("${CMAKE_CURRENT_BINARY_DIR}/ext/yaml-cpp/lib")
6969
link_directories("${CMAKE_CURRENT_BINARY_DIR}")
7070
if (WIN32)
7171
include_directories("${PADDLE_DIR}/paddle/fluid/inference")
72+
include_directories("${PADDLE_DIR}/paddle/include")
7273
link_directories("${PADDLE_DIR}/paddle/fluid/inference")
7374
include_directories("${OPENCV_DIR}/build/include")
7475
include_directories("${OPENCV_DIR}/opencv/build/include")
@@ -133,6 +134,7 @@ if(WITH_MKL)
133134
else ()
134135
set(MATH_LIB ${PADDLE_DIR}/third_party/install/mklml/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX}
135136
${PADDLE_DIR}/third_party/install/mklml/lib/libiomp5${CMAKE_SHARED_LIBRARY_SUFFIX})
137+
execute_process(COMMAND cp -r ${PADDLE_DIR}/third_party/install/mklml/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX} /usr/lib)
136138
endif ()
137139
set(MKLDNN_PATH "${PADDLE_DIR}/third_party/install/mkldnn")
138140
if(EXISTS ${MKLDNN_PATH})
@@ -147,22 +149,22 @@ else()
147149
set(MATH_LIB ${PADDLE_DIR}/third_party/install/openblas/lib/libopenblas${CMAKE_STATIC_LIBRARY_SUFFIX})
148150
endif()
149151

152+
if (WIN32)
153+
if(EXISTS "${PADDLE_DIR}/paddle/fluid/inference/libpaddle_fluid${CMAKE_STATIC_LIBRARY_SUFFIX}")
154+
set(DEPS
155+
${PADDLE_DIR}/paddle/fluid/inference/libpaddle_fluid${CMAKE_STATIC_LIBRARY_SUFFIX})
156+
else()
157+
set(DEPS
158+
${PADDLE_DIR}/paddle/lib/libpaddle_fluid${CMAKE_STATIC_LIBRARY_SUFFIX})
159+
endif()
160+
endif()
161+
150162
if(WITH_STATIC_LIB)
151-
if (WIN32)
152-
set(DEPS
153-
${PADDLE_DIR}/paddle/fluid/inference/libpaddle_fluid${CMAKE_STATIC_LIBRARY_SUFFIX})
154-
else ()
155163
set(DEPS
156164
${PADDLE_DIR}/paddle/lib/libpaddle_fluid${CMAKE_STATIC_LIBRARY_SUFFIX})
157-
endif()
158165
else()
159-
if (WIN32)
160-
set(DEPS
161-
${PADDLE_DIR}/paddle/fluid/inference/libpaddle_fluid${CMAKE_STATIC_LIBRARY_SUFFIX})
162-
else ()
163166
set(DEPS
164167
${PADDLE_DIR}/paddle/lib/libpaddle_fluid${CMAKE_SHARED_LIBRARY_SUFFIX})
165-
endif()
166168
endif()
167169

168170
if (NOT WIN32)
@@ -237,6 +239,8 @@ if (WIN32)
237239
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_DIR}/third_party/install/mkldnn/lib/mkldnn.dll ./mkldnn.dll
238240
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_DIR}/third_party/install/mklml/lib/mklml.dll ./release/mklml.dll
239241
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_DIR}/third_party/install/mklml/lib/libiomp5md.dll ./release/libiomp5md.dll
240-
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_DIR}/third_party/install/mkldnn/lib/mkldnn.dll ./mkldnn.dll
242+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PADDLE_DIR}/third_party/install/mkldnn/lib/mkldnn.dll ./release/mkldnn.dll
241243
)
242244
endif()
245+
246+
execute_process(COMMAND cp -r ${CMAKE_SOURCE_DIR}/images ${CMAKE_SOURCE_DIR}/conf ${CMAKE_CURRENT_BINARY_DIR})

inference/README.md

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
# PaddleSeg C++预测部署方案
22

3-
## 说明
3+
4+
[1.说明](#1说明)
5+
6+
[2.主要目录和文件](#2主要目录和文件)
7+
8+
[3.编译](#3编译)
9+
10+
[4.预测并可视化结果](#4预测并可视化结果)
11+
12+
## 1.说明
413

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

@@ -11,7 +20,7 @@
1120
- 高性能,除了`PaddlePaddle`自身带来的性能优势,我们还针对图像分割的特点对关键步骤进行了性能优化
1221

1322

14-
## 主要目录和文件
23+
## 2.主要目录和文件
1524

1625
```
1726
inference
@@ -22,7 +31,7 @@ inference
2231
├── images
2332
│ └── humanseg # 示例人像分割模型测试图片目录
2433
├── tools
25-
│ └── visualize.py # 示例人像分割模型结果可视化脚本
34+
│ └── visualize.py # 示例分割模型结果可视化脚本
2635
├── docs
2736
| ├── linux_build.md # Linux 编译指南
2837
| ├── windows_vs2015_build.md # windows VS2015编译指南
@@ -40,19 +49,19 @@ inference
4049
4150
```
4251

43-
## 编译
52+
## 3.编译
4453
支持在`Windows``Linux`平台编译和使用:
4554
- [Linux 编译指南](./docs/linux_build.md)
4655
- [Windows 使用 Visual Studio 2019 Community 编译指南](./docs/windows_vs2019_build.md)
4756
- [Windows 使用 Visual Studio 2015 编译指南](./docs/windows_vs2015_build.md)
4857

4958
`Windows`上推荐使用最新的`Visual Studio 2019 Community`直接编译`CMake`项目。
5059

51-
## 预测并可视化结果
60+
## 4.预测并可视化结果
5261

5362
完成编译后,便生成了需要的可执行文件和链接库,然后执行以下步骤:
5463

55-
### 1. 下载模型文件
64+
### 4.1. 下载模型文件
5665
我们提供了一个人像分割模型示例用于测试,点击右侧地址下载:[示例模型下载地址](https://paddleseg.bj.bcebos.com/inference_model/deeplabv3p_xception65_humanseg.tgz)
5766

5867
下载并解压,解压后目录结构如下:
@@ -69,7 +78,7 @@ deeplabv3p_xception65_humanseg
6978
**假设**`Linux`上对应的路径则为`/root/projects/models/deeplabv3p_xception65_humanseg`
7079

7180

72-
### 2. 修改配置
81+
### 4.2. 修改配置
7382

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

@@ -90,7 +99,7 @@ DEPLOY:
9099
# 均值
91100
MEAN: [0.40787450980392154, 0.4575254901960784, 0.481078431372549]
92101
# 方差
93-
STD: [1.0, 1.0, 1.0]
102+
STD: [0.00392156862745098, 0.00392156862745098, 0.00392156862745098]
94103
# 图片类型, rgb 或者 rgba
95104
IMAGE_TYPE: "rgb"
96105
# 分类类型数
@@ -106,7 +115,9 @@ DEPLOY:
106115
```
107116
修改字段`MODEL_PATH`的值为你在**上一步**下载并解压的模型文件所放置的目录即可。
108117

109-
### 3. 执行预测
118+
**注意**在使用CPU版本预测库时,`USE_GPU`的值必须设为0,否则无法正常预测。
119+
120+
### 4.3. 执行预测
110121

111122
在终端中切换到生成的可执行文件所在目录为当前目录(Windows系统为`cmd`)。
112123

@@ -128,9 +139,7 @@ D:\projects\PaddleSeg\inference\build\Release>demo.exe --conf=D:\\projects\\Padd
128139
| input_dir | 需要预测的图片目录 |
129140

130141

131-
配置文件说明请参考上一步,样例程序会扫描input_dir目录下的所有图片,并生成对应的预测结果图片:
132-
133-
文件`demo.jpg`预测的结果存储在`demo_jpg.png`中,可视化结果在`demo_jpg_scoremap.png`中, 原始尺寸的预测结果在`demo_jpg_recover.png`中。
142+
配置文件说明请参考上一步,样例程序会扫描input_dir目录下的所有以**jpg或jpeg**为后缀的图片,并生成对应的预测结果(若input_dir目录下没有以**jpg或jpeg**为后缀的图片,程序会报错)。图像分割会对`demo.jpg`的每个像素进行分类,其预测的结果保存在`demo_jpg.png`中。分割预测结果的图不能直接看到效果,必须经过可视化处理。对于二分类的图像分割模型,样例程序自动将预测结果转换成可视化结果,保存在`demo_jpg_scoremap.png`中, 原始尺寸的预测结果在`demo_jpg_recover.png`中,如下图。对于**多分类**的图像分割模型,请参考[可视化脚本使用方法](./docs/vis.md)。
134143

135144
输入原图
136145
![avatar](images/humanseg/demo2.jpeg)

inference/docs/demo.jpg

2.16 MB
Loading

inference/docs/demo_jpg.png

23.3 KB
Loading

inference/docs/linux_build.md

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# Linux平台 编译指南
22

33
## 说明
4-
本文档在 `Linux`平台使用`GCC 4.8.5``GCC 4.9.4`测试过,如果需要使用更高G++版本编译使用,则需要重新编译Paddle预测库,请参考: [从源码编译Paddle预测库](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_usage/deploy/inference/build_and_install_lib_cn.html#id15)
4+
本文档在 `Linux`平台使用`GCC 4.8.5``GCC 4.9.4`测试过,如果需要使用更高版本的GCC编译使用,则需要重新编译PaddlePaddle预测库,请参考: [从源码编译Paddle预测库](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_usage/deploy/inference/build_and_install_lib_cn.html#id15)
55

66
## 前置条件
77
* G++ 4.8.2 ~ 4.9.4
8-
* CUDA 8.0/ CUDA 9.0
98
* CMake 3.0+
9+
* CUDA 8.0 / CUDA 9.0 / CUDA 10.0, cudnn 7+ (仅在使用GPU版本的预测库时需要)
1010

1111
请确保系统已经安装好上述基本软件,**下面所有示例以工作目录为 `/root/projects/`演示**
1212

@@ -20,7 +20,17 @@
2020

2121
### Step2: 下载PaddlePaddle C++ 预测库 fluid_inference
2222

23-
目前仅支持`CUDA 8``CUDA 9`,请点击 [PaddlePaddle预测库下载地址](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_usage/deploy/inference/build_and_install_lib_cn.html)下载对应的版本。
23+
PaddlePaddle C++ 预测库主要分为CPU版本和GPU版本。其中,针对不同的CUDA版本,GPU版本预测库又分为三个版本预测库:CUDA 8、CUDA 9和CUDA 10版本预测库。以下为各版本C++预测库的下载链接:
24+
25+
| 版本 | 链接 |
26+
| ---- | ---- |
27+
| CPU版本 | [fluid_inference.tgz](https://paddle-inference-lib.bj.bcebos.com/latest-cpu-avx-mkl/fluid_inference.tgz) |
28+
| CUDA 8版本 | [fluid_inference.tgz](https://paddle-inference-lib.bj.bcebos.com/latest-gpu-cuda8-cudnn7-avx-mkl/fluid_inference.tgz) |
29+
| CUDA 9版本 | [fluid_inference.tgz](https://paddle-inference-lib.bj.bcebos.com/latest-gpu-cuda9-cudnn7-avx-mkl/fluid_inference.tgz) |
30+
| CUDA 10版本 | [fluid_inference.tgz](https://paddle-inference-lib.bj.bcebos.com/latest-gpu-cuda10-cudnn7-avx-mkl/fluid_inference.tgz) |
31+
32+
33+
针对不同的CPU类型、不同的指令集,官方提供更多可用的预测库版本,目前已经推出1.6版本的预测库,具体请参考以下链接:[C++预测库下载列表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_usage/deploy/inference/build_and_install_lib_cn.html)
2434

2535

2636
下载并解压后`/root/projects/fluid_inference`目录包含内容为:
@@ -44,7 +54,7 @@ wget -c https://paddleseg.bj.bcebos.com/inference/opencv-3.4.6.zip
4454
unzip opencv-3.4.6.zip && cd opencv-3.4.6
4555
# 3. 创建build目录并编译, 这里安装到/usr/local/opencv3目录
4656
mkdir build && cd build
47-
cmake .. -DCMAKE_INSTALL_PREFIX=/root/projects/opencv3 -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DWITH_ZLIB=ON -DBUILD_ZLIB=ON -DWITH_JPEG=ON -DBUILD_JPEG=ON -DWITH_PNG=ON -DBUILD_PNG=ON -DWITH_TIFF=ON -DBUILD_TIFF=ON
57+
cmake .. -DCMAKE_INSTALL_PREFIX=/root/projects/opencv3 -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DWITH_IPP=OFF -DBUILD_IPP_IW=OFF -DWITH_LAPACK=OFF -DWITH_EIGEN=OFF -DCMAKE_INSTALL_LIBDIR=lib64 -DWITH_ZLIB=ON -DBUILD_ZLIB=ON -DWITH_JPEG=ON -DBUILD_JPEG=ON -DWITH_PNG=ON -DBUILD_PNG=ON -DWITH_TIFF=ON -DBUILD_TIFF=ON
4858
make -j4
4959
make install
5060
```
@@ -53,24 +63,31 @@ make install
5363

5464
### Step4: 编译
5565

56-
`CMake`编译时,涉及到四个编译参数用于指定核心依赖库的路径, 他们的定义如下:
66+
`CMake`编译时,涉及到四个编译参数用于指定核心依赖库的路径, 他们的定义如下:(带*表示仅在使用**GPU版本**预测库时指定)
5767

5868
| 参数名 | 含义 |
5969
| ---- | ---- |
60-
| CUDA_LIB | cuda的库路径 |
61-
| CUDNN_LIB | cuDnn的库路径|
62-
| OPENCV_DIR | OpenCV的安装路径 |
70+
| * CUDA_LIB | CUDA的库路径 |
71+
| * CUDNN_LIB | cudnn的库路径|
72+
| OPENCV_DIR | OpenCV的安装路径 |
6373
| PADDLE_DIR | Paddle预测库的路径 |
6474

65-
执行下列操作时,**注意**把对应的参数改为你的上述依赖库实际路径:
75+
在使用**GPU版本**预测库进行编译时,可执行下列操作。**注意**把对应的参数改为你的上述依赖库实际路径:
6676

6777
```shell
6878
cd /root/projects/PaddleSeg/inference
6979
mkdir build && cd build
70-
cmake .. -DWITH_GPU=ON -DPADDLE_DIR=/root/projects/fluid_inference -DCUDA_LIB=/usr/local/cuda/lib64/ -DOPENCV_DIR=/root/projects/opencv3/ -DCUDNN_LIB=/usr/local/cuda/lib64/
80+
cmake .. -DWITH_GPU=ON -DPADDLE_DIR=/root/projects/fluid_inference -DCUDA_LIB=/usr/local/cuda/lib64/ -DOPENCV_DIR=/root/projects/opencv3/ -DCUDNN_LIB=/usr/local/cuda/lib64/ -DWITH_STATIC_LIB=OFF
7181
make
7282
```
7383

84+
在使用**CPU版本**预测库进行编译时,可执行下列操作。
85+
```shell
86+
cd /root/projects/PaddleSeg/inference
87+
mkdir build && cd build
88+
cmake .. -DWITH_GPU=OFF -DPADDLE_DIR=/root/projects/fluid_inference -DOPENCV_DIR=/root/projects/opencv3/ -DWITH_STATIC_LIB=OFF
89+
make
90+
```
7491

7592
### Step5: 预测及可视化
7693

@@ -80,6 +97,4 @@ make
8097
./demo --conf=/path/to/your/conf --input_dir=/path/to/your/input/data/directory
8198
```
8299

83-
更详细说明请参考ReadMe文档: [预测和可视化部分](../README.md)
84-
85-
100+
更详细说明请参考README文档: [预测和可视化部分](../README.md)

inference/docs/vis.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# 图像分割结果可视化说明
2+
3+
本文档介绍如何使用可视化脚本对图像分割结果进行可视化处理。**注意:可视化脚本处理仅针对PaddleSeg C++预测部署方案生成的预测结果。**
4+
5+
## 说明
6+
图像分割模型会对预测的图像的每个像素进行分类,所以图像分割模型的预测结果是图像里每个像素的标签,我们将预测结果以图片格式保存。例如预测图片`demo.jpg`,其预测的结果以图片格式保存在`demo_jpg.png`中。保存分割预测结果的图片并不能直接看到效果(一张全黑的图),必须经过可视化处理。以下为使用方法。
7+
8+
```bash
9+
# 假设当前路径为PaddleSeg根目录
10+
# 切换到脚本所在目录
11+
cd inference/tools/
12+
# 拷贝保存分割预测结果的图片到本目录
13+
cp XXX/demo_jpg.png .
14+
# 运行可视化脚本
15+
python visualize.py demo.jpg demo_jpg.png vis_result.png
16+
```
17+
18+
以下为上述运行可视化脚本例子中每个参数的含义,请根据测试机器中图片的**实际路径**修改对应参数。
19+
20+
| 参数 | 含义 |
21+
|-------|----------|
22+
| demo.jpg | 原图路径 |
23+
| demo_jpg.png | 保存预测结果的图片的路径 |
24+
| vis_result.png| 可视化后的效果图路径|
25+
26+
27+
**可视化结果展示:**
28+
29+
以下以cityscape模型的预测结果进行展示。
30+
31+
原图(`demo.jpg`):
32+
![avatar](demo.jpg)
33+
34+
预测结果图(`demo_jpg.png`, 仅用来保存预测的结果,需经过可视化处理):
35+
![avatar](demo_jpg.png)
36+
37+
效果图(`vis_result.png`):
38+
![avatar](vis_result.png)
39+

inference/docs/vis_result.png

50.5 KB
Loading

inference/docs/windows_vs2015_build.md

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
## 前置条件
77
* Visual Studio 2015
8-
* CUDA 8.0/ CUDA 9.0
8+
* CUDA 8.0/ CUDA 9.0/ CUDA 10.0,cudnn 7+ (仅在使用GPU版本的预测库时需要)
99
* CMake 3.0+
1010

1111
请确保系统已经安装好上述基本软件,**下面所有示例以工作目录为 `D:\projects`演示**
@@ -20,12 +20,14 @@
2020

2121
### Step2: 下载PaddlePaddle C++ 预测库 fluid_inference
2222

23-
根据Windows环境,下载相应版本的PaddlePaddle预测库,并解压到`D:\projects\`目录
23+
PaddlePaddle C++ 预测库主要分为两大版本:CPU版本和GPU版本。其中,针对不同的CUDA版本,GPU版本预测库又分为三个版本预测库:CUDA 8、CUDA 9和CUDA 10版本预测库。根据Windows环境,下载相应版本的PaddlePaddle预测库,并解压到`D:\projects\`目录。以下为各版本C++预测库(CUDA 8版本基于1.5版本的预测库,其余均基于1.6版本的预测库)的下载链接:
2424

25-
| CUDA | GPU | 下载地址 |
26-
|------|------|--------|
27-
| 8.0 | Yes | [fluid_inference.zip](https://bj.bcebos.com/v1/paddleseg/fluid_inference_win.zip) |
28-
| 9.0 | Yes | [fluid_inference_cuda90.zip](https://paddleseg.bj.bcebos.com/fluid_inference_cuda9_cudnn7.zip) |
25+
| 版本 | 链接 |
26+
| ---- | ---- |
27+
| CPU版本 | [fluid_inference_install_dir.zip](https://paddle-wheel.bj.bcebos.com/1.6.0/win-infer/mkl/cpu/fluid_inference_install_dir.zip) |
28+
| CUDA 8版本 | [fluid_inference_install_dir.zip](https://paddle-inference-lib.bj.bcebos.com/1.5.1-win/gpu_mkl_avx_8.0/fluid_inference_install_dir.zip) |
29+
| CUDA 9版本 | [fluid_inference_install_dir.zip](https://paddle-wheel.bj.bcebos.com/1.6.0/win-infer/mkl/post97/fluid_inference_install_dir.zip) |
30+
| CUDA 10版本 | [fluid_inference_install_dir.zip](https://paddle-wheel.bj.bcebos.com/1.6.0/win-infer/mkl/post107/fluid_inference_install_dir.zip) |
2931

3032
解压后`D:\projects\fluid_inference`目录包含内容为:
3133
```
@@ -57,11 +59,12 @@ fluid_inference
5759
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
5860
```
5961

60-
* CMAKE编译工程
62+
* CMAKE编译工程 (带*表示仅在使用**GPU版本**预测库时指定)
6163
* PADDLE_DIR: fluid_inference预测库路径
62-
* CUDA_LIB: CUDA动态库目录, 请根据实际安装情况调整
64+
* *CUDA_LIB: CUDA动态库目录, 请根据实际安装情况调整
6365
* OPENCV_DIR: OpenCV解压目录
6466

67+
在使用**GPU版本**预测库进行编译时,可执行下列操作。
6568
```
6669
# 切换到预测库所在目录
6770
cd /d D:\projects\PaddleSeg\inference\
@@ -72,6 +75,17 @@ cd build
7275
D:\projects\PaddleSeg\inference\build> cmake .. -G "Visual Studio 14 2015 Win64" -DWITH_GPU=ON -DPADDLE_DIR=D:\projects\fluid_inference -DCUDA_LIB=D:\projects\cudalib\v8.0\lib\x64 -DOPENCV_DIR=D:\projects\opencv -T host=x64
7376
```
7477

78+
在使用**CPU版本**预测库进行编译时,可执行下列操作。
79+
```
80+
# 切换到预测库所在目录
81+
cd /d D:\projects\PaddleSeg\inference\
82+
# 创建构建目录, 重新构建只需要删除该目录即可
83+
mkdir build
84+
cd build
85+
# cmake构建VS项目
86+
D:\projects\PaddleSeg\inference\build> cmake .. -G "Visual Studio 14 2015 Win64" -DWITH_GPU=ON -DPADDLE_DIR=D:\projects\fluid_inference -DOPENCV_DIR=D:\projects\opencv -T host=x64
87+
```
88+
7589
这里的`cmake`参数`-G`, 表示生成对应的VS版本的工程,可以根据自己的`VS`版本调整,具体请参考[cmake文档](https://cmake.org/cmake/help/v3.15/manual/cmake-generators.7.html)
7690

7791
* 生成可执行文件

0 commit comments

Comments
 (0)