ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

PaddleSeg 语义分割模型在华为昇腾 NPU 上的 FastDeploy 部署指南

PaddleSeg 语义分割模型在华为昇腾 NPU 上的 FastDeploy 部署指南 人工智能计算机视觉预训练【免费下载链接】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点击查看免费下载本文基于 deploy/fastdeploy/semantic_segmentation/ascend/README.md 及其配套示例系统讲解如何借助 FastDeploy 将 PaddleSeg 的语义分割模型部署到华为昇腾AscendNPU 上完成推理。文章覆盖预导出模型清单、PaddleSeg 模型导出要点含output_op与deploy.yaml的原理分析、Python 与 C 两套完整部署示例及源码级解读读者读完即可在昇腾环境复现 PP-LiteSeg 等模型的分割推理。1. 方案说明为什么选择 FastDeploy 部署到昇腾PaddleSeg 官方支持通过 FastDeploy 在华为昇腾上部署 Segmentation 相关模型。FastDeploy 是一个全场景、易用灵活的 AI 推理部署工具在昇腾硬件上通过 Ascend NPU 后端完成模型推理用户无需关心昇腾 CANN 底层的算子与内存管理细节只需用统一的RuntimeOption切换后端即可。从仓库的整体部署矩阵见 deploy/fastdeploy/semantic_segmentation/README.md可以看到PaddleSeg 语义分割模型在昇腾、昆仑、瑞芯微、晶晨、算能等 10 款硬件上均有 Python 与 C 部署指南昇腾是其中的重要一环。本文聚焦昇腾一条路线展开。部署前需要明确一点昇腾部署需要自行编译带昇腾后端的 FastDeploy 运行库Python wheel 包或 C 预测库官方预编译包通常不包含昇腾支持这是与 CPU/GPU 路线最大的环境差异。2. 使用预导出的模型列表若不想自己走训练、导出流程可以直接使用 FastDeploy 预导出的推理模型。下表整理了昇腾部署场景下可用的预导出模型含带/不带 argmax 两个版本其中 mIoU 为对应模型在 Cityscapes 或人像数据集上的分割精度指标模型参数文件大小输入 ShapemIoUmIoU (flip)mIoU (msflip)PP-LiteSeg-B(STDC2)-cityscapes-with-argmax / without-argmax31MB1024x51279.04%79.52%79.85%PP-HumanSegV1-Lite-with-argmax / without-argmax通用人像分割模型543KB192x19286.2%--PP-HumanSegV2-Lite-with-argmax / without-argmax通用人像分割模型12MB192x19292.52%--PP-HumanSegV2-Mobile-with-argmax / without-argmax通用人像分割模型29MB192x19293.13%--PP-HumanSegV1-Server-with-argmax / without-argmax通用人像分割模型103MB512x51296.47%--Portrait-PP-HumanSegV2-Lite-with-argmax / without-argmax肖像分割模型3.6MB256x14496.63%--FCN-HRNet-W18-cityscapes-with-argmax / without-argmax37MB1024x51278.97%79.49%79.74%Deeplabv3-ResNet101-OS8-cityscapes-with-argmax / without-argmax150MB1024x51279.90%80.22%80.47%SegFormer_B0-cityscapes-with-argmax / without-argmax15MB1024x102476.73%77.16%-补充说明导出方式与文件命名的对应关系文件名标记without-argmax的模型导出方式为不指定--input_shape指定--output_op none文件名标记with-argmax的模型导出方式为不指定--input_shape指定--output_op argmax。下载对应 tgz 压缩包后解压即可得到含model.pdmodel、model.pdiparams、deploy.yaml的模型目录直接用于第 4、5 节的部署示例。3. 自行导出 PaddleSeg 部署模型3.1 模型版本与已验证系列FastDeploy 支持 PaddleSeg高于 2.6 版本的 Segmentation 模型。如果你要部署的是PP-Matting、PP-HumanMatting、ModNet这类抠图模型请参考 Matting 模型部署 文档不属于本文语义分割范畴。官方文档中明确测试过成功部署的模型系列对应配置均可在本仓库找到PP-LiteSeg 系列PP-HumanSeg 系列FCN 系列DeepLabV3 系列SegFormer 系列3.2 模型导出流程PaddleSeg 训练完成后最高精度的权重保存在save_dir/best_model/model.pdparams。使用 tools/export.py 导出预测模型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导出脚本的关键参数如下与 tools/export.py 中argparse定义一致参数名用途是否必选默认值config配置文件的路径是-model_path模型权重的路径否-save_dir预测模型保存的目录否./output/inference_modelinput_shape设置模型的输入 shapeN*C*H*W如--input_shape 1 3 1024 1024不设置时默认导出[-1, 3, -1, -1]。预测 shape 固定时建议指定否Noneoutput_op在模型末端添加的输出算子支持argmax/softmax/none否argmaxfor_fd导出 FastDeploy 兼容格式--for_fd标志否False导出成功后得到如下文件结构output/inference_model ├── deploy.yaml # 部署配置预处理方式、输入 shape、输出 op 等信息 ├── model.pdmodel # 预测模型的拓扑结构文件 ├── model.pdiparams # 预测模型的权重文件 └── model.pdiparams.info # 参数额外信息一般无需关注注意如果部署时出现与 shape 相关的问题请尝试显式指定--input_shape。3.3 导出须知output_op 与 deploy.yaml 的配合output_op直接决定推理输出的形态选择依据是下游使用方式argmax默认网络末端添加 argmax 算子输出每个像素的分割类别维度为N*H*W、数据类型int32softmax输出每个像素每类的概率维度为N*C*H*W、数据类型float32none保留 PaddleSeg 组网默认的 logitsN*C*H*W不带任何后处理算子。从源码看paddleseg/core/export.py 在output_op ! none时用WrappedModel(model, args.output_op)包装网络末端算子并在 paddleseg/core/export.py 中将output_dtypeargmax时为int32否则为float32与output_op一并写入deploy.yaml。deploy.yaml是 FastDeploy 推理时读取预处理与输出信息的唯一依据仓库中的实际示例见 deploy/fastdeploy/semantic_segmentation/serving/fastdeploy_serving/PP_LiteSeg_B_STDC2_cityscapes_with_argmax_infer/deploy.yaml内容如下Deploy: input_shape: - -1 - 3 - -1 - -1 model: model.pdmodel output_dtype: int32 output_op: argmax params: model.pdiparams transforms: - type: Normalize可以看到FastDeploy 会从 yaml 中解析模型文件名、输入 shape、输出算子类型与预处理 transforms如Normalize自动完成与训练时一致的数据预处理。因此导出后请勿随意改动deploy.yaml也不要只拷贝model.pdmodel/model.pdiparams而遗漏该文件。4. Python 部署示例Ascend NPU4.1 部署环境准备在部署前需自行编译基于华为昇腾 NPU 的 FastDeploy Python wheel 包并安装。参考 FastDeploy 官方文档中「华为昇腾 NPU 部署环境编译」章节编译时需要本机已安装好昇腾 CANN 工具链与 NPU 驱动。4.2 部署模型准备准备好推理模型目录含model.pdmodel、model.pdiparams、deploy.yaml可使用第 2 节的预导出模型或按第 3 节自行导出。Matting 类模型请走 Matting 部署目录。4.3 运行部署示例完整示例代码位于 deploy/fastdeploy/semantic_segmentation/ascend/python/infer.py。运行步骤如下# 下载部署示例代码若当前分支找不到 fastdeploy 测试代码请切换到 develop 分支 git clone https://gitcode.com/gh_mirrors/pa/PaddleSeg.git # git checkout develop cd PaddleSeg/deploy/fastdeploy/semantic_segmentation/ascend/python # 下载 PP-LiteSeg 模型文件with/without argmax 版本均可与测试图片并解压 # 模型包下载地址见第 2 节预导出模型清单 tar -xvf PP_LiteSeg_B_STDC2_cityscapes_without_argmax_infer.tgz # 华为昇腾推理 python infer.py --model PP_LiteSeg_B_STDC2_cityscapes_without_argmax_infer --image cityscapes_demo.png4.4 示例源码解读infer.py的核心逻辑非常精简其调用链如下见 infer.pyruntime_option fd.RuntimeOption() runtime_option.use_ascend() # ① 声明使用昇腾 NPU 后端 model fd.vision.segmentation.PaddleSegModel( # ② 加载 PaddleSeg 模型 model_file, params_file, config_file, runtime_optionruntime_option) im cv2.imread(args.image) result model.predict(im) # ③ 推理返回 SegmentationResult print(result) vis_im fd.vision.vis_segmentation(im, result, weight0.5) # ④ 可视化 cv2.imwrite(vis_img.png, vis_im)关键点后端切换只需一行runtime_option.use_ascend()FastDeploy 会自动选择合适的昇腾推理引擎模型加载三件套model.pdmodel结构、model.pdiparams权重、deploy.yaml预处理配置三者缺一不可预测与可视化分离predict()返回的SegmentationResult可直接print查看结构如需转为 numpy 格式做二次开发可参考 FastDeploy 常见问题中关于 SegmentationResult 转换的说明。5. C 部署示例Ascend NPU5.1 部署环境准备C 路线需自行编译基于华为昇腾 NPU 的 FastDeploy 预测库参考 FastDeploy 官方文档「华为昇腾 NPU 部署环境编译」章节编译产出物为 FastDeploy 的 C 库目录下例中为fastdeploy-ascend。5.2 运行部署示例以 Linux 为例在 deploy/fastdeploy/semantic_segmentation/ascend/cpp 目录执行如下命令即可完成编译与测试# 下载部署示例代码 git clone https://gitcode.com/gh_mirrors/pa/PaddleSeg.git # git checkout develop cd PaddleSeg/deploy/fastdeploy/semantic_segmentation/ascend/cpp mkdir build cd build # 使用编译完成的 FastDeploy 库编译 infer_demo cmake .. -DFASTDEPLOY_INSTALL_DIR${PWD}/fastdeploy-ascend make -j # 下载 PP-LiteSeg 模型文件与测试图片并解压 tar -xvf PP_LiteSeg_B_STDC2_cityscapes_without_argmax_infer.tgz # 华为昇腾推理 ./infer_demo PP_LiteSeg_B_STDC2_cityscapes_without_argmax_infer cityscapes_demo.png其中FASTDEPLOY_INSTALL_DIR需指向你编译好的昇腾版 FastDeploy 库安装目录具体 CMake 配置可查看 cpp/CMakeLists.txt。5.3 示例源码解读C 示例见 cpp/infer.cc与 Python 版一一对应核心流程为auto option fastdeploy::RuntimeOption(); option.UseAscend(); // ① 指定昇腾 NPU 后端 auto model fastdeploy::vision::segmentation::PaddleSegModel( model_file, params_file, config_file, option); // ② 加载模型 if (!model.Initialized()) { // ③ 检查模型初始化是否成功 std::cerr Failed to initialize. std::endl; return; } auto im cv::imread(image_file); fastdeploy::vision::SegmentationResult res; if (!model.Predict(im, res)) { // ④ 推理失败时返回 false std::cerr Failed to predict. std::endl; return; } std::cout res.Str() std::endl; auto vis_im fastdeploy::vision::VisSegmentation(im, res, 0.5); // ⑤ 可视化 cv::imwrite(vis_result.jpg, vis_im);与 Python 版差异点显式初始化检查model.Initialized()用于确认模型与后端加载成功失败时打印错误并退出便于在昇腾环境排查驱动/CANN 问题结果输出res.Str()输出文本描述VisSegmentation(im, res, 0.5)中0.5为分割掩码叠加在原图上的透明度权重命令行约定程序接受两个参数path/to/model_dir与path/to/image对应运行命令中的模型目录与图片路径。6. 更多指南与常见问题其他硬件路线CPU/GPU、昆仑、瑞芯微等的部署示例可参考 deploy/fastdeploy/semantic_segmentation 下的各子目录服务化部署可直接复用仓库中 fastdeploy_serving 已配置好的 PP-LiteSeg 模型目录含deploy.yaml与 Triton 前后处理配置作为模板常见问题如需将SegmentationResult转为 numpy 数组可参考 FastDeploy 官方 FAQ 中「vision result 相关问题」遇到部署问题可在 FastDeploy 仓库搜索 issue 或提交 issue 反馈。7. 总结将 PaddleSeg 语义分割模型部署到华为昇腾 NPU核心链路只有三步准备模型预导出或自行导出→ 编译昇腾版 FastDeploy 运行库 → 运行 Python/C 部署示例。其中最容易踩坑的两个环节是昇腾后端必须自行编译官方预编译包不含昇腾支持以及模型目录必须完整携带deploy.yamlFastDeploy 依赖它解析预处理与输出算子配置。掌握本文介绍的output_op选择与两套示例源码即可在此基础上扩展到 PP-HumanSeg 人像分割、SegFormer 等更多模型的实际业务部署。赞分享人工智能计算机视觉预训练【免费下载链接】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 语义分割模型在华为昇腾 NPU 上的 FastDeploy Python 部署实战PaddleSeg 语义分割模型在华为昇腾 NPU 上的 FastDeploy Python 部署实战 本篇指南聚焦 PaddleSeg 仓库中 deploy/人工智能计算机视觉预训练PaddleSeg 语义分割模型华为昇腾 Ascend NPU C 部署实战指南FastDeploy 方案PaddleSeg 语义分割模型华为昇腾 Ascend NPU C 部署实战指南FastDeploy 方案 导读 本文以 deploy/fastdepl人工智能计算机视觉预训练PaddleSeg 语义分割模型在瑞芯微 RV1126 NPU 上的 INT8 量化部署FastDeploy 实战指南PaddleSeg 语义分割模型在瑞芯微 RV1126 NPU 上的 INT8 量化部署FastDeploy 实战指南 本文围绕 PaddleSeg 在瑞芯微人工智能计算机视觉预训练上一篇3种技术方案Beyond Compare 5密钥生成与授权机制深度解析下一篇如何解决xiaomusic项目中小爱音箱设备列表获取失败5个实战技巧深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表