ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

PaddleSeg 在瑞芯微 RKNPU2 上的 Python 部署实战:基于 FastDeploy 的 RKNN 推理完整指南

PaddleSeg 在瑞芯微 RKNPU2 上的 Python 部署实战:基于 FastDeploy 的 RKNN 推理完整指南 人工智能计算机视觉预训练【免费下载链接】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 RKNPU2 Python 部署示例 展开以通用人像分割模型 PP-HumanSeg 为例讲解如何通过 FastDeploy 将 PaddleSeg 语义分割模型部署到瑞芯微 NPURKNN并跑通 Python 推理。读完后你将掌握 RKNPU2 部署的环境准备、模型转换流程、infer.py的完整运行方法以及禁用预处理归一化与数据排布转换这一 NPU 部署关键点背后的实现原理。1. 方案背景与适用硬件RKNPU2 提供了一个高性能接口来访问 Rockchip NPUFastDeploy 基于该接口支持将 PaddleSeg 系列语义分割模型部署到以下硬件平台见 RKNPU2 部署方案总览RK3566 / RK3568RK3588 / RK3588SRV1103 / RV1106本示例以 RK3588 为基准平台介绍 Python 部署过程。需要强调的是与 Paddle Inference 或 ONNXRuntime 部署不同RKNN 模型是已经过算子转换、量化并内嵌预处理操作的固件级模型因此推理前必须完成静态图导出 → ONNX 转换 → RKNN 转换这一完整链路。2. 部署环境准备在部署前需确认以下步骤软硬件环境满足要求包括 Rockchip 开发板的 NPU 驱动、RKNPU2 运行环境librknnrt.so等以及 FastDeploy Python 包的正确安装。具体的环境要求与部署库编译方式以 FastDeploy 官方的 RKNPU2 部署文档docs/cn/faq/rknpu2/rknpu2.md为准FastDeploy 已安装且支持 RKNPU2 后端import fastdeploy后可正常调用fd.RuntimeOption().use_rknpu2()。环境不满足时模型加载与预测会在初始化阶段失败这是部署 RKNPU2 时最常见的坑。3. 部署模型准备从 Paddle 模型到 RKNN 模型本目录的 Python 示例直接消费.rknn模型文件因此部署前需要先把 PaddleSeg 模型转换为 RKNN 格式。完整的转换代码参考 RKNPU2 模型转换文档其总体流程分三步导出 PaddleSeg 推理模型通过 PaddleSeg 的模型导出工具得到包含model.pdmodel、model.pdiparams和deploy.yaml三个文件的静态图推理模型其中deploy.yaml保存了推理时所需的预处理信息如Resize、NormalizeFastDeploy 会从中读取Paddle 模型转 ONNX使用 Paddle2ONNX 完成转换并注意用paddle_infer_shape.py固定输入 shapeNPU 要求静态输入ONNX 转 RKNN在 FastDeploy 仓库中运行tools/rknpu2/export.py并指定--target_platform rk3588等目标平台。仓库中提供了完整的转换示例 PP-HumanSeg 模型转换说明以 Portrait-PP-HumanSegV2-Lite 肖像分割模型为例命令链如下# 下载Paddle2ONNX仓库 git clone https://github.com/PaddlePaddle/Paddle2ONNX # 下载Paddle静态图模型并为Paddle静态图模型固定输入shape cd Paddle2ONNX/tools/paddle wget https://bj.bcebos.com/paddlehub/fastdeploy/Portrait_PP_HumanSegV2_Lite_256x144_infer.tgz tar xvf Portrait_PP_HumanSegV2_Lite_256x144_infer.tgz python paddle_infer_shape.py --model_dir Portrait_PP_HumanSegV2_Lite_256x144_infer/ \ --model_filename model.pdmodel \ --params_filename model.pdiparams \ --save_dir Portrait_PP_HumanSegV2_Lite_256x144_infer \ --input_shape_dict{x:[1,3,144,256]} # 静态图转ONNX模型 paddle2onnx --model_dir Portrait_PP_HumanSegV2_Lite_256x144_infer \ --model_filename model.pdmodel \ --params_filename model.pdiparams \ --save_file Portrait_PP_HumanSegV2_Lite_256x144_infer/Portrait_PP_HumanSegV2_Lite_256x144_infer.onnx \ --enable_dev_version True # ONNX模型转RKNN模型在Fastdeploy根目录下执行 python tools/rknpu2/export.py \ --config_path tools/rknpu2/config/Portrait_PP_HumanSegV2_Lite_256x144_infer.yaml \ --target_platform rk3588另外两个容易踩坑的点转换文档中有专门说明固定输入 shape 后要同步修改deploy.yaml将input_shape中的-1改为与模型一致的具体值如[1, 3, 144, 256]否则 FastDeploy 读取到的预处理配置与模型实际输入不一致output_op参数选择导出的模型是否带argmax/softmax算子会影响 NPU 上的输出处理请按部署需求在导出阶段选择。也可以直接使用 FastDeploy 预导出的模型列表Unet、PP-LiteSeg、PP-HumanSeg V1/V2、Portrait-PP-HumanSegV2-Lite、FCN-HRNet-W18、DeepLabv3-ResNet101 等省去自行导出环节详见 预导出模型列表。4. 运行 Python 部署示例本目录 提供了 infer.py 用于快速完成 PP-HumanSeg 在 RKNPU2 上的部署。完整运行步骤如下# 下载部署示例代码 git clone https://github.com/PaddlePaddle/PaddleSeg.git # 注意如果当前分支找不到下面的fastdeploy测试代码请切换到develop分支 # git checkout develop cd PaddleSeg/deploy/fastdeploy/semantic_segmentation/rockchip/rknpu2/python # 下载测试图片 wget https://paddleseg.bj.bcebos.com/dygraph/pp_humanseg_v2/images.zip unzip images.zip # 运行部署示例 python3 infer.py --model_file ./Portrait_PP_HumanSegV2_Lite_256x144_infer/Portrait_PP_HumanSegV2_Lite_256x144_infer_rk3588.rknn \ --config_file ./Portrait_PP_HumanSegV2_Lite_256x144_infer/deploy.yaml \ --image images/portrait_heng.jpg三个命令行参数含义与infer.py中parse_arguments的 argparse 定义一一对应参数是否必填说明--model_file是RKNN 模型文件路径如Portrait_PP_HumanSegV2_Lite_256x144_infer_rk3588.rknn--config_file是PaddleSeg 导出的deploy.yaml路径FastDeploy 从中获取输入 shape 与预处理Resize/Normalize配置--image是待推理的测试图片路径运行成功后脚本会在当前目录生成可视化结果文件vis_img.png并在终端打印SegmentationResult的推理信息。5. infer.py 源码逐段解析结合 infer.py 源码整个 Python 推理流程可以归纳为构建运行时选项 → 构建 PaddleSegModel → 配置预处理器 → 预测 → 可视化五步1构建 RKNPU2 运行时选项def build_option(args): option fd.RuntimeOption() option.use_rknpu2() return optionfd.RuntimeOption().use_rknpu2()是选择 NPU2 后端的开关等价于 C 侧的option.UseRKNPU2()。这一步决定了 FastDeploy 底层使用 RKNPU2 运行时依赖板端librknnrt.so而非 CPU 或 GPU。2构建语义分割模型对象model fd.vision.segmentation.PaddleSegModel( model_file, params_file, # 传空字符串 RKNN 模型参数已内嵌在 .rknn 文件中 config_file, # deploy.yaml runtime_optionruntime_option, model_formatfd.ModelFormat.RKNN)fd.vision.segmentation.PaddleSegModel是 FastDeploy 为 PaddleSeg 定制的语义分割封装。注意两个细节model_formatfd.ModelFormat.RKNN必须显式指定FastDeploy 据此走 RKNN 加载路径params_file传空字符串即可因为 RKNN 格式已将权重打包进单个.rknn文件不像 Paddle Inference 格式需要model.pdmodelmodel.pdiparams分离存放。3禁用预处理中的归一化与格式转换本示例最关键的一步model.preprocessor.disable_normalize() model.preprocessor.disable_permute()这两行是整个 RKNPU2 部署的核心原理见下一节。4预测与可视化im cv2.imread(args.image) result model.predict(im) print(result) vis_im fd.vision.vis_segmentation(im, result, weight0.5) cv2.imwrite(vis_img.png, vis_im)model.predict返回SegmentationResultfd.vision.vis_segmentation将预测掩膜以weight0.5的透明度叠加到原图上最终保存为vis_img.png。6. 关键原理为什么必须 disable_normalize 与 disable_permute原文档的注意事项给出了结论这里结合源码解释其成因RKNPU 上对模型的输入要求是使用NHWC格式且图片归一化操作会在转 RKNN 模型时内嵌到模型中因此在使用 FastDeploy 部署时需要先调用DisableNormalizeAndPermute(C) 或disable_normalize_and_permute(Python)在预处理阶段禁用归一化以及数据格式的转换。也就是说RKNN 转换工具FastDeploy 的tools/rknpu2/export.py在导出时已经把deploy.yaml中Normalize变换对应的均值/方差参数烧录进了模型内部且 NPU 硬件要求 NHWC 排布的输入。如果 FastDeploy 预处理器再按deploy.yaml执行一次Normalize和 NHWC→NCHW 的Permute就会出现双重归一化与错误的数据排布导致推理结果完全错误通常是全黑或全白的分割掩膜。从源码结构看Python 与 C 两条部署链路在这一步是严格对齐的。C 示例 infer.cc 中对应的写法为model.GetPreprocessor().DisablePermute(); model.GetPreprocessor().DisableNormalize();同时该 C 示例还保留了ONNXInferCPU 上跑 ONNX与RKNPU2InferNPU 上跑 RKNN双路径通过第三个命令行参数0/1切换方便对比同一模型在两种后端下的结果与耗时排障时非常有用。7. 结果验证与常见问题结果验证Python 示例运行后检查vis_img.png人像区域应被正确高亮终端打印的SegmentationResult包含类别掩膜信息。如需把预测结果转为 numpy 数组做后续处理可参考 FastDeploy FAQ《如何将模型预测结果 SegmentationResult 转为 numpy 格式》docs/cn/faq/vision_result_related_problems.md模型文件找错确认--model_file指向.rknn而非.onnx/.pdmodel.rknn文件名中的平台后缀如_rk3588需与实际开发板匹配初始化失败优先检查板端 RKNPU2 驱动与librknnrt.so是否就位、FastDeploy 是否以支持 RKNPU2 的方式安装结果异常全黑/全白掩膜检查是否遗漏disable_normalize()/disable_permute()或 RKNN 转换时未正确内嵌归一化参数。8. 相关指南索引FastDeploy 部署 PaddleSeg 模型总览硬件支持列表与各平台CPU/GPU、昇腾、昆仑、晶晨、算能等的部署入口PaddleSeg RKNPU2 C 部署示例同一模型在 C 端的编译CMake与运行方式infer.cc 支持 ONNX/RKNN 双后端对比转换 PaddleSeg 模型至 RKNN 模型文档预导出模型列表、模型版本支持范围PaddleSeg 2.6 以上版本的 Segmentation 模型已验证 U-Net、PP-LiteSeg、PP-HumanSeg、FCN、DeepLabV3、SegFormer 系列与转换全流程PP-HumanSeg 模型转换示例固定输入 shape、Paddle2ONNX 转换、deploy.yaml修改的完整实操。综上在瑞芯微 RKNPU2 平台上部署 PaddleSeg 模型核心是三步先按转换文档把模型固化为静态输入并完成 RKNN 转换再在 FastDeploy 中用use_rknpu2()指定后端、ModelFormat.RKNN加载模型最后在预测前禁用预处理器的归一化与格式转换即可让语义分割模型稳定跑在 NPU 上。赞分享人工智能计算机视觉预训练【免费下载链接】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 PP-HumanSeg 模型转 RKNN 实战基于 FastDeploy 的 RKNPU2 部署完整流程PaddleSeg PP HumanSeg 模型转 RKNN 实战基于 FastDeploy 的 RKNPU2 部署完整流程 PaddleSeg 的人像分割模人工智能计算机视觉预训练PaddleSeg 人像分割模型在 Rockchip RKNPU2 上的部署PP-HumanSeg 转 RKNN 与 FastDeploy 推理实战PaddleSeg 人像分割模型在 Rockchip RKNPU2 上的部署PP HumanSeg 转 RKNN 与 FastDeploy 推理实战 本文以人工智能计算机视觉预训练PaddleSeg 在 Rockchip RKNPU2 上的 FastDeploy 部署实战模型转换、C/Python 推理全流程PaddleSeg 在 Rockchip RKNPU2 上的 FastDeploy 部署实战模型转换、C/Python 推理全流程 本文基于 Paddle人工智能计算机视觉预训练上一篇GhostTrack数字足迹追踪与信息安全分析的一站式解决方案下一篇智能播放管家重新定义你的视频观看效率创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表