1. MobileSAM模型与全志开发板部署概述
MobileSAM是Meta推出的轻量级图像分割模型,专为移动端和嵌入式设备优化。相比原版SAM模型,MobileSAM在保持较高精度的同时大幅减少了计算量和内存占用。全志T736开发板搭载了专用NPU加速器,非常适合部署这类轻量级AI模型。
在实际部署过程中,我们需要解决几个关键问题:
- 模型输入尺寸需要从1024×1024调整为448×448以适应开发板NPU的限制
- 移除动态输入参数以适配静态优化的NPU推理引擎
- 将PyTorch模型转换为ONNX格式后再转为全志专用NB格式
- 编写前后处理代码处理输入输出数据格式转换
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与模型获取
2.1 开发环境配置
推荐使用Docker容器搭建开发环境,确保环境一致性。可以从全志官方获取基础镜像:
bash复制# 下载全志NPU开发镜像
docker pull allwinnertech/npu:latest
# 创建并进入容器
docker run -it --name mobilesam_dev allwinnertech/npu:latest
容器内已预装:
- 全志NPU工具链(pegasus)
- ONNX运行时
- OpenCV等基础库
2.2 获取MobileSAM模型
官方MobileSAM提供了PyTorch格式的预训练模型:
bash复制git clone https://github.com/facebookresearch/MobileSAM
cd MobileSAM/weights
wget https://dl.fbaipublicfiles.com/mobilesam/mobile_sam.pt
提示:如果仅需快速验证,可以直接使用已转换好的ONNX模型:
bash复制wget http://netstorage.allwinnertech.com:5000/sharing/afYWhQxe3 -O mobilesam_encoder.onnx wget http://netstorage.allwinnertech.com:5000/sharing/rTvBQcLbX -O mobilesam_decoder_sim.onnx
3. 模型转换与优化
3.1 修改模型输入尺寸
由于NPU不支持动态输入,需要将原始1024×1024输入改为固定448×448:
python复制# 修改mobile_sam/build_sam.py
def build_sam_vit_t(checkpoint=None):
prompt_embed_dim = 256
image_size = 448 # 修改为448
vit_patch_size = 16
image_embedding_size = image_size // vit_patch_size
mobile_sam = Sam(
image_encoder=TinyViT(img_size=448, ...), # 同步修改
...)
3.2 导出ONNX模型
使用官方提供的导出脚本,添加--fixed-image-size 448,448参数:
bash复制python export_onnx_models.py \
--checkpoint mobile_sam.pt \
--output mobilesam_
