ARTICLE DETAIL

资讯详情

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

PaddleDetection 基于 Arm Virtual Hardware 在 Cortex-M55 裸机部署 PP-PicoDet 目标检测模型完整指南

PaddleDetection 基于 Arm Virtual Hardware 在 Cortex-M55 裸机部署 PP-PicoDet 目标检测模型完整指南 PaddleDetection 基于 Arm Virtual Hardware 在 Cortex-M55 裸机部署 PP-PicoDet 目标检测模型完整指南【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleDetection本文基于 PaddleDetection 仓库中的 deploy/third_engine/demo_avh 示例系统讲解如何将 PP-PicoDet 目标检测模型部署到 Arm® Cortex®-M55 CPU 的裸机bare metal环境并通过 Arm Virtual HardwareAVH虚拟硬件平台完成仿真运行与结果验证。读者可以从中掌握 AVH 环境搭建、TVMtvmc模型编译、图像到 C 数组转换、裸机交叉编译、仿真器运行以及自定义输入图片的完整端到端流程并理解 PicoDet 模型结构与底层部署原理。概览在裸机 Cortex-M55 上运行 PP-PicoDetdeploy/third_engine/demo_avh目录包含一个完整的示例将 PaddleDetection 的 PP-PicoDet 目标检测模型运行在 Arm Cortex-M55 CPU 的裸机无操作系统环境上并使用 Arm Virtual Hardware 进行仿真验证。整个示例的自动化流程由 run_demo.sh 脚本驱动它会依次完成环境准备按需自动安装依赖、下载 PP-PicoDet 推理模型、使用 tvmc 将模型编译为面向 Cortex-M55 与 CMSIS-NN 的代码、把输入图片转换为 C 数组头文件、构建裸机可执行程序、在基于 Arm Corstone-300 软件的虚拟硬件上运行最后在仿真串口UART输出检测框坐标、类别与置信度分数。上图为本示例默认使用的 640×640 公园场景测试图片COCO 风格含人物等目标用于验证裸机推理流程的输出结果。运行环境与前置条件根据运行环境的不同前置条件分为三种情况Case 1Arm Virtual Hardware AMI 实例推荐在 AWS / AWS 中国区提供的 Arm Virtual Hardware Amazon Machine ImageAMI实例中运行时所需软件会通过 configure_avh.sh 脚本自动安装无需手动干预。Case 2TVM 提供的 ci_cpu Docker 容器使用 TVM 官方 ci_cpu Docker 容器时所需软件已预先安装可直接运行示例。Case 3手动安装依赖若不在上述两种环境中需要自行安装以下软件基于 Arm Corstone-300 软件的 Fixed Virtual PlatformFVPCMake 3.19.5Arm 提供的 GCC 交叉编译工具链arm-none-eabi-gccArm Ethos-U NPU 驱动栈CMSISCortex 微控制器软件接口标准本目录 requirements.txt 中列出的 Python 库paddlepaddle、numpy、opencv-python可通过以下命令安装 Python 依赖pip install -r ./requirements.txt在 Case 2 与 Case 3 中还需要将 CMake 与 FVP 的可执行文件路径加入PATH环境变量。例如安装到/opt/arm时export PATH/opt/arm/FVP_Corstone_SSE-300/models/Linux64_GCC-6.4:/opt/arm/cmake/bin:$PATH此外还需要 TVM可通过 TLCPack 安装或从源码构建从源码构建时需在config.cmake中设置以下开关set(USE_CMSISNN ON) set(USE_MICRO ON) set(USE_LLVM ON)说明FVP、CMSIS、TVM 等均为第三方工具具体获取与安装方式以其官方发布渠道为准本文不作外部链接展开。运行演示应用基础运行命令在满足上述任一环境条件后执行./run_demo.sh在 AWS / AWS 中国区 AVH AMI 实例中运行时脚本会自动安装所有依赖并完成从下载模型到输出检测结果的完整流程。使用本地 FVP 运行如果无法使用云端 AVH AMI 实例可通过--enable_FVP 1参数让应用运行在本地 FVP 可执行文件上./run_demo.sh --enable_FVP 1指定 CMSIS 与 Ethos-U 平台路径当 Ethos-U 平台或 CMSIS 未安装在默认路径/opt/arm/ethosu时可通过参数显式指定./run_demo.sh --cmsis_path /home/tvm-user/cmsis \ --ethosu_platform_path /home/tvm-user/ethosu/core_platform脚本支持的完整参数从 run_demo.sh 的show_usage()函数可以看到脚本支持的全部参数参数说明-h, --help显示帮助信息--cmsis_path CMSIS_PATH设置 CMSIS 的路径--ethosu_platform_path ETHOSU_PLATFORM_PATH设置 Arm Ethos-U core platform 的路径--fvp_path FVP_PATH设置 FVP 的路径脚本会自动拼接models/Linux64_GCC-6.4子目录加入PATH--cmake_path设置 cmake 的路径--enable_FVP设为1时使用本地 FVP 可执行文件运行0默认时使用云端 AVH运行流程详解源码级1. 环境初始化与参数解析脚本启动后先设置默认的交叉编译工具链路径/opt/arm/gcc-arm-none-eabi/bin并通过sudo pip install -r ./requirements.txt安装 Python 依赖随后逐项解析命令行参数。根据--enable_FVP的值选择仿真平台默认使用VHT_Corstone_SSE-300_Ethos-U55云端 AVH本地模式使用FVP_Corstone_SSE-300_Ethos-U55若选择云端模式且/opt/arm/不存在脚本会自动调用sudo ./configure_avh.sh完成环境安装。2. 下载 PaddlePaddle 推理模型脚本会下载 PaddlePaddle 推理格式的picodet_s_320_coco_lcnet_no_nms模型包并解压wget https://bj.bcebos.com/v1/paddledet/deploy/Inference/picodet_s_320_coco_lcnet_no_nms.tar tar -xf picodet_s_320_coco_lcnet_no_nms.tar该模型与 configs/picodet/picodet_s_320_coco_lcnet.yml 训练配置对应输入 320×320、LCNet 主干网络、COCO 80 类且推理时去除了 NMS 后处理no_nms将后处理移交给裸机端 C 代码完成。3. 使用 tvmc 编译模型脚本使用 TVM 的 tvmc 命令行工具将 PaddlePaddle 模型编译为面向 Cortex-M55 与 CMSIS-NN 的 C 代码python3 -m tvm.driver.tvmc compile --targetcmsis-nn,c \ --target-cmsis-nn-mcpucortex-m55 \ --target-c-mcpucortex-m55 \ --runtimecrt \ --executoraot \ --executor-aot-interface-apic \ --executor-aot-unpacked-api1 \ --pass-config tir.usmp.enable1 \ --pass-config tir.usmp.algorithmhill_climb \ --pass-config tir.disable_storage_rewrite1 \ --pass-config tir.disable_vectorize1 picodet_s_320_coco_lcnet_no_nms/model.pdmodel \ --output-formatmlf \ --model-formatpaddle \ --module-namepicodet \ --input-shapes image:[1,3,320,320] \ --outputpicodet.tar关键编译参数说明--targetcmsis-nn,c生成 CMSIS-NN 算子与纯 C 代码混合的目标在 Cortex-M 系列上利用 CMSIS-NN 库加速卷积等算子--target-cmsis-nn-mcpucortex-m55/--target-c-mcpucortex-m55指定目标 CPU 为 Cortex-M55--runtimecrt使用 TVM 的 C Runtime适合无操作系统的裸机环境--executoraotAOTAhead-Of-Time执行器编译期生成静态可调用的推理函数--executor-aot-interface-apic与--executor-aot-unpacked-api1生成 C 接口、非打包unpackedAPI便于裸机代码直接调用--pass-config tir.usmp.enable1启用统一静态内存池USMP在编译期完成静态内存规划避免运行时动态分配这对裸机场景至关重要--input-shapes image:[1,3,320,320]固定输入张量为 NCHW 布局的 1×3×320×320--output-formatmlf输出为 MLFModel Library Format模型库格式--module-namepicodet生成的运行函数命名为tvmgen_picodet_run等与主程序中的调用对应。编译产物picodet.tar解包后将得到codegen/host下的模型生成源码与runtimeCRT目录供后续 Makefile 引用。4. 生成输入与输出 C 头文件python3 ./convert_image.py ./image/000000014439_640x640.jpgconvert_image.py 负责将图片转换为 C 数组并写入头文件include/inputs.h包含输入图像张量数据float input[]声明在.data.tvm段中预处理过程为resize 到模型输入尺寸 → BGR 转 RGB → CHW 转置 → 除以 255 归一化 → 减去 ImageNet 均值[0.485, 0.456, 0.406]并除以标准差[0.229, 0.224, 0.225]include/outputs.h包含输出张量占位数组其中output0为 8500 个 float对应 2125 个候选框 × 4 个坐标值output1为 170000 个 float对应 2125 个候选框 × 80 个类别分数这两个尺寸与 PicoDet 的no_nms输出结构一一对应。生成的头文件通过__attribute__((section(.data.tvm), aligned(16)))将张量数据放到专门的.data.tvm段便于链接脚本统一规划到 DDR 内存区域。5. 交叉编译与仿真运行make使用 Makefile 完成裸机应用的交叉编译核心输入包括主程序 src/demo_bare_metal.cTVM 编译生成的 codegen 源码build/codegen/host/src/*.c与 CRT 运行时stack_allocator.c、crt_backend_api.cCMSIS 设备启动代码CMSIS_PATH/Device/ARM/ARMCM55/Source/*.c与 CMSIS-NN 静态库通过 arm-none-eabi-gcc.cmake 工具链文件以 CMake 构建Corstone-300 平台的 UART 驱动源码core_platform/targets/corstone-300/*.c。编译参数使用-mcpucortex-m55 -mthumb -mfloat-abihard等目标为 ARMCM55链接脚本为 corstone300.ld其内存规划如下内存区域基地址大小用途ITCM0x00000000512KB存放代码只读DTCM0x20000000512KB存放数据读写SSE-300 SRAM0x210000002MB通用 SRAMData SRAM0x010000002MB数据 SRAMDDR0x6000000032MB大容量内存存放模型权重.rodata.tvm/.data.tvm段随后脚本启动仿真平台并运行可执行文件$Platform -C cpu0.CFGDTCMSZ15 \ -C cpu0.CFGITCMSZ15 -C mps3_board.uart0.out_file\-\ -C mps3_board.uart0.shutdown_tag\EXITTHESIM\ \ -C mps3_board.visualisation.disable-visualisation1 -C mps3_board.telnetterminal0.start_telnet0 \ -C mps3_board.telnetterminal1.start_telnet0 -C mps3_board.telnetterminal2.start_telnet0 -C mps3_board.telnetterminal5.start_telnet0 \ ./build/demo --stat其中mps3_board.uart0.out_file-将仿真串口输出重定向到终端shutdown_tagEXITTHESIM用于在应用退出后自动结束仿真。6. 裸机推理主程序剖析src/demo_bare_metal.c 是裸机应用的核心。main()函数先初始化 UART然后构造 TVM 生成的输入/输出结构体并调用推理函数struct tvmgen_picodet_outputs rec_outputs { .output0 output0, .output1 output1, }; struct tvmgen_picodet_inputs rec_inputs { .image input, }; tvmgen_picodet_run(rec_inputs, rec_outputs);推理完成后进入后处理循环对output1中每个候选框共 2125 个按 80 类排布步长 2125遍历所有类别找出最大分数及其类别当分数大于阈值0.1且坐标output0有效时将坐标乘以 2 还原到 640×640 原始图像尺度并打印box: x0, y0, x1, y1, class: 类别ID, score: 置信度这正是模型在训练/推理配置中去除 NMS 后把解码与阈值过滤放到裸机端 C 代码完成的典型实现方式。使用自定义图片convert_image.py 接收一个命令行参数即待转换图片的路径。修改 run_demo.sh 中的以下行即可使用自己的图片python3 ./convert_image.py path/to/image脚本会将该图片执行 resize、颜色空间转换、归一化等预处理后生成include/inputs.h与include/outputs.h两个头文件供主程序编译链接。注意图片内容应尽量与 COCO 80 类目标人、动物、车辆等相关以获得有意义的检测输出。模型介绍PP-PicoDet本示例使用的模型为 PP-PicoDetPaddleDetection 推出的轻量级目标检测模型。得益于其出色的性能表现PP-PicoDet 非常适合部署在移动端或 CPU 等资源受限平台。其对应训练配置位于 configs/picodet/picodet_s_320_coco_lcnet.yml关键结构配置如下主干网络 LCNetscale: 0.75输出特征图feature_maps: [3, 4, 5]特征金字塔 LCPANout_channels: 96检测头 PicoHeadV2feat_in: 96、feat_out: 96、num_convs: 2、share_cls_reg: True、use_se: True训练策略300 个 epoch、use_ema: true、基础学习率 0.32配合 CosineDecay 与 LinearWarmup 调度。推理时模型输入为 1×3×320×320 的归一化图像输出为no_nms形式的候选框坐标张量与类别分数张量与上文 convert_image.py 生成的输出头文件尺寸完全吻合。常见问题与排查建议无法使用云端 AVH 实例改用./run_demo.sh --enable_FVP 1在本地 FVP 上运行CMSIS / Ethos-U 平台不在默认路径通过--cmsis_path与--ethosu_platform_path显式指定如/home/tvm-user/cmsis、/home/tvm-user/ethosu/core_platformtvmc 编译失败确认 TVM 构建时已开启USE_CMSISNN、USE_MICRO、USE_LLVM且PATH中能找到 cmake 与 FVP输出检测结果为空检查输入图片是否与 COCO 类别相关、预处理resize 到 320×320 并归一化是否正确以及后处理阈值0.1是否需要调整链接或运行期内存问题检查 corstone300.ld 中 ITCM/DTCM/DDR 区域配置是否满足模型权重与运行时内存需求例如 CPU 缓存大小通过仿真参数cpu0.CFGDTCMSZ/cpu0.CFGITCMSZ配置。总结通过 deploy/third_engine/demo_avh 示例开发者可以快速将 PaddleDetection 的 PP-PicoDet 模型部署到 Arm Cortex-M55 裸机环境并在 Arm Virtual Hardware 虚拟硬件上完成完整的仿真验证。该示例覆盖了模型下载 → TVM 编译CMSIS-NN CRT AOT→ 图像转 C 数组 → 裸机交叉编译 → 仿真运行与结果输出的嵌入式 AI 部署全链路为移动端与嵌入式端侧部署 PaddleDetection 系列模型提供了可复制的参考方案。【免费下载链接】PaddleDetectionObject Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleDetection创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表