ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PaddleSeg 基于 FastDeploy 在晶晨 A311D NPU 上部署 PP-LiteSeg 量化模型:C++ 交叉编译与 ADB 部署实战

PaddleSeg 基于 FastDeploy 在晶晨 A311D NPU 上部署 PP-LiteSeg 量化模型:C++ 交叉编译与 ADB 部署实战 人工智能计算机视觉预训练【免费下载链接】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 仓库中deploy/fastdeploy/semantic_segmentation/amlogic/a311d/cpp/目录为骨架系统讲解如何将 PP-LiteSeg 量化分割模型部署到晶晨AmlogicA311D 开发板上的芯原VeriSiliconNPU涵盖 FastDeploy 交叉编译环境准备、INT8 量化模型获取、CMake 交叉编译、以及基于 ADB 的板端运行全流程。读完本文你将掌握一套可直接复制的PC 交叉编译 A311D 板端推理部署方案并能通过阅读infer.cc源码理解 TimVX 后端、异构计算subgraph.txt与结果可视化的底层实现。1. 部署方案概览A311D 与芯原 NPU 的 FastDeploy 支持晶晨 A311D 是一款面向 AI 应用的处理器其内置 NPU 的 IP 来自芯原VeriSilicon。值得注意的是芯原作为 IP 设计厂商并不直接提供实体 SoC而是将 NPU IP 授权给晶晨、瑞芯微Rockchip等芯片厂商。因此只要芯片没有大幅修改芯原底层库均可参考同一套部署方案。在 PaddleSeg 的 FastDeploy 部署体系中晶晨与瑞芯微 SoC 中的 NPU 被统称为芯原 NPU。根据 amlogic 部署总览当前支持部署的芯片包括Amlogic A311DAmlogic C308XAmlogic S905D3在部署语言支持上A311D 目前仅支持 C 部署不支持 Python这也正是本文聚焦 C 示例的原因。PaddleSeg 通过 FastDeploy 在 A311D 上基于 Paddle-Lite 部署语义分割模型核心链路为PaddleSeg 训练/导出模型 → INT8 量化 → FastDeploy 交叉编译产物 → adb 推送至 A311D → Paddle-Lite TimVX 后端推理该目录下的infer.cc帮助用户快速完成 PP-LiteSeg 量化模型在 A311D 上的部署推理加速配套文件还包括 CMakeLists.txt交叉编译配置与 run_with_adb.sh板端部署脚本。2. 部署环境准备FastDeploy 交叉编译环境在开始编译部署示例之前需要先完成两件事确认软硬件环境满足要求交叉编译通常在 x86 Linux 主机上进行目标产物运行在 ARM64 架构的 A311D 开发板上。准备 FastDeploy 的晶晨交叉编译环境需要自行交叉编译 FastDeploy生成面向 TimVX/A311D 的 SDK 产物。相关编译细节可参考 FastDeploy 官方文档中晶晨 A311D 自行编译安装一节。交叉编译完成后会得到一个fastdeploy-timvx目录其中包含toolchain.cmake交叉编译工具链文件以及编译好的库文件。这是后续 CMake 编译部署示例的关键输入。3. 部署模型准备获取或导出 INT8 量化模型A311D 的 NPU 仅支持 INT8 推理因此部署前必须准备好量化模型。模型准备有三种途径按优先级排列3.1 直接使用 FastDeploy 提供的量化模型FastDeploy 官方提供了 PP-LiteSeg-TSTDC1在 Cityscapes 数据集上训练并量化好的模型。根据 amlogic 部署总览该模型的关键信息如下模型参数文件大小输入 ShapemIoUmIoU (flip)mIoU (msflip)PP-LiteSeg-T(STDC1)-cityscapes-without-argmax31MB1024x51277.04%77.73%77.46%关于量化模型的文件构成文档中特别说明PaddleSeg 量化模型包含model.pdmodel、model.pdiparams、deploy.yaml和subgraph.txt四个文件。FastDeploy 会从deploy.yaml中获取模型推理时需要的预处理信息subgraph.txt是为异构计算而存储的配置文件。其中deploy.yaml是 FastDeploy 推理时读取预处理参数的来源归一化、均值、标准差、输入尺寸等而subgraph.txt决定了哪些算子跑在 NPU、哪些算子回退到 ARM CPU详见 3.3 节。3.2 自行导出并量化模型若 FastDeploy 提供的模型不满足需求可以按两步流程自行生产动态图模型导出为推理静态图将 PaddleSeg 训练出的动态图模型导出为推理静态图模型导出步骤详见 docs/model_export_cn.md。需要特别注意的是A311D 仅支持 INT8 量化模型这与 CPU/GPU 上常见的 FP32 部署有本质区别。INT8 量化压缩将推理模型量化为 INT8可使用 FastDeploy 提供的一键模型自动化压缩工具。详见 量化模型部署指南。关于量化量化部署文档 还给出一个重要提示自行量化的模型文件夹内不包含deploy.yaml需要从 FP32 模型文件夹下复制deploy.yaml到量化模型文件夹内FastDeploy 才能正确读取预处理信息。模型支持范围方面PaddleSeg 2.6 以上的分割模型均可尝试导出目前已在 A311D 上验证过可成功部署的是 PP-LiteSeg 系列模型。PP-LiteSeg 是面向实时语义分割的轻量级模型通过 Flexible and Lightweight DecoderFLD、Unified Attention Fusion ModuleUAFM和 Simple Pyramid Pooling ModuleSPPM三个模块在精度与速度之间取得平衡很适合部署在 A311D 这类边缘设备上。3.3 异构计算与 subgraph.txtNPU 算子回退机制如果自行导出或训练的模型出现精度下降或者报错往往意味着 NPU 上某些算子支持不佳。此时需要使用异构计算方案让模型中的部分算子跑在 A311D 的 ARM CPU 上进行调试和精度验证其余算子仍跑在 NPU 上。异构计算所需的文件正是subgraph.txt。在infer.cc中可以看到它的加载方式fastdeploy::RuntimeOption option; option.UseTimVX(); option.SetLiteSubgraphPartitionPath(subgraph_file);SetLiteSubgraphPartitionPath指定了 Paddle-Lite 的算子子图划分路径文件FastDeploy 依据该文件将模型图划分为NPU 子图 CPU 子图分别执行。当整个模型在 NPU 上跑不通或精度不达标时通过调整subgraph.txt将问题算子划入 CPU 子图即可定位问题并逐步恢复精度。4. 在 A311D 上部署 PP-LiteSeg 量化模型完整实战流程以下步骤对应原文档的核心操作流程全部命令均可直接复制执行。假设你已经完成 FastDeploy 的 A311D 交叉编译得到了fastdeploy-timvxSDK 目录。4.1 获取 PaddleSeg 仓库与 FastDeploy 编译产物git clone https://gitcode.com/gh_mirrors/pa/PaddleSeg.git # 注意如果当前分支找不到下面的 fastdeploy 测试代码请切换到 develop 分支 # git checkout develop # 将编译好的 FastDeploy 产物拷贝到部署示例目录 cp -r FastDeploy/build/fastdeploy-timvx/ path/to/PaddleSeg/deploy/fastdeploy/semantic_segmentation/amlogic/a311d/cpp如果是在本仓库的 develop 分支操作则该目录下应能看到infer.cc、CMakeLists.txt、run_with_adb.sh三个文件与本指南完全对应。4.2 下载部署所需的模型与示例图片cd path/to/PaddleSeg/deploy/fastdeploy/semantic_segmentation/amlogic/a311d/cpp mkdir models mkdir images wget https://bj.bcebos.com/fastdeploy/models/rk1/ppliteseg.tar.gz tar -xvf ppliteseg.tar.gz cp -r ppliteseg models wget https://paddleseg.bj.bcebos.com/dygraph/demo/cityscapes_demo.png cp -r cityscapes_demo.png imagesppliteseg.tar.gz解压后即为 3.1 节表格中的 PP-LiteSeg-T 量化模型包含model.pdmodel、model.pdiparams、deploy.yaml、subgraph.txt四个文件cityscapes_demo.png是用于验证推理效果的 Cityscapes 示例街景图。4.3 交叉编译部署示例cd path/to/PaddleSeg/deploy/fastdeploy/semantic_segmentation/amlogic/a311d/cpp mkdir build cd build cmake -DCMAKE_TOOLCHAIN_FILE${PWD}/../fastdeploy-timvx/toolchain.cmake \ -DFASTDEPLOY_INSTALL_DIR${PWD}/../fastdeploy-timvx \ -DTARGET_ABIarm64 .. make -j8 make install # 成功编译之后会生成 install 文件夹里面有一个运行 demo 和部署所需的库三个 CMake 参数的含义参数作用CMAKE_TOOLCHAIN_FILE指定 FastDeploy 提供的交叉编译工具链文件决定编译器、链接器与 sysrootFASTDEPLOY_INSTALL_DIRFastDeploy SDK 安装目录CMake 通过其中的FastDeploy.cmake引入头文件与库TARGET_ABI目标平台 ABIA311D 为 64 位系统填arm64make install执行后build/install目录下将生成可执行程序infer_demo、models/与images/目录由 CMakeLists 的 install 规则自动拷贝、lib/全部运行所需的.so动态库以及run_with_adb.sh。4.4 基于 ADB 部署到 A311D 并运行# 进入 install 目录 cd path/to/PaddleSeg/deploy/fastdeploy/semantic_segmentation/amlogic/a311d/cpp/build/install/ cp ../../run_with_adb.sh . # 命令格式bash run_with_adb.sh 需要运行的demo 模型路径 图片路径 设备的DEVICE_ID bash run_with_adb.sh infer_demo ppliteseg cityscapes_demo.png $DEVICE_ID其中$DEVICE_ID是 adb 设备号多设备场景下用adb devices查看。脚本执行后会自动完成清理并创建板端工作目录 → push 动态库、demo、模型与图片到 A311D → 设置 NPU 运行环境变量 → 在板端执行infer_demo完成推理。部署成功后程序会在板端输出SegmentationResult的字符串摘要并在当前目录生成可视化结果文件vis_result.jpg可将其adb pull回主机查看分割效果。5. infer.cc 源码剖析TimVX 后端与分割结果可视化部署示例的核心逻辑集中在 infer.cc 的InitAndInfer函数中代码量虽少却完整覆盖了模型加载 → 后端配置 → 推理 → 可视化四个环节void InitAndInfer(const std::string model_dir, const std::string image_file) { auto model_file model_dir sep model.pdmodel; auto params_file model_dir sep model.pdiparams; auto config_file model_dir sep deploy.yaml; auto subgraph_file model_dir sep subgraph.txt; fastdeploy::vision::EnableFlyCV(); fastdeploy::RuntimeOption option; option.UseTimVX(); option.SetLiteSubgraphPartitionPath(subgraph_file); auto model fastdeploy::vision::segmentation::PaddleSegModel( model_file, params_file, config_file, option); assert(model.Initialized()); auto im cv::imread(image_file); fastdeploy::vision::SegmentationResult res; if (!model.Predict(im, res)) { 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); std::cout Visualized result saved in ./vis_result.jpg std::endl; }逐段解读其中的关键设计1模型文件四件套的拼装。model.pdmodel网络结构、model.pdiparams权重、deploy.yaml预处理配置、subgraph.txt异构子图划分四者缺一不可恰好对应 3.1 节关于量化模型文件构成的说明。sep变量兼容 Windows 与 Linux 的路径分隔符便于跨平台调试。2EnableFlyCV()与图像解码加速。FlyCV 是 FastDeploy 内置的高性能图像处理库在移动端/嵌入式平台用于加速imread等图像编解码操作这是边缘端推理性能优化的常用手段。3option.UseTimVX()开启 NPU 后端。TimVX 是芯原 NPU 的运行时接口这一行是算力落到 NPU的关键开关配合SetLiteSubgraphPartitionPath(subgraph_file)完成异构计算配置见 3.3 节。从源码结构看该示例通过 Paddle-Lite 的 RuntimeOption 完成后端选择体现了 FastDeploy一套 API 多后端切换的设计理念。4PaddleSegModel与SegmentationResult。PaddleSegModel是 FastDeploy 视觉分割模块的统一封装构造函数依次接收模型、参数、配置与运行时选项推理结果封装在SegmentationResult中通过res.Str()打印类别分布等摘要信息通过fastdeploy::vision::VisSegmentation(im, res, 0.5)将分割掩膜以 0.5 透明度叠加到原图并保存为vis_result.jpg。5main 函数的命令行约定if (argc 3) { std::cout Usage: infer_demo path/to/quant_model path/to/image e.g ./infer_demo ./ResNet50_vd_quant ./test.jpeg std::endl; return -1; } std::string model_dir argv[1]; std::string test_image argv[2];infer_demo接收两个必选参数量化模型目录路径与测试图片路径这正是 4.4 节run_with_adb.sh infer_demo ppliteseg cityscapes_demo.png中后两个参数的直接消费方。6. CMakeLists.txt 与 run_with_adb.sh工程化部署细节6.1 CMakeLists.txt 的交叉编译组织CMakeLists.txt 展示了 FastDeploy 嵌入式部署的标准工程组织方式include(${FASTDEPLOY_INSTALL_DIR}/FastDeploy.cmake) include_directories(${FASTDEPLOY_INCS}) include_directories(${FastDeploy_INCLUDE_DIRS}) add_executable(infer_demo ${PROJECT_SOURCE_DIR}/infer.cc) target_link_libraries(infer_demo ${FASTDEPLOY_LIBS}) set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/build/install) install(TARGETS infer_demo DESTINATION ./) install(DIRECTORY models DESTINATION ./) install(DIRECTORY images DESTINATION ./) file(GLOB_RECURSE FASTDEPLOY_LIBS ${FASTDEPLOY_INSTALL_DIR}/lib/lib*.so*) file(GLOB_RECURSE ALL_LIBS ${FASTDEPLOY_INSTALL_DIR}/third_libs/install/lib*.so*) list(APPEND ALL_LIBS ${FASTDEPLOY_LIBS}) install(PROGRAMS ${ALL_LIBS} DESTINATION lib) file(GLOB ADB_TOOLS run_with_adb.sh) install(PROGRAMS ${ADB_TOOLS} DESTINATION ./)要点解读通过FastDeploy.cmake统一引入头文件搜索路径FASTDEPLOY_INCS、FastDeploy_INCLUDE_DIRS与链接库FASTDEPLOY_LIBS使用者无需手动管理复杂的依赖关系install规则将可执行程序、模型目录、图片目录与全部.so动态库含 FastDeploy 自身及third_libs中的第三方依赖统一收集到build/install使得 install 目录成为自包含的可整体推送到板端的部署包脚本run_with_adb.sh也被纳入 install方便直接进入install目录后一键部署。6.2 run_with_adb.sh 的板端运行逻辑run_with_adb.sh 定义了四个依次递增的输入参数demo 名、模型名、图片名、设备 ID均有默认值兜底。脚本核心分三部分设置 NPU 运行环境变量EXPORT_ENVIRONMENT_VARIABLESexport GLOG_v5; export VIV_VX_ENABLE_GRAPH_TRANSFORM-pcq:1; export VIV_VX_SET_PER_CHANNEL_ENTROPY100; export TIMVX_BATCHNORM_FUSION_MAX_ALLOWED_QUANT_SCALE_DEVIATION300000; export VSI_NN_LOG_LEVEL5; EXPORT_ENVIRONMENT_VARIABLES${EXPORT_ENVIRONMENT_VARIABLES}export LD_LIBRARY_PATH${WORK_SPACE}/lib:\$LD_LIBRARY_PATH;这些变量直接面向芯原 NPU 的运行时行为VIV_VX_ENABLE_GRAPH_TRANSFORM控制图变换含 per-channel quantization 优化-pcq:1表示开启VIV_VX_SET_PER_CHANNEL_ENTROPY调节逐通道熵量化参数TIMVX_BATCHNORM_FUSION_MAX_ALLOWED_QUANT_SCALE_DEVIATION控制 BN 算子融合时允许的量化尺度偏差上限GLOG_v与VSI_NN_LOG_LEVEL则控制 Paddle-Lite 与 NPU 驱动日志的详细程度。当模型精度异常时调大这些日志级别可以拿到算子级调试信息这是排查 NPU 推理问题的实用技巧。数据推送通过adb push将lib、demo、models、images依次推送到板端工作目录/data/local/tmp/test。板端执行设置好LD_LIBRARY_PATH指向板端lib目录后运行./infer_demo ./models/${MODEL_NAME} ./images/$IMAGE_NAME与 5 节中 main 函数的参数约定严格对应。7. 部署结果验证与常见问题排查成功判据run_with_adb.sh执行后板端输出SegmentationResult摘要并提示Visualized result saved in ./vis_result.jpg将vis_result.jpg拉回主机即可目视检查分割掩膜与道路、车辆等 Cityscapes 类别的贴合度。常见问题与对应解法现象排查方向模型推理报错或精度明显下降按 3.3 节启用异构计算调整subgraph.txt将异常算子划入 CPU 子图定位问题找不到deploy.yaml或预处理信息异常确认量化模型目录下是否缺失deploy.yaml从 FP32 模型目录复制补齐见 3.2 节板端运行库缺失确认install/lib中所有.so均已 push且LD_LIBRARY_PATH正确指向板端lib目录需要算子级调试信息调大GLOG_v、VSI_NN_LOG_LEVEL日志等级重新运行8. 更多指南部署方案总览与模型精度基准amlogic 部署总览量化模型部署总览与硬件支持矩阵量化模型部署指南全部 FastDeploy 部署 PaddleSeg 模型的入口deploy/fastdeploy/semantic_segmentationPP-LiteSeg 模型结构与训练配置configs/pp_liteseg/README.mdPaddleSeg 静态图模型导出docs/model_export_cn.mdPaddleSeg C API 文档FastDeploy 视觉分割模块的 C API 参考fastdeploy::vision::segmentation命名空间涵盖本文使用的PaddleSegModel与SegmentationResult等类型本文完整覆盖了环境准备 → 模型准备 → 交叉编译 → ADB 板端部署 → 源码解读 → 问题排查的闭环基于infer.cc、CMakeLists.txt、run_with_adb.sh三个仓库文件即可独立复现整套 A311D NPU 部署流程。若需适配其他芯原 NPU 芯片如 C308X、S905D3在满足未大幅修改芯原底层库前提下本方案同样适用。赞分享人工智能计算机视觉预训练【免费下载链接】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点击查看免费下载相关推荐基于 FastDeploy 的 PP-YOLOE 量化模型晶晨 A311D C 部署实战指南基于 FastDeploy 的 PP YOLOE 量化模型晶晨 A311D C 部署实战指南 本篇技术指南围绕 PaddleDetection 提供的 A3人工智能深度学习计算机视觉PaddleSeg 语义分割模型在晶晨 A311D芯原 NPU上的 FastDeploy 部署实战指南PaddleSeg 语义分割模型在晶晨 A311D芯原 NPU上的 FastDeploy 部署实战指南 晶晨 A311D 是集成芯原VeriSilicon人工智能计算机视觉预训练PaddleDetection 检测模型在晶晨 A311D 上的 NPU 部署FastDeploy Paddle Lite 量化模型实战指南PaddleDetection 检测模型在晶晨 A311D 上的 NPU 部署FastDeploy Paddle Lite 量化模型实战指南 本指南以 P人工智能深度学习计算机视觉上一篇system-design-notes邮件接收流程深度解析DNS MX记录查找全图解下一篇企业级统一元数据湖Apache Gravitino如何重塑数据治理架构创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表