ARTICLE DETAIL

资讯详情

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

RKNN Model Zoo 实战:MobileSAM 轻量级分割模型在 Rockchip NPU 上的完整部署指南

RKNN Model Zoo 实战:MobileSAM 轻量级分割模型在 Rockchip NPU 上的完整部署指南 示例工程人工智能嵌入式边缘计算计算机视觉模型优化【免费下载链接】rknn_model_zoo项目地址https://gitcode.com/gh_mirrors/rk/rknn_model_zoo点击查看免费下载导读本指南以 rknn_model_zoo 仓库中的 examples/mobilesam 示例 为核心系统讲解如何将 MobileSAM轻量级 Segment Anything Model在 Rockchip 系列 NPU 上完成部署从 ONNX 模型获取、RKNN 模型转换、Python 端推理到 Android / Linux 平台 C 交叉编译与板上运行的全流程。读完本文你将掌握 MobileSAM 的编码器-解码器两段式推理架构、点/框提示point / box prompt的编码约定以及如何在 RK3562、RK3576、RK3588、RV1126B 等平台上落地一个可交互的分割推理应用。1. MobileSAM 技术背景与示例架构Segment Anything ModelSAM可以根据点、框等输入提示prompt生成高质量的物体分割掩码并能为图像中的任意物体生成掩码。MobileSAM 与原始 SAM 保持完全相同的推理流水线唯一差异是将图像编码器image encoder替换为更轻量的版本从而在保证可视化分割质量基本持平的前提下大幅降低计算量更适合部署到边缘端 NPU 平台。在 rknn_model_zoo 的 examples/mobilesam 目录中整个推理流程被拆分为两个独立的 RKNN 模型mobilesam_encoder_tiny图像编码器输入 448×448 的 RGB 图像输出图像嵌入特征image embeddingmobilesam_decoder提示解码器接收图像嵌入、点/框坐标、点标签与可选掩码输入输出 IoU 预测分数与低分辨率分割掩码。这一设计在 C 实现中体现得尤为清晰rknn_app_context_t结构体同时持有encoder与decoder两个独立的 RKNN 上下文见 cpp/mobilesam.h并在 cpp/mobilesam.cc 中先执行inference_mobilesam_encoder_utils得到图像嵌入再将其连同提示输入送入inference_mobilesam_decoder_utils。编码器输出默认是 NCHW 布局送入解码器前需经rknn_nchw_2_nhwc转换为 NHWC见 cpp/postprocess.cc这一点在自行编写推理代码时务必留意。2. 当前支持平台根据示例文档本示例支持以下 Rockchip NPU 平台平台说明RK3562中低端边缘 SoCRK3576新一代高性能边缘 SoCRK3588旗舰级边缘 SoCRV1126B轻量级视觉处理平台模型转换与板端推理均需在上述平台范围内指定TARGET_PLATFORM。不同平台、不同版本的 RKNN 工具链与驱动推理结果可能存在细微差异。3. 获取预训练 ONNX 模型示例所需的两个 ONNX 模型mobilesam_encoder_tiny.onnx与mobilesam_decoder.onnx由官方预置下载脚本提供位于 examples/mobilesam/model/download_model.sh。执行cd examples/mobilesam/model ./download_model.sh脚本通过wget将编码器与解码器 ONNX 模型下载到当前目录。下载完成后model/目录下应包含mobilesam_encoder_tiny.onnx图像编码器模型mobilesam_decoder.onnx提示解码器模型picture.jpg示例测试图片769×770coords.txt、labels.txt示例使用的点/框提示文件详见第 6 节。4. 将 ONNX 模型转换为 RKNN4.1 转换命令进入python目录执行转换脚本cd examples/mobilesam/python python convert.py onnx_model TARGET_PLATFORM output_rknn_path(optional) # 例如为 RK3588 转换编码器模型 python convert.py ../model/mobilesam_encoder_tiny.onnx rk3588 # 输出模型将保存为 ../model/mobilesam_encoder_tiny.rknn参数说明onnx_model指定 ONNX 模型路径TARGET_PLATFORM指定 NPU 平台名称可选值见第 2 节支持平台列表output_rknn_path可选指定 RKNN 模型保存路径默认保存到 ONNX 模型同目录命名为mobilesam_encoder_tiny.rknn。值得注意的是示例在python/encoder/convert.py与python/decoder/convert.py中分别放置了编码器与解码器的独立转换逻辑并提供了 python/convert.sh 一键转换脚本。若编码器与解码器需要采用不同的量化策略例如解码器对精度更敏感、建议保留 fp16可以分别执行转换。4.2 转换要点fp16 与量化选择MobileSAM 的分割质量对解码器输出较为敏感示例在 Android / Linux 板端运行命令中使用的模型文件名为mobilesam_encoder_tiny_fp16.rknn与mobilesam_decoder_fp16.rknn说明该示例推荐使用fp16 精度部署以兼顾速度与分割精度。若使用 INT8 量化建议结合 FAQ.md 中关于量化精度问题的说明进行验证。5. Python 端推理 Demo5.1 运行命令cd examples/mobilesam/python # 使用 RKNN 模型推理 python mobilesam.py --encoder rknn_model --decoder rknn_model --target TARGET_PLATFORM常用参数来自 python/mobilesam.py 的 argparse 定义参数说明默认值--encoder编码器 RKNN 模型路径必填无--decoder解码器 RKNN 模型路径必填无--targetNPU 平台名称如rk3576必填无--img输入图像路径../model/picture.jpg--point_coords点与框坐标输入。框用两个点编码左上角与右下角例如[[400, 400], [0, 0]]两个点或[[190, 70], [460, 280]]一个框[[190, 70], [460, 280]]--point_labels点标签0为负样本点1为正样本点2为框左上角3为框右下角-1为填充点若无框输入需拼接一个标签为-1、坐标为(0.0, 0.0)的填充点[2, 3]--mask_input掩码输入路径.npy格式默认全零None5.2 交互式获取点/框坐标要准确获取图像中的点或框坐标可使用配套交互工具见 python/get_point_coords.py 与 python/get_box_coords.pypython get_point_coords.py # 在弹出的图像窗口中点击所需点控制台会打印该点坐标 (x, y) python get_box_coords.py # 在图像中按住鼠标左键拖拽出目标框控制台会打印框的左上角与右下角坐标这两个工具基于 OpenCV 鼠标回调实现get_point_coords.py在EVENT_LBUTTONDOWN时记录点击坐标并打印get_box_coords.py则通过拖拽起始点与结束点生成框的两个角点。获取到的坐标可直接填回--point_coords/--point_labels参数。5.3 源码级理解预处理、推理与后处理以 python/mobilesam.py 为参考整个 Python 流水线分三步1图像预处理letterbox 保持纵横比img_preprocess首先按IMG_SIZE 448计算缩放比例scale 448 / max(oldh, oldw)将长边缩放到 448短边按同比例缩放并四舍五入取整随后将图像 resize 到(newh, neww)再通过cv2.copyMakeBorder在右侧与下方补零填充到 448×448最后转为 float32 并扩展 batch 维度得到(1, 448, 448, 3)的输入张量。2提示坐标缩放coords_preprocess需要将原始图像坐标系下的点/框坐标映射到预处理后的 448×448 坐标空间coords[..., 0] * neww / oldw、coords[..., 1] * newh / oldh。这正是点/框提示必须与图像同步缩放的原因。3解码器输出后处理postprocess将解码器输出的低分辨率掩码先双线性插值到 448×448裁剪掉 letterbox 填充区域masks[..., :input_shape[0], :input_shape[1]]再插值回原始图像尺寸随后以MASK_THRESHOLD 0.0二值化并用np.argmax(scores)选择 IoU 分数最高的掩码结果进行叠加绘制颜色 RGB(144, 144, 30)透明度 0.5。推理侧encoder_run与decoder_run分别加载编码器、解码器 RKNN 模型并调用rknn.inference。解码器共 5 个输入img_embeds、point_coords、point_labels、mask_input默认(1, 1, 112, 112)全零与has_mask_input无掩码输入时为 0并显式指定data_formatNCHW。这与第 1 节描述的 SAM 提示解码器输入约定一致。6. C 端部署Android / LinuxC Demo 提供与 Python 等价的推理能力适用于板端集成。程序入口见 cpp/main.cc命令行共 6 个参数./rknn_mobilesam_demo encoder_model_path image_path decoder_model_path point_coords_path point_labels_path其中点/框提示从文本文件读取read_coords_from_file见 cpp/preprocess.cc逐行读取坐标每行两个数值x ycoords_nums与labels_nums必须相等否则程序报错退出。示例文件内容为model/coords.txt190 70 460 280model/labels.txt2 3即一个以 (190, 70) 为左上角、(460, 280) 为右下角的框标签 2、3 分别表示左上与右下角点。推理完成后结果保存为out.pngPython 端保存为result.jpg。6.1 Android 平台编译与构建回到仓库根目录cd /data/web/disk1/git_repo/gh_mirrors/rk/rknn_model_zoo export ANDROID_NDK_PATHandroid_ndk_path ./build-android.sh -t TARGET_PLATFORM -a ARCH -d mobilesam # 例如 ./build-android.sh -t rk3588 -a arm64-v8a -d mobilesam参数说明android_ndk_pathAndroid NDK 路径TARGET_PLATFORMNPU 平台名称见第 2 节ARCH设备系统架构。查询方式# Android 设备应显示 [arm64-v8a 或 armeabi-v7a] adb shell cat /proc/version推送 demo 到设备设备通过 USB 连接adb root adb remount adb push install/TARGET_PLATFORM_android_ARCH/rknn_mobilesam_demo/ /data/运行adb shell cd /data/rknn_mobilesam_demo export LD_LIBRARY_PATH./lib ./rknn_mobilesam_demo mobilesam_encoder_tiny_fp16.rknn model/picture.jpg mobilesam_decoder_fp16.rknn model/coords.txt model/labels.txt运行结束后在板端生成out.png可通过以下命令拉回宿主机查看adb pull /data/rknn_mobilesam_demo/out.png6.2 Linux 平台编译与构建cd /data/web/disk1/git_repo/gh_mirrors/rk/rknn_model_zoo # 若构建时找不到 GCC_COMPILER请显式指定交叉编译器路径 export GCC_COMPILERGCC_COMPILER_PATH ./build-linux.sh -t TARGET_PLATFORM -a ARCH -d mobilesam # 例如 ./build-linux.sh -t rk3588 -a aarch64 -d mobilesam参数说明GCC_COMPILER_PATHGCC 交叉编译器路径TARGET_PLATFORMNPU 平台名称ARCH设备系统架构。查询方式# Linux 设备应显示 [aarch64 或 armhf] adb shell cat /proc/version推送 demo 到设备若设备通过 USB 连接adb push install/TARGET_PLATFORM_linux_ARCH/rknn_mobilesam_demo/ /userdata/其他开发板可使用scp等方式将install/TARGET_PLATFORM_linux_ARCH/rknn_mobilesam_demo/下的全部文件拷贝到/userdata。运行adb shell cd /userdata/rknn_mobilesam_demo export LD_LIBRARY_PATH./lib ./rknn_mobilesam_demo mobilesam_encoder_tiny_fp16.rknn model/picture.jpg mobilesam_decoder_fp16.rknn model/coords.txt model/labels.txt结果同样保存为out.png拉回查看adb pull /userdata/rknn_mobilesam_demo/out.png6.3 C 实现要点模型初始化init_mobilesam_model_utils见 cpp/rknpu2/rknn_mobilesam_utils/rknn_mobilesam_utils.cc调用rknn_init加载模型并通过rknn_query(RKNN_QUERY_IN_OUT_NUM / RKNN_QUERY_INPUT_ATTR / RKNN_QUERY_OUTPUT_ATTR)查询输入输出张量的维度、格式、量化参数等据此判断模型输入是 NCHW 还是 NHWC 布局预处理pre_process与 Python 端一致——按IMG_SIZE448等比缩放后 letterbox 补零再拷贝到image_buffer_t目标缓冲见 cpp/preprocess.cc坐标缩放point_coords_preprocess将原始坐标按new_shape / ori_shape比例映射到 448 输入空间后处理post_process先对iou_predictions做argmax选出分数最高的掩码将低分辨率掩码插值到 448×448裁剪填充区域后插值回原图尺寸再以阈值 0 二值化draw_mask按 RGB(30, 144, 144)、透明度 0.5 将掩码叠加到原图见 cpp/postprocess.cc提示可视化main.cc根据标签绘制提示——标签 0 画红色圆点、标签 1 画绿色圆点、标签 2/3 组合绘制绿色矩形框与 Python 端draw函数行为一致。构建配置参见 cpp/CMakeLists.txt可执行文件由main.cc、postprocess.cc、preprocess.cc、rknn_mobilesam_utils.cc与mobilesam.cc组成链接imageutils、imagedrawing、fileutils、RKNN Runtime 与 OpenCVinstall规则会将coords.txt、labels.txt、picture.jpg及所有.rknn模型文件一并安装到model/目录保证板端开箱即用。7. 预期结果以示例测试图model/picture.jpg与默认框提示运行后程序会打印推理信息并将分割结果叠加绘制到原图。以下是示例在板端运行后的输出效果绿色矩形框为输入的提示框左上角 (190, 70)、右下角 (460, 280)被选中的目标以半透明青色掩码RGB 30,144,144高亮不同平台、不同版本的 RKNN 工具链与驱动输出掩码细节可能存在细微差异属正常现象。8. 参考与延伸若需了解更完整的 RKNN 部署说明与 ONNX 导出细节仓库根目录的 FAQ.md 与 README_CN.md 提供了通用性指导若想在其他模型上复用两段式“编码器 轻量解码器”的部署范式可参考仓库中同样采用 RKNN 推理的 examples/clip双模型文本-图像编码等示例板端 C Demo 依赖的通用图像读写、绘制工具位于 utils 目录可复用于自定义分割/检测应用的二次开发。赞分享示例工程人工智能嵌入式边缘计算计算机视觉模型优化【免费下载链接】rknn_model_zoo项目地址https://gitcode.com/gh_mirrors/rk/rknn_model_zoo点击查看免费下载相关推荐RKNN Model Zoo 部署指南主流算法在 Rockchip NPU 上的转换、编译与推理实战RKNN Model Zoo 部署指南主流算法在 Rockchip NPU 上的转换、编译与推理实战 导读 本文基于 rknn_model_zoo 仓库的 R示例工程人工智能嵌入式边缘计算计算机视觉模型优化终极RKNN-Toolkit2实战指南AI模型在Rockchip NPU上的完整部署方案终极RKNN Toolkit2实战指南AI模型在Rockchip NPU上的完整部署方案 工具概述 RKNN Toolkit2是Rockchip专为AI模型部人工智能模型编译模型量化嵌入式深度学习RKNN Model Zoo 终极指南深度学习模型部署与 NPU 加速完整教程RKNN Model Zoo 终极指南深度学习模型部署与 NPU 加速完整教程 想要在嵌入式设备上快速部署深度学习模型Rockchip NPU 平台为开发者示例工程人工智能嵌入式边缘计算计算机视觉模型优化上一篇智能拦截技术noTunes彻底解决macOS音乐应用自动启动难题下一篇如何用Uncle小说打造个人专属电子书库新手必备的5个实用技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表