diff --git a/inference/README.md b/inference/README.md index 84138aa0c075f159c8f6feb305694bb011c2b1a2..1441ac0055e068c025a7c4e7c61177fc2de385fd 100644 --- a/inference/README.md +++ b/inference/README.md @@ -128,7 +128,7 @@ D:\projects\PaddleSeg\inference\build\Release>demo.exe --conf=D:\\projects\\Padd | input_dir | 需要预测的图片目录 | -配置文件说明请参考上一步,样例程序会扫描input_dir目录下的所有图片,并生成对应的预测结果。图像分割会对`demo.jpg`的每个像素进行分类,其预测的结果保存在`demo_jpg.png`中。分类预测结果的图不能直接看到效果,必须经过可视化处理。对于二分类的图像分割模型,样例程序自动将预测结果转换成可视化结果,保存在`demo_jpg_scoremap.png`中, 原始尺寸的预测结果在`demo_jpg_recover.png`中,如下图。对于**多分类**的图像分割模型,请参考[可视化脚本使用方法](./docs/vis.md)。 +配置文件说明请参考上一步,样例程序会扫描input_dir目录下的所有图片,并生成对应的预测结果。图像分割会对`demo.jpg`的每个像素进行分类,其预测的结果保存在`demo_jpg.png`中。分割预测结果的图不能直接看到效果,必须经过可视化处理。对于二分类的图像分割模型,样例程序自动将预测结果转换成可视化结果,保存在`demo_jpg_scoremap.png`中, 原始尺寸的预测结果在`demo_jpg_recover.png`中,如下图。对于**多分类**的图像分割模型,请参考[可视化脚本使用方法](./docs/vis.md)。 输入原图 ![avatar](images/humanseg/demo2.jpeg) diff --git a/inference/docs/linux_build.md b/inference/docs/linux_build.md index 4533aea67528e7797cb301c0f72e3d5356f61a02..4b1b28ad88ffc3137c845867c15090eefbadea28 100644 --- a/inference/docs/linux_build.md +++ b/inference/docs/linux_build.md @@ -5,7 +5,7 @@ ## 前置条件 * G++ 4.8.2 ~ 4.9.4 -* CUDA 8.0/ CUDA 9.0 +* CUDA 8.0 / CUDA 9.0 / CUDA 10.0 * CMake 3.0+ 请确保系统已经安装好上述基本软件,**下面所有示例以工作目录为 `/root/projects/`演示**。 @@ -20,7 +20,7 @@ ### Step2: 下载PaddlePaddle C++ 预测库 fluid_inference -目前仅支持`CUDA 8` 和 `CUDA 9`,建议使用`cuda9`, 请 [点击下载CUDA9预测库](https://paddle-inference-lib.bj.bcebos.com/latest-gpu-cuda9-cudnn7-avx-mkl/fluid_inference.tgz) +目前支持`CUDA 8` ,`CUDA 9` 和 `CUDA10`,建议使用`CUDA 9`, 请 [点击下载CUDA 9预测库](https://paddle-inference-lib.bj.bcebos.com/latest-gpu-cuda9-cudnn7-avx-mkl/fluid_inference.tgz) 更多可用版本,请参考:[C++预测库列表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/advanced_usage/deploy/inference/build_and_install_lib_cn.html) @@ -46,7 +46,7 @@ wget -c https://paddleseg.bj.bcebos.com/inference/opencv-3.4.6.zip unzip opencv-3.4.6.zip && cd opencv-3.4.6 # 3. 创建build目录并编译, 这里安装到/usr/local/opencv3目录 mkdir build && cd build -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 -DWITH_IPP=OFF -DBUILD_IPP_IW=OFF -DWITH_LAPACK=OFF -DWITH_EIGEN=OFF -DCMAKE_INSTALL_LIBDIR=lib64 +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 make -j4 make install ``` @@ -82,6 +82,4 @@ make ./demo --conf=/path/to/your/conf --input_dir=/path/to/your/input/data/directory ``` -更详细说明请参考ReadMe文档: [预测和可视化部分](../README.md) - - +更详细说明请参考README文档: [预测和可视化部分](../README.md) \ No newline at end of file diff --git a/inference/docs/vis.md b/inference/docs/vis.md index c694518765d907fde6c55aaae864b5ce29ccb5c5..bed5c7adba7c9739fa0a10a46d04ff6b060eeeb2 100644 --- a/inference/docs/vis.md +++ b/inference/docs/vis.md @@ -6,14 +6,23 @@ 图像分割模型会对预测的图像的每个像素进行分类,所以图像分割模型的预测结果是图像里每个像素的标签,我们将预测结果以图片格式保存。例如预测图片`demo.jpg`,其预测的结果以图片格式保存在`demo_jpg.png`中。保存分割预测结果的图片并不能直接看到效果(一张全黑的图),必须经过可视化处理。以下为使用方法。 ```bash -# 当前路径为PaddleSeg根目录 +# 假设当前路径为PaddleSeg根目录 +# 切换到脚本所在目录 cd inference/tools/ # 拷贝保存分割预测结果的图片到本目录 cp XXX/demo_jpg.png . # 运行可视化脚本 -python visualize.py demo_jpg.png vis_result.png +python visualize.py demo.jpg demo_jpg.png vis_result.png ``` -该脚本中第一个参数为保存预测结果的图片的路径,第二个参数为可视化后的效果图路径。 + +以下为上述运行可视化脚本例子中每个参数的含义,请根据测试机器中图片的**实际路径**修改对应参数。 + +| 参数 | 含义 | +|-------|----------| +| demo.jpg | 原图路径 | +| demo_jpg.png | 保存预测结果的图片的路径 | +| vis_result.png| 可视化后的效果图路径| + **可视化结果展示:** @@ -22,7 +31,7 @@ python visualize.py demo_jpg.png vis_result.png 原图(`demo.jpg`): ![avatar](demo.jpg) -预测结果图(`demo_jpg.png`): +预测结果图(`demo_jpg.png`, 仅用来保存预测的结果,需经过可视化处理): ![avatar](demo_jpg.png) 效果图(`vis_result.png`): diff --git a/inference/predictor/seg_predictor.cpp b/inference/predictor/seg_predictor.cpp index c6dae1e4fb7fdd9cb0f0d2180f6830f404f98761..5488ec946c96aaed543221a9f5d64be77092fba2 100644 --- a/inference/predictor/seg_predictor.cpp +++ b/inference/predictor/seg_predictor.cpp @@ -1,6 +1,6 @@ #include "seg_predictor.h" #include - +#undef min namespace PaddleSolution { int Predictor::init(const std::string& conf) { @@ -237,7 +237,7 @@ namespace PaddleSolution { imgs_batch.push_back(imgs[idx]); } - if (!_preprocessor->batch_process(imgs_batch, input_buffer.data(), org_height.data(), org_width.data())) { + if (!_preprocessor->batch_process(imgs_batch, input_buffer.data(), org_width.data(), org_height.data())) { return -1; } auto im_tensor = _main_predictor->GetInputTensor("image"); diff --git a/inference/tools/visualize.py b/inference/tools/visualize.py index 93b8410d5eb865a37bfe4259a5bbf645348d469c..e51d41435987ecec8e3c08967a5aea95337d9acc 100644 --- a/inference/tools/visualize.py +++ b/inference/tools/visualize.py @@ -7,13 +7,20 @@ color_map = [[128, 64, 128], [244, 35, 231], [69, 69, 69], [102, 102, 156], [106, 142, 35], [152, 250, 152], [69, 129, 180], [219, 19, 60], [255, 0, 0], [0, 0, 142], [0, 0, 69], [0, 60, 100], [0, 79, 100], [0, 0, 230], [119, 10, 32]] - -im = cv2.imread(sys.argv[1]) -shape = im.shape -print("visualizing...") -for i in range(0, shape[0]): - for j in range(0, shape[1]): - im[i, j] = color_map[im[i, j, 0]] - -cv2.imwrite(sys.argv[2], im) -print("visualizing done!") +# python visualize.py demo1.jpg demo1_jpg.png vis_result.png +if __name__ == "__main__": + if len(sys.argv) != 4: + print("Usage: python visualize.py demo1.jpg demo1_jpg.png vis_result.png") + else: + ori_im = cv2.imread(sys.argv[1]) + ori_shape = ori_im.shape + print(ori_shape) + im = cv2.imread(sys.argv[2]) + shape = im.shape + print("visualizing...") + for i in range(0, shape[0]): + for j in range(0, shape[1]): + im[i, j] = color_map[im[i, j, 0]] + im = cv2.resize(im, (ori_shape[1], ori_shape[0])) + cv2.imwrite(sys.argv[3], im) + print("visualizing done!")