- 人工智能
- 计算机视觉
- 预训练
【免费下载链接】PaddleSeg
Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.
本篇指南基于 PaddleSeg 仓库中deploy/fastdeploy/semantic_segmentation/cpu-gpu/目录的官方部署文档,系统讲解如何利用 FastDeploy 将 PaddleSeg 语义分割模型部署到 X86 CPU、NVIDIA GPU、飞腾 CPU、ARM CPU 及 Intel GPU(独立/集成显卡)等硬件上。读完后你将能够:选择或自行导出适合部署的分割模型(区分with-argmax/without-argmax两种形态)、在 Python 和 C++ 两种环境下完成 CPU/GPU 推理,并在 GPU 上启用 Paddle-TensorRT 动态 shape 加速。
一、方案概览:FastDeploy 全场景部署 PaddleSeg 模型
FastDeploy是一款面向云、边、端的全场景 AI 推理部署工具。在 PaddleSeg 中,它被用作语义分割模型的高性能部署方案,可覆盖多种硬件平台与推理后端(如 Paddle Inference、Paddle Lite、TensorRT、OpenVINO、ONNXRuntime 等)。
cpu-gpu 部署文档覆盖以下硬件:
| 硬件类型 | 是否支持 | Python 示例 | C++ 示例 |
|---|---|---|---|
| X86 CPU | ✅ | ✅ | ✅ |
| NVIDIA GPU | ✅ | ✅ | ✅ |
| 飞腾 CPU | ✅ | ✅ | ✅ |
| ARM CPU | ✅ | ✅ | ✅ |
| Intel GPU(独立/集成显卡) | ✅ | ✅ | ✅ |
除本文聚焦的 CPU/GPU 场景外,FastDeploy 语义分割部署总览还提供了昆仑 XPU、昇腾 Ascend、瑞芯微、晶晨、算能等更多硬件的部署文档,以及 Android、Serving 服务化、Web 部署和模型自动化压缩工具(quantize)等入口,可按需跳转。
二、使用预导出的部署模型
部署文档内置了一份预导出模型列表,每个模型均提供两种形态,可依据部署需求选择:
| 模型 | 参数文件大小 | 输入 Shape | mIoU | mIoU (flip) | mIoU (ms+flip) |
|---|---|---|---|---|---|
| Unet-cityscapes | 52MB | 1024x512 | 65.00% | 66.02% | 66.89% |
| PP-LiteSeg-B (STDC2) -cityscapes | 31MB | 1024x512 | 79.04% | 79.52% | 79.85% |
| PP-HumanSegV1-Lite(通用人像分割) | 543KB | 192x192 | 86.2% | - | - |
| PP-HumanSegV2-Lite(通用人像分割) | 12MB | 192x192 | 92.52% | - | - |
| PP-HumanSegV2-Mobile(通用人像分割) | 29MB | 192x192 | 93.13% | - | - |
| PP-HumanSegV1-Server(通用人像分割) | 103MB | 512x512 | 96.47% | - | - |
| Portrait-PP-HumanSegV2-Lite(肖像分割) | 3.6MB | 256x144 | 96.63% | - | - |
| FCN-HRNet-W18-cityscapes(暂不支持 ONNXRuntime GPU 推理) | 37MB | 1024x512 | 78.97% | 79.49% | 79.74% |
| DeepLabv3-ResNet101-OS8-cityscapes | 150MB | 1024x512 | 79.90% | 80.22% | 80.47% |
| SegFormer_B0-cityscapes | 15MB | 1024x1024 | 76.73% | 77.16% | - |
注:上表为整理自 cpu-gpu 部署文档 的模型清单,各模型的
with-argmax与without-argmax两种文件的具体下载地址以该文档内嵌链接为准。
2.1 with-argmax 与 without-argmax 的区别
文档对两种命名给出了明确的导出方式约定:
without-argmax:导出时不指定--input_shape,指定--output_op none,模型末端输出原始 logits(N*C*H*W)。适合需要自行后处理(如多尺度翻转推理、自定义 softmax 阈值处理)的场景。with-argmax:导出时不指定--input_shape,指定--output_op argmax,模型末端直接输出每个像素的分割类别(N*H*W,int32)。适合追求"开箱即用"、拿到即可视化的场景。
这一约定与 PaddleSeg 模型导出工具的output_op参数完全对应,详见 模型导出文档。
2.2 选型建议
- 通用场景分割:优先 PP-LiteSeg-B(STDC2,31MB,mIoU 79.04%),在精度与体积间平衡较好;追求精度可选 DeepLabv3-ResNet101-OS8(150MB,mIoU 79.90%);轻量 Transformer 可选 SegFormer_B0(15MB)。
- 人像/肖像分割:PP-HumanSeg 系列体积从 543KB 到 103MB 梯度完整,mIoU 从 86.2% 到 96.63%,可按算力预算选择。
- mIoU (flip) / mIoU (ms+flip)列展示了结合翻转推理、多尺度+翻转推理后的精度增益,使用
without-argmax模型时可在后处理阶段自行实现这类增强。
三、自行导出 PaddleSeg 部署模型
3.1 支持的模型范围
文档明确:支持PaddleSeg 2.6 以上版本的 Segmentation 模型。若你要部署的是PP-Matting、PP-HumanMatting 或 ModNet等抠图模型,请参考 Matting 模型部署文档,不要走语义分割通道。
经 FastDeploy 验证可成功部署的模型家族包括(对应配置文件位于仓库configs/下):
- U-Net 系列
- PP-LiteSeg 系列
- PP-HumanSeg 系列
- FCN 系列
- DeepLabV3 系列
- SegFormer 系列
3.2 模型导出步骤
导出流程与 模型导出文档 一致,在 PaddleSeg 根目录下执行:
python tools/export.py \ --config configs/pp_liteseg/pp_liteseg_stdc1_cityscapes_1024x512_scale0.5_160k.yml \ --model_path model.pdparams \ --save_dir output/inference_model导出脚本关键参数:
| 参数名 | 用途 | 是否必选 | 默认值 |
|---|---|---|---|
| config | 配置文件的路径 | 是 | - |
| model_path | 模型权重的路径 | 否 | - |
| save_dir | 预测模型保存的目录 | 否 | ./output/inference_model |
| input_shape | 模型输入 shape(N*C*H*W);不设置时默认导出为[-1, 3, -1, -1]的动态输入。预测 shape 固定时建议显式指定 | 否 | None |
| output_op | 网络末端添加的输出算子,支持argmax、softmax、none。argmax得到每像素类别(N*H*W,int32);softmax得到每类概率(N*C*H*W,float32);none输出 logits | 否 | argmax |
| with_softmax | 即将废弃,建议使用--output_op替代 | 否 | False |
| without_argmax | 即将废弃,建议使用--output_op替代 | 否 | False |
经验提示:若部署模型时出现与 shape 相关的问题,优先尝试显式指定
input_shape。
3.3 部署模型的三个文件
导出后得到如下文件结构,其中前三个文件是 FastDeploy 部署的必要输入:
output/inference_model ├── deploy.yaml # 部署相关的配置文件,主要说明数据预处理方式等信息 ├── model.pdmodel # 预测模型的拓扑结构文件 ├── model.pdiparams # 预测模型的权重文件 └── model.pdiparams.info # 参数额外信息,一般无需关注文档特别强调:FastDeploy 会从deploy.yaml中获取模型推理时需要的预处理信息(归一化均值、方差、resize 尺寸等),因此导出目录必须完整保留该文件,推理代码也正是按此三件套加载模型的(见下文 Python/C++ 示例源码)。
四、Python 部署示例:CPU / GPU / Paddle-TensorRT
Python 示例位于 cpu-gpu/python 目录,核心是 infer.py 一个脚本。
4.1 环境与运行步骤
# 安装 FastDeploy python 包(find-links 源地址以 FastDeploy 官方安装文档为准) pip install fastdeploy-gpu-python -f <FastDeploy 官方预编译包源> conda config --add channels conda-forge && conda install cudatoolkit=11.2 cudnn=8.2 # 获取示例代码(注意:若当前分支找不到 fastdeploy 测试代码,请切换到 develop 分支) cd PaddleSeg/deploy/fastdeploy/semantic_segmentation/cpu-gpu/python # 下载预导出模型压缩包并解压(tgz 名称与下载链接见 cpu-gpu 部署文档的模型列表) # 例如 PP_LiteSeg_B_STDC2_cityscapes_without_argmax_infer.tgz # 同时下载一张 cityscapes 测试图片 # CPU 推理 python infer.py --model PP_LiteSeg_B_STDC2_cityscapes_without_argmax_infer --image cityscapes_demo.png --device cpu # GPU 推理 python infer.py --model PP_LiteSeg_B_STDC2_cityscapes_without_argmax_infer --image cityscapes_demo.png --device gpu # GPU 上使用 Paddle-TensorRT 推理 # 注意:Paddle-TensorRT 首次运行有序列化模型的操作,耗时较长,需耐心等待 python infer.py --model PP_LiteSeg_B_STDC2_cityscapes_without_argmax_infer --image cityscapes_demo.png --device gpu --use_trt True命令行参数说明(与infer.py中 argparse 定义一一对应):
| 参数 | 含义 | 默认值 |
|---|---|---|
--model | 模型文件夹所在的路径(内含model.pdmodel、model.pdiparams、deploy.yaml) | None(必填) |
--image | 测试图片所在的路径 | None(必填) |
--device | 硬件类型,支持cpu、gpu;cpu可运行在 x86 CPU / ARM CPU 等 | cpu |
--use_trt | 是否使用 TensorRT,仅在device为gpu时有效 | False |
4.2 infer.py 源码解析
从 infer.py 的源码结构看,整个推理链路分为三步:
(1)构建运行时选项(build_option):
option = fd.RuntimeOption() if args.device.lower() == "gpu": option.use_gpu() if args.use_trt: option.use_trt_backend() # 若使用原生 TensorRT 而非 Paddle-TensorRT,注释掉下面两行 option.enable_paddle_to_trt() option.enable_paddle_trt_collect_shape() option.set_trt_input_shape("x", [1, 3, 256, 256], [1, 3, 1024, 1024], [1, 3, 2048, 2048])use_gpu()切换到 GPU 设备;use_trt_backend()启用 TRT 后端;enable_paddle_to_trt()+enable_paddle_trt_collect_shape()是Paddle-TensorRT模式的关键开关:它允许动态收集输入 shape 并自动生成对应的 TRT engine;若你想用原生 TensorRT(需预先转换 ONNX/TRT 模型),按注释说明注释掉这两行即可;set_trt_input_shape("x", min, opt, max)为输入张量x声明了动态 shape 区间:最小[1,3,256,256]、最优[1,3,1024,1024]、最大[1,3,2048,2048],TRT 将在该范围内构建引擎。
(2)加载模型并推理:
model_file = os.path.join(args.model, "model.pdmodel") params_file = os.path.join(args.model, "model.pdiparams") config_file = os.path.join(args.model, "deploy.yaml") model = fd.vision.segmentation.PaddleSegModel( model_file, params_file, config_file, runtime_option=runtime_option) im = cv2.imread(args.image) result = model.predict(im)可以看到 Python 侧严格对应"三件套"加载方式:PaddleSegModel构造时同时传入拓扑、权重与deploy.yaml预处理配置,预处理(resize/归一化)由 FastDeploy 依据 yaml 自动完成,用户代码无需手写。
(3)可视化:fd.vision.vis_segmentation(im, result, weight=0.5)将分割结果与原图以 0.5 的权重叠加,保存为vis_img.png。
五、C++ 部署示例
C++ 示例位于 cpu-gpu/cpp 目录,以 Linux 为例完整演示"下载 SDK → 编译 → 推理"流程(支持此模型的 FastDeploy 版本需>= 1.0.0):
# 下载 FastDeploy C++ 预编译库(版本 x.x.x 请自行替换为实际版本号) wget <fastdeploy-linux-x64-x.x.x.tgz 下载地址,见 FastDeploy 官方安装文档> tar xvf fastdeploy-linux-x64-x.x.x.tgz # 获取示例代码 cd PaddleSeg/deploy/fastdeploy/semantic_segmentation/cpu-gpu/cpp # 编译部署示例 mkdir build && cd build cmake .. -DFASTDEPLOY_INSTALL_DIR=${PWD}/fastdeploy-linux-x64-x.x.x make -j # 下载 PP-LiteSeg 模型与测试图片(同 Python 章节) # CPU 推理 ./infer_demo PP_LiteSeg_B_STDC2_cityscapes_without_argmax_infer cityscapes_demo.png 0 # GPU 推理 ./infer_demo PP_LiteSeg_B_STDC2_cityscapes_without_argmax_infer cityscapes_demo.png 1 # GPU 上 Paddle-TensorRT 推理 ./infer_demo PP_LiteSeg_B_STDC2_cityscapes_without_argmax_infer cityscapes_demo.png 2infer_demo <模型目录> <图片路径> <run_option>中第三个参数的取值(见 infer.cc 的用法提示):0= CPU;1= GPU;2= GPU + TensorRT 后端。
5.1 CMake 构建方式
CMakeLists.txt 极简,核心就是借助 FastDeploy SDK 自带的FastDeploy.cmake:
option(FASTDEPLOY_INSTALL_DIR "Path of downloaded fastdeploy sdk.") include(${FASTDEPLOY_INSTALL_DIR}/FastDeploy.cmake) include_directories(${FASTDEPLOY_INCS}) add_executable(infer_demo ${PROJECT_SOURCE_DIR}/infer.cc) target_link_libraries(infer_demo ${FASTDEPLOY_LIBS})因此接入自己工程时,只需将FASTDEPLOY_INSTALL_DIR指向解压后的 SDK 目录,并 include 其FastDeploy.cmake即可获得正确的头文件与库链接,无需手动处理各推理后端的依赖。
5.2 infer.cc 源码解析
infer.cc 定义了CpuInfer、GpuInfer、TrtInfer三个函数,结构完全一致,仅RuntimeOption配置不同,例如TrtInfer:
auto option = fastdeploy::RuntimeOption(); option.UseGpu(); option.UseTrtBackend(); // 若使用原生 TensorRT 而非 Paddle-TensorRT,注释掉下面两行 option.EnablePaddleToTrt(); option.EnablePaddleTrtCollectShape(); option.SetTrtInputShape("x", {1, 3, 256, 256}, {1, 3, 1024, 1024}, {1, 3, 2048, 2048});与 Python 版逐项对应(UseCpu/UseGpu/UseTrtBackend、EnablePaddleToTrt、动态 shape 区间完全相同),保证了两种语言下行为一致。推理流程为:
- 拼接
model.pdmodel/model.pdiparams/deploy.yaml三个路径(跨平台自动处理/与\分隔符); - 构造
fastdeploy::vision::segmentation::PaddleSegModel并调用Initialized()检查初始化结果; cv::imread读图后调用Predict(im, &res)得到SegmentationResult;res.Str()打印结果,VisSegmentation(im, res, 0.5)生成叠加可视化图并写入vis_result.jpg。
注意事项:
- 以上 CMake/命令行流程适用于 Linux 或 macOS,Windows 下 SDK 的使用方式需参考 FastDeploy 官方 FAQ;
- 关于切换更多推理后端引擎(OpenVINO、ONNXRuntime 等)与 Intel GPU 使用方法,参见 FastDeploy 官方 FAQ 文档;
- 若需自行编译 CPU / GPU / Jetson 部署库(而非使用预编译包),FastDeploy 官方文档提供了对应编译指南。
六、小结与深入路径
本文覆盖的 cpu-gpu 场景是 PaddleSeg FastDeploy 部署体系的基础通道,其要点可归纳为:
- 模型侧:预导出模型区分
with-argmax(末端带 argmax,输出类别图)与without-argmax(输出 logits,便于自定义后处理与多尺度/翻转推理)两种形态,导出时统一不指定input_shape以获得动态输入; - 文件侧:部署目录必须包含
model.pdmodel、model.pdiparams、deploy.yaml三件套,预处理信息完全由deploy.yaml驱动; - 推理侧:Python(
fd.vision.segmentation.PaddleSegModel)与 C++(fastdeploy::vision::segmentation::PaddleSegModel)API 对齐,RuntimeOption决定 CPU/GPU/TRT 后端;Paddle-TensorRT 模式通过EnablePaddleToTrt+EnablePaddleTrtCollectShape+SetTrtInputShape三行配置实现动态 shape 加速,首次运行需等待 engine 序列化。
如需扩展到端侧与服务化场景,可继续查阅 FastDeploy 语义分割部署总览 中的 Android、Serving、Web 与量化压缩(quantize)文档。
- 人工智能
- 计算机视觉
- 预训练
【免费下载链接】PaddleSeg
Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.
相关推荐
PaddleSeg 语义分割模型在华为昇腾 NPU 上的 FastDeploy Python 部署实战
PaddleSeg 语义分割模型在华为昇腾 NPU 上的 FastDeploy Python 部署实战 本篇指南聚焦 PaddleSeg 仓库中 deploy/
人工智能计算机视觉预训练PaddleSeg 语义分割模型华为昇腾 Ascend NPU C++ 部署实战指南(FastDeploy 方案)
PaddleSeg 语义分割模型华为昇腾 Ascend NPU C++ 部署实战指南(FastDeploy 方案) 导读 本文以 deploy/fastdepl
人工智能计算机视觉预训练PaddleDetection 模型 CPU/GPU 部署实战:基于 FastDeploy 的完整指南
PaddleDetection 模型 CPU/GPU 部署实战:基于 FastDeploy 的完整指南 FastDeploy 是 PaddleDetection
人工智能深度学习计算机视觉
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考