Skip to content

Latest commit

 

History

History
 
 

python

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

PaddleSeg Python 预测部署方案

1. 说明

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

如果硬件支持(如Tesla V100 GPU等),本程序支持使用Nvidia TensorRT进行FP32FP16两种精度进行推理性能加速。

2. 依赖前置条件

  • Python2.7/Python3

3. 目录结构和文件说明

├── infer.py #  核心代码,完成分割模型的预测以及结果可视化
├── requirements.txt # 依赖的Python包
└── README.md # 说明文档

4. 环境安装和准备

4.1 安装 PaddlePaddle

如何选择合适版本的PaddlePaddle版本进行安装,可参考: PaddlePaddle安装教程

注意: 如硬件支持且需要使用TensorRT支持FP16半精度优化等, 则本步骤需要自行安装TensorRT并编译PaddlePaddle, 点击查看编译安装参考文档

4.2:安装Python依赖包

当前目录下, 使用pip安装Python依赖包

pip install -r requirements.txt

4.3 安装OpenCV 相关依赖库

预测代码中需要使用OpenCV,所以还需要OpenCV安装相关的动态链接库。

Ubuntu下安装相关链接库:

apt-get install -y libglib2.0-0 libsm6 libxext6 libxrender-dev

CentOS 下安装相关链接库:

yum install -y libXext libSM libXrender

5. 开始预测

5.1 准备模型

请使用模型导出工具 导出您的模型, 或点击下载我们的人像分割样例模型用于测试。

模型导出的目录通常包括三个文件:

├── model #  模型文件
├── params # 参数文件
└── deploy.yaml # 配置文件,用于C++或Python预测

配置文件的主要字段及其含义如下:

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: [0.5, 0.5, 0.5]
    # 方差
    STD: [0.5, 0.5, 0.5]
    # 分类类型数
    NUM_CLASSES: 2
    # 图片通道数
    CHANNELS : 3
    # 预测模式,支持 NATIVE 和 ANALYSIS
    PREDICTOR_MODE: "ANALYSIS"
    # 每次预测的 batch_size
    BATCH_SIZE : 3

5.2 执行预测程序

在终端输入以下命令进行预测:

python infer.py --conf=/path/to/deploy.yaml --input_dir=/path/to/images_directory

参数说明如下:

参数 是否必须 含义
conf Yes 模型配置的Yaml文件路径
input_dir Yes 需要预测的图片目录

注意: 如果硬件支持且安装的是从源码编译集成TensorRTPaddlePaddle, 则可以使用参数--trt_mode=fp16 表示开启FP16 精度优化, 使用trt_mode=fp32 表示使用FP32 精度。

运行后程序会扫描input_dir 目录下所有指定格式图片,并生成预测mask可视化的结果

对于图片a.jpeg, 预测mask 存在a_jpeg.png 中,而可视化结果则在a_jpeg_result.png 中。

输入样例: avatar

输出结果:
avatar