新闻详情

新闻详情

首页 / 资讯中心 / 详情

PaddleSeg 语义分割模型 Windows C++ 部署实战:基于 Paddle Inference 从环境搭建到推理落地

发布时间:2026/9/26 3:05:31来源:尧图网络
PaddleSeg 语义分割模型 Windows C++ 部署实战:基于 Paddle Inference 从环境搭建到推理落地
人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-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点击查看免费下载导读本文完整讲解如何在 Windows 10 上使用 Paddle Inference 的 C 接口部署 PaddleSeg 语义分割模型覆盖环境准备Visual Studio、CUDA/CUDNN/TensorRT、Paddle 预测库、OpenCV、预测模型与测试图片准备、CMake 工程生成与 Visual Studio 编译、以及 GPU/CPU 推理执行的完整流程。读完本文你将能够把 PaddleSeg 训练导出的推理模型编译为本地test_seg.exe可执行程序并理解deploy/cpp目录下 C 示例test_seg.cc从读取deploy.yaml、图像预处理到推理后处理的完整调用链为后续接入自己的业务工程打下基础。1. 部署方案概述PaddleSeg 仓库在 deploy/cpp 目录下提供了基于 Paddle Inference C 接口的部署示例主要包含三个步骤准备环境安装 Visual Studio 2019、CUDA/CUDNN/TensorRTGPU 场景、CMake、Paddle Inference C 预测库、OpenCV准备模型和图片下载或导出预测模型model.pdmodel/model.pdiparams/deploy.yaml等并准备一张测试图片编译、执行用 CMake 生成 Visual Studio 工程编译出可执行文件并运行推理。飞桨针对不同场景提供了多种预测引擎Paddle Inference、Paddle Lite、Paddle Serving、Paddle.js 等C 服务端部署使用 Paddle Inference 是其中最直接的一种。本文档中的全部示例以工作目录D:\projects演示。2. 准备环境2.1 准备基础环境模型部署的基础环境要求如下Visual Studio 2019需根据 Paddle Inference C 预测库编译所使用的 VS 版本选择对应版本Visual Studio 各版本间存在二进制兼容性约束2015/2017/2019 的 C 运行库二进制兼容CUDA / CUDNN / TensorRT仅在使用 GPU 版本的预测库时需要CMake 3.0用于生成 VS 工程文件。2.2 准备 CUDA/CUDNN/TensorRT 环境模型部署环境与所需库的对应关系如下表部署环境需要准备的库CPU无GPUCUDA / CUDNNGPU_TRTCUDA / CUDNN / TensorRT使用 GPU 推理的用户需要准备 CUDA 和 CUDNN仅使用 CPU 推理的用户可跳过本节CUDA按 NVIDIA 官方安装指南完成安装。CUDA 默认安装路径为C:\Program Files\NVIDIA GPU Computing Toolkit需将C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\Vx.y\bin加入环境变量Vx.y中的x.y为 CUDA 版本号。CUDNN将 cudnn 解压目录中bin、include、lib三个文件夹内的文件分别复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\Vx.y下同名文件夹中。TensorRT可选若需在 CUDA 下使用 TensorRT 加速推理还需安装 TensorRT并把安装目录lib文件夹下的.dll文件复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\Vx.y\bin。本文档以CUDA11.6、CUDNN8.4.1.5、TensorRT8.4.1.5的组合为例进行介绍。2.3 准备 Paddle Inference C 预测库Paddle Inference C 预测库针对不同的 CPU 和 CUDA 版本提供了不同的预编译版本应根据自身环境在 Paddle Inference 官方下载页选择合适的预编译库Windows 平台。若预编译库不满足需求也可以自行源码编译预测库。本文不再展开预测库的编译细节直接使用预编译库。假设预测库解压至D:\projects\paddle_inference其目录结构如下D:\projects\paddle_inference ├── paddle ├── third_party ├── CMakeCache.txt └── version.txt其中paddle目录存放头文件与paddle_inference.lib等链接库third_party目录存放预测库依赖的第三方库如 protobuf、glog、gflags、xxhash、cryptopp、onnxruntime、paddle2onnx 以及 MKL/OpenBLAS 等这些路径会在编译阶段由 CMake 自动引用。2.4 安装 OpenCV本示例使用 OpenCV 读取图片因此需要安装 OpenCV其他项目中可视需要决定是否安装。安装步骤从 OpenCV 官网下载适用于 Windows 平台的4.6.0版本opencv-4.6.0-vc14_vc15安装程序运行下载的可执行文件将 OpenCV 解压至指定目录例如D:\projects\opencv配置环境变量若在编译命令中使用全局绝对路径也可不设置环境变量我的电脑→属性→高级系统设置→环境变量在系统变量中找到Path如不存在则自行创建双击编辑新建一条填入 OpenCV 的bin路径并保存例如D:\projects\opencv\build\x64\vc15\bin。3. 准备模型和图片3.1 获取预测模型本文示例使用 PaddleSeg 提供的 PP-LiteSeg 预测模型pp_liteseg_infer_model.tar.gz下载后解压即可用于测试。预测模型的文件格式如下pp_liteseg_infer_model ├── deploy.yaml # 部署相关的配置文件主要说明数据预处理方式等信息 ├── model.pdmodel # 预测模型的拓扑结构文件 ├── model.pdiparams # 预测模型的权重文件 └── model.pdiparams.info # 参数额外信息一般无需关注如果需要测试其他模型可参考 模型导出文档 自行导出预测模型。导出命令位于 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 | 指定推理模型输入形状N*C*H*W如--input_shape 1 3 1024 1024若不指定则为[-1, 3, -1, -1]预测时图像尺寸固定则应显式设置 | 否 | None | | output_op | 追加到推理模型末尾的算子可选argmax、softmax、none默认输出每个像素的类别标签N*H*W加softmax则输出各类别概率 | 否 |argmax|导出成功后output/inference_model目录下即生成deploy.yaml、model.pdmodel、model.pdiparams、model.pdiparams.info四个文件与上文目录结构一致。3.2 认识 deploy.yamlC 端如何解析预处理配置与 Python 端部署不同C 示例不会加载 PaddleSeg 的 transforms 配置而是直接从模型目录的deploy.yaml中读取数据预处理方式。查看 test_seg.cc 中的load_yaml函数可以看到解析逻辑读取Deploy.model与Deploy.params字段得到模型文件名和权重文件名遍历Deploy.transforms列表识别Normalize变换开启归一化与Resize变换读取target_size得到resize_width与resize_height。对应地read_process_image 实现图像预处理先用cv::imread读图并BGR2RGB转换通道顺序若配置了Resize则cv::resize到目标尺寸若配置了Normalize则将像素值缩放到[0,1]除以 255再执行(x - 0.5) / 0.5的标准化。也就是说C 端与 Python 端推理会保持一致的预处理行为。3.3 用 Netron 检查输入输出确认输出数据类型model.pdmodel可通过 Netron 打开进行模型可视化点击输入节点即可查看推理模型的输入/输出个数及数据类型如int32_t、int64_t、float等。这一点很重要默认代码假设模型输出为int32_t的类别标签。如果模型的输出数据类型不是int32_t例如导出的模型带了softmax输出概率执行默认代码会报错此时需要手动修改 test_seg.cc 中的如下代码将其改为对应的输出数据类型std::vectorint32_t out_data(out_num);3.4 准备测试图片下载一张 cityscapes 验证集中的图片cityscapes_demo.png到本地用于后续推理测试。4. 编译4.1 工程整体目录结构完成上述准备后D:\projects下应包含D:\projects ├── opencv ├── paddle_inference └── PaddleSeg即把 PaddleSeg 仓库克隆到D:\projects\PaddleSeg与opencv、paddle_inference平级。4.2 使用 CMake 生成项目文件编译参数说明如下其中带*表示仅在使用 GPU 版本预测库时指定带#表示仅在使用 TensorRT 时指定参数名含义*WITH_GPU是否使用 GPU默认为 OFF*CUDA_LIBCUDA 的库路径*USE_TENSORRT是否使用 TensorRT默认为 OFF#TENSORRT_DLLTensorRT 的.dll文件存放路径WITH_MKL是否使用 MKL默认为 ON使用 MKL设为 OFF 表示使用 OpenBLASCMAKE_BUILD_TYPE指定编译时使用 Release 或 DebugPADDLE_LIB_NAMEPaddle 预测库名称OPENCV_DIROpenCV 的安装路径PADDLE_LIBPaddle 预测库的安装路径DEMO_NAME可执行文件名首先进入cpp目录cd D:\projects\PaddleSeg\deploy\cpp创建build文件夹并进入mkdir build cd build执行编译命令的通用格式如下注意若路径中包含空格需用引号括起来cmake .. -G Visual Studio 16 2019 -A x64 -T hostx64 -DUSE_TENSORRTON -DWITH_GPUON -DWITH_MKLON -DCMAKE_BUILD_TYPERelease -DPADDLE_LIB_NAMEpaddle_inference -DCUDA_LIBpath_to_cuda_lib -DOPENCV_DIRpath_to_opencv -DPADDLE_LIBpath_to_paddle_dir -DTENSORRT_DLLpath_to_tensorrt_.dll -DDEMO_NAMEtest_seg按部署场景分四种典型命令GPU 推理不使用 TensorRTcmake .. -G Visual Studio 16 2019 -A x64 -T hostx64 -DUSE_TENSORRTOFF -DWITH_GPUON -DWITH_MKLON -DCMAKE_BUILD_TYPERelease -DPADDLE_LIB_NAMEpaddle_inference -DCUDA_LIBC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\lib\x64 -DOPENCV_DIRD:\projects\opencv -DPADDLE_LIBD:\projects\paddle_inference -DDEMO_NAMEtest_segGPU 推理使用 TensorRT 加速cmake .. -G Visual Studio 16 2019 -A x64 -T hostx64 -DUSE_TENSORRTON -DWITH_GPUON -DWITH_MKLON -DCMAKE_BUILD_TYPERelease -DPADDLE_LIB_NAMEpaddle_inference -DCUDA_LIBC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\lib\x64 -DOPENCV_DIRD:\projects\opencv -DPADDLE_LIBD:\projects\paddle_inference -DTENSORRT_DLLC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin -DDEMO_NAMEtest_segCPU 推理MKLcmake .. -G Visual Studio 16 2019 -A x64 -T hostx64 -DWITH_GPUOFF -DWITH_MKLON -DCMAKE_BUILD_TYPERelease -DPADDLE_LIB_NAMEpaddle_inference -DOPENCV_DIRD:\projects\opencv -DPADDLE_LIBD:\projects\paddle_inference -DDEMO_NAMEtest_segCPU 推理OpenBLAScmake .. -G Visual Studio 16 2019 -A x64 -T hostx64 -DWITH_GPUOFF -DWITH_MKLOFF -DCMAKE_BUILD_TYPERelease -DPADDLE_LIB_NAMEpaddle_inference -DOPENCV_DIRD:\projects\opencv -DPADDLE_LIBD:\projects\paddle_inference -DDEMO_NAMEtest_seg4.3 源码视角CMake 生成工程时发生了什么从 deploy/cpp/CMakeLists.txt 可以看到 Windows 分支的几个关键行为理解它们有助于排查编译问题自动编译 yaml-cppWindows 下通过 cmake/yaml-cpp.cmake 引入ExternalProject_Add在构建阶段自动下载并编译静态版yaml-cpp链接库输出到build/ext/yaml-cpp/lib因此示例代码中的deploy.yaml解析依赖无需手动安装依赖库自动链接PADDLE_LIB/third_party/install/下的 protobuf、glog、gflags、xxhash、cryptopp、onnxruntime、paddle2onnx 头文件与库目录均被自动加入编译与链接搜索路径WITH_MKL决定链接mklml还是openblasPOST_BUILD 自动拷贝 dll编译完成后CMake 会把推理运行所需的mklml.dll、libiomp5md.dll、mkldnn.dll、onnxruntime.dll、paddle2onnx.dll、paddle_inference.dll以及 TensorRT 的nvinfer.dll、nvinfer_plugin.dll自动复制到可执行文件目录和Release目录见 CMakeLists.txt 的add_custom_command这正是后面Release目录中*.dll的来源运行时库统一为静态 CRTWindows 分支默认启用MSVC_STATIC_CRT将/MD替换为/MT避免与预测库的运行时库冲突。4.4 使用 Visual Studio 编译用 Visual Studio 2019 打开生成的cpp\build\cpp_inference_demo.sln将编译模式设置为Release点击生成→生成解决方案编译完成后在cpp\build\Release目录内生成test_seg.exe。5. 执行推理5.1 准备 Release 目录进入build\Release目录将准备好的模型和图片放到test_seg.exe同级目录最终目录结构如下Release ├──test_seg.exe # 可执行文件 ├──cityscapes_demo.png # 测试图片 ├──pp_liteseg_infer_model # 推理用到的模型 ├── deploy.yaml # 部署相关的配置文件主要说明数据预处理方式等信息 ├── model.pdmodel # 预测模型的拓扑结构文件 ├── model.pdiparams # 预测模型的权重文件 └── model.pdiparams.info # 参数额外信息一般无需关注 ├──*.dll # dll 文件由 CMake POST_BUILD 自动拷贝5.2 可执行文件的命令行参数test_seg.cc 使用 gflags 定义了全部运行时参数推理时可按需组合参数类型默认值含义--model_dirstring推理模型目录必须包含deploy.yaml与模型文件为空时程序直接报错退出--img_pathstring测试图片路径--devicesstringGPU使用 GPU 或 CPU 设备--use_trtboolfalseGPU 下是否启用 TensorRT--trt_precisionstringfp32TensorRT 精度支持fp32、fp16、int8--use_trt_dynamic_shapeboolfalseGPU TensorRT 下是否启用动态 shape--dynamic_shape_pathstring若指定则从该路径读取 TRT 动态 shape 配置--use_mkldnnboolfalseCPU 下是否启用 MKLDNN--save_dirstring输出图片目录当前示例固定输出为out_img.jpg5.3 运行推理GPU 推理test_seg.exe --model_dir./pp_liteseg_infer_model --img_path./cityscapes_demo.png --devicesGPUCPU 推理test_seg.exe --model_dir./pp_liteseg_infer_model --img_path./cityscapes_demo.png --devicesCPU预测结果保存为out_img.jpg。该图片对预测的灰度标签图做了直方图均衡化cv::equalizeHist便于可视化观察分割轮廓而不是对标签着色后的原图。5.4 推理流程源码解读结合 test_seg.cc 的main函数整个执行链路可以拆解为五个阶段解析参数并校验google::ParseCommandLineFlags解析命令行model_dir为空则LOG(FATAL)终止加载部署配置读取model_dir/deploy.yaml得到模型文件名、权重文件名以及预处理配置图像预处理读图 →BGR2RGB→ 按deploy.yaml决定是否Resize与Normalize→ 通过hwc_img_2_chw_data将 HWC 布局的cv::Mat转为 CHW 布局的float数组test_seg.cc 用cv::extractChannel逐通道抽取实现创建 Predictor 并推理create_predictortest_seg.cc根据devices构造paddle_infer::ConfigCPU 分支可EnableMKLDNN()并设置 5 线程GPU 分支调用EnableUseGpu(100, 0)显存 100MB、设备 0开启 TensorRT 时按trt_precision选择kFloat32/kHalf/kInt8并可通过SetTRTDynamicShapeInfo传入内置的 min/max/opt 输入 shape{1,3,112,112}/{1,3,1024,2048}/{1,3,512,1024}或从dynamic_shape_path读取调优配置随后设置输入 tensor 形状{1, chs, rows, cols}、CopyFromCpu拷入数据并Run()读取输出并保存GetOutputHandle获取输出将输出元素总数out_num拷贝到std::vectorint32_t转为uint8_t后按H*W组织成单通道灰度图经直方图均衡化后cv::imwrite保存为out_img.jpg。6. 常见问题与排查思路模型输出类型不是 int32_t 导致报错用 Netron 查看输出节点数据类型按 3.3 修改std::vectorint32_t out_data(out_num);为对应类型路径包含空格CMake 命令与运行参数中的路径均需使用引号括起运行缺 dll确认使用 CMake 生成的工程完成一次完整构建POST_BUILD 步骤会自动拷贝 dll或将缺失的 dll 手动复制到Release目录TensorRT 相关报错确认TENSORRT_DLL指向包含nvinfer.dll、nvinfer_plugin.dll的目录且 TensorRT 主版本与预测库匹配动态 shape 需求当输入尺寸不固定时在 GPU TensorRT 场景启用--use_trt_dynamic_shape可配合--dynamic_shape_path传入调优后的动态 shape 配置固定尺寸场景则建议在导出模型时通过--input_shape固定输入形状。至此你已经完成了从环境搭建、模型准备、工程编译到 GPU/CPU 推理的完整 Windows C 部署闭环可将该流程迁移到自定义模型与业务代码中。赞分享人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-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 基于 FastDeploy 的 CPU/GPU Python 部署实战语义分割模型从环境搭建到 Paddle-TensorRT 加速PaddleSeg 基于 FastDeploy 的 CPU/GPU Python 部署实战语义分割模型从环境搭建到 Paddle TensorRT 加速 本文人工智能计算机视觉预训练PaddleSeg 分割模型在 Linux 上的 C 部署实战Paddle Inference 环境搭建、编译运行与 TensorRT 加速全指南PaddleSeg 分割模型在 Linux 上的 C 部署实战Paddle Inference 环境搭建、编译运行与 TensorRT 加速全指南 本指南人工智能计算机视觉预训练PaddleSeg LaneSeg 车道线分割模型 C 部署实战基于 Paddle Inference 的编译、推理与后处理全流程PaddleSeg LaneSeg 车道线分割模型 C 部署实战基于 Paddle Inference 的编译、推理与后处理全流程 车道线检测是智能驾驶与人工智能计算机视觉预训练上一篇Bazzite游戏系统终极指南10个快速修复技巧让Linux游戏体验更完美下一篇5分钟快速上手ChanlunX缠论插件通达信技术分析的终极免费方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

SSM文献检索系统项目源码解析:从环境搭建到核心实现 2026/9/26 7:47:05

SSM文献检索系统项目源码解析:从环境搭建到核心实现

1. 项目概述:这个SSM文献检索系统到底能帮你解决什么 如果你搜到“java_ssm73文献检索系统_idea项目源码”这个标题,大概率是这么几种情况之一:要么在准备Java课程设计,要么在攒毕业设计的素材,要么是刚学完SSM框架想找…

阅读更多 →
老成本核算软件环境搭建与SQL数据库初始化实战 2026/9/26 7:47:05

老成本核算软件环境搭建与SQL数据库初始化实战

简介:这是一套面向生产制造企业财务、成本会计及信息化管理人员的产品成本核算软件,基于瑞翔软件方案构建,采用轻量级SQL数据库,可自动归集直接材料、直接人工与制造费用,并借助作业成本法将间接成本合理分摊至具体产品…

阅读更多 →
Django+ERP+微信小程序:课程设计/毕业设计实战指南 2026/9/26 7:47:05

Django+ERP+微信小程序:课程设计/毕业设计实战指南

1. 选题逻辑:为什么是"Django ERP 小程序"这个组合先说结论:这个选题几乎是为课程设计和毕业设计量身定做的"标准答案"。每年都有大量学生卡在选题这一步,要么选了个纯算法题最后做不出界面,要么选了个管理…

阅读更多 →
OMR318鼠标驱动原理:USB HID协议逆向与libusb功能解锁 2026/9/26 7:47:05

OMR318鼠标驱动原理:USB HID协议逆向与libusb功能解锁

1. 项目概述:这不是“装个驱动”那么简单的事宏碁暗影骑士OMR318鼠标,表面看是款百元级游戏外设——黑红配色、RGB灯效、6个可编程按键、最高12000 DPI光学传感器。但真正用过的人很快会发现,它和市面上绝大多数“即插即用”的罗技、雷蛇、卓…

阅读更多 →
Django+小程序实现制造业定制化ERP毕设项目实战 2026/9/26 7:47:05

Django+小程序实现制造业定制化ERP毕设项目实战

又到一年毕设选题季,每年这个时候后台私信都会被同一个问题塞满:老师,django 小程序能做什么题目?有没有好过、代码量适中、还能写进简历的项目?说实话,被问得多了之后,我发现大部分同学不是不…

阅读更多 →
用 abogen 生成有声书:5 分钟把 EPUB、PDF 变成带字幕的 TTS 音频 2026/9/26 7:46:58

用 abogen 生成有声书:5 分钟把 EPUB、PDF 变成带字幕的 TTS 音频

用 abogen 生成有声书:5 分钟把 EPUB、PDF 变成带字幕的 TTS 音频 【免费下载链接】abogen Generate audiobooks from EPUBs, PDFs and text with synchronized captions. 项目地址: https://gitcode.com/GitHub_Trending/ab/abogen 通勤地铁上,你…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉