Skip to content

SAM2 部署

介绍

Segment-Anything-Model-2 (简称 SAM 2) 是 Meta AI 发布的下一代视觉分割基础模型,支持对图像和视频中的任意物体进行实时交互式分割。相比先前版本,SAM 2 在视频分割上采用通用 Transformer 架构并集成流式内存机制,使其在少量交互提示下即能实现精确、持续的目标跟踪。

本章节将演示如何在边缘设备上完成 SAM2 部署、加载与推理流程。提供以下方式部署:

  • AidLite Python API

在本案例中,模型推理运行在设备端 NPU 计算单元,通过代码调用相关接口接收用户输入并返回结果。

  • 设备:Rhino Pi-X1
  • 系统:Ubuntu 22.04
  • 源模型:SAM2 Tiny
  • 模型精度:FP16
  • Model Farm 模型参考:SAM2 Tiny

支持平台

平台运行方式
Rhino Pi-X1Ubuntu 22.04, AidLux

准备工作

  1. Rhino Pi-X1 硬件
  2. Ubuntu 22.04 系统或 AidLux 系统

下载 SAM2-tiny-FP16 模型资源

bash
mms list sam2-tiny

#------------------------可以看到 sam2-tiny 模型------------------------
Model      Precision  Chipset           Backend
-----      ---------  -------           -------
SAM2-tiny  FP16       Qualcomm QCS8550  QNN2.36

# 下载 SAM2-tiny-FP16
mms get -m SAM2-tiny -p fp16 -c qcs8550 -b qnn2.36 -d /home/aidlux/sam2-tiny
cd /home/aidlux/sam2-tiny
# 解压
unzip sam2_qcs8550_qnn2.36_fp16_aidlite.zip

💡注意

开发者也可以在 Model Farm 网页上搜索并下载

AidLite SDK 安装

开发者也可以参考模型文件夹中的 README.md 安装 SDK

  • 确保 QNN 后端版本 ≥ 2.36
  • 确保 aidlite-sdkaidlite-qnnxxx 的版本是 2.3.x
bash
# AidLite & QNN 版本检查
dpkg -l | grep aidlite
#------------------------ 可以看到类似如下输出 ------------------------
ii  aidlite-qnn236       2.3.0.230         arm64        aidlux aidlite qnn236 backend plugin
ii  aidlite-sdk          2.3.0.230         arm64        aidlux inference module sdk

QNN & AidLite 版本更新

bash
# 安装 AidLite SDK
sudo aid-pkg update
sudo aid-pkg install aidlite-sdk
sudo aid-pkg install aidlite-qnn236

# aidlite sdk c++ check
python3 -c "import aidlite; print(aidlite.get_library_version())"

# aidlite sdk python check
python3 -c "import aidlite; print(aidlite.get_py_library_version())"

AidLite Python API 部署

运行 Python API 例子

bash
cd /home/aidlux/sam2-tiny/model_farm_sam2_qcs8550_qnn2.36_fp16_aidlite

# --imgs: 图片输入
# --point-coordinates: 坐标
# --invoke_nums: 循环次数
python3  python/run_test.py  --imgs python/truck.jpg  --point-coordinates "500,375;1100,600"   --invoke_nums 10

可以在命令行看到模型推理耗时 (单位 ms)以及分割结果:

plain
====================================
Encoder model invoke 10 times:
 --mean_invoke_time is 216.16535186767578 
 --max_invoke_time is 221.62842750549316 
 --min_invoke_time is 214.51592445373535 
 --var_invoketime is 3.8429782512139354
====================================
[2026-02-10 15:26:06.024] [info] [license.cpp:520] the device is licensed, with license ID: aidf70cf68561ab0f1555c98a624584610b
PluginManager::load_plugin(): plugin(=aidlite_qnn236) has been loaded
w:1800, h:1200
====================================
Decoder model invoke 10 times:
 --mean_invoke_time is 6.911730766296387 
 --max_invoke_time is 7.040739059448242 
 --min_invoke_time is 6.859779357910156 
 --var_invoketime is 0.0025213859089490143
====================================
Result images saved to 'python/mask_results.jpg'

结果图片 mask_results.jpg 保存在路径 /home/aidlux/sam2-tiny/model_farm_sam2_qcs8550_qnn2.36_fp16_aidlite/python