☰
PaddleSeg 语义分割模型 FastDeploy 部署实战:CPU/GPU 推理与 Paddle-TensorRT 加速
2026/9/25 1:37:14 网站建设 项目流程
  • 人工智能
  • 计算机视觉
  • 预训练

【免费下载链接】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.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleSeg
点击查看免费下载

本篇指南基于 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)等入口,可按需跳转。

二、使用预导出的部署模型

部署文档内置了一份预导出模型列表,每个模型均提供两种形态,可依据部署需求选择:

模型参数文件大小输入 ShapemIoUmIoU (flip)mIoU (ms+flip)
Unet-cityscapes52MB1024x51265.00%66.02%66.89%
PP-LiteSeg-B (STDC2) -cityscapes31MB1024x51279.04%79.52%79.85%
PP-HumanSegV1-Lite(通用人像分割)543KB192x19286.2%--
PP-HumanSegV2-Lite(通用人像分割)12MB192x19292.52%--
PP-HumanSegV2-Mobile(通用人像分割)29MB192x19293.13%--
PP-HumanSegV1-Server(通用人像分割)103MB512x51296.47%--
Portrait-PP-HumanSegV2-Lite(肖像分割)3.6MB256x14496.63%--
FCN-HRNet-W18-cityscapes(暂不支持 ONNXRuntime GPU 推理)37MB1024x51278.97%79.49%79.74%
DeepLabv3-ResNet101-OS8-cityscapes150MB1024x51279.90%80.22%80.47%
SegFormer_B0-cityscapes15MB1024x102476.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 2

infer_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 区间完全相同),保证了两种语言下行为一致。推理流程为:

  1. 拼接model.pdmodel/model.pdiparams/deploy.yaml三个路径(跨平台自动处理/与\分隔符);
  2. 构造fastdeploy::vision::segmentation::PaddleSegModel并调用Initialized()检查初始化结果;
  3. cv::imread读图后调用Predict(im, &res)得到SegmentationResult;
  4. 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 部署体系的基础通道,其要点可归纳为:

  1. 模型侧:预导出模型区分with-argmax(末端带 argmax,输出类别图)与without-argmax(输出 logits,便于自定义后处理与多尺度/翻转推理)两种形态,导出时统一不指定input_shape以获得动态输入;
  2. 文件侧:部署目录必须包含model.pdmodel、model.pdiparams、deploy.yaml三件套,预处理信息完全由deploy.yaml驱动;
  3. 推理侧: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.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleSeg
点击查看免费下载
上一篇:如何3步保存无水印抖音视频?专业工具全攻略
下一篇:gh_mirrors/os/os-tutorial-cn高级特性:多任务调度与进程管理实现教程,解锁操作系统核心能力

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询