任何移动段 (MobileSAM)
MobileSAM 是专为移动设备和边缘设备设计的紧凑、高效的图像分割模型。其设计旨在将 Meta Segment Anything Model (SAM) 的强大功能,MobileSAM 可提供近乎即时的分割,同时保持与原始SAM 管道的兼容性。无论您是在开发实时应用还是轻量级部署,MobileSAM 都能提供令人印象深刻的分割结果,而对尺寸和速度的要求仅为其前代产品的一小部分。
观看: 如何使用MobileSAM 运行推理Ultralytics | 分步指南 🎉
MobileSAM 已被多个项目采用,包括SAM-SAM、AnyLabeling 和Segment Anything in 3D 等。
在不到一天的时间里,MobileSAM 在单个GPU 上使用 10 万张图像数据集(原始图像的 1%)进行了训练。训练代码将在未来发布。
可用型号、支持的任务和运行模式
下表概述了可用的MobileSAM 模型、预训练权重、支持的任务以及与推理、验证、训练和导出等不同操作模式的兼容性。支持的模式用 ✅ 表示,不支持的模式用 ❌ 表示。
型号 | 预训练重量 | 支持的任务 | 推论 | 验证 | 培训 | 出口 |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
MobileSAM 与YOLO的比较
下面的比较突出了 Meta 的SAM 变体MobileSAM 和Ultralytics 的最小细分模型(包括YOLO11n-seg)之间的差异:
模型 | 大小 (MB) |
参数 (M) |
速度 (CPU) (ms/im) |
---|---|---|---|
MetaSAM-b | 375 | 93.7 | 49401 |
MetaSAM2-b | 162 | 80.8 | 31901 |
MetaSAM2-t | 78.1 | 38.9 | 25997 |
MobileSAM | 40.7 | 10.1 | 25381 |
配备YOLOv8 主干网的FastSAM | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n | 6.7(小 11.7 倍) | 3.4(少 11.4 倍) | 24.5(快 1061 倍) |
Ultralytics YOLO11n-seg | 5.9(小 13.2 倍) | 2.9(少 13.4 倍) | 30.1(快 864 倍) |
这一比较显示了SAM 变体和YOLO 分段模型在模型大小和速度上的巨大差异。SAM 模型具有独特的自动分割功能,而YOLO 模型,尤其是YOLOv8n 和 YOLO11n-seg 则明显更小、更快、计算效率更高。
测试在配备 24GB 内存的 2025 Apple M4 Pro 上进行。 torch==2.6.0
和 ultralytics==8.3.90
.为了重现这些结果:
示例
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.pt", "mobile_sam.pt"]:
model = SAM(file)
model.info()
model(ASSETS)
# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# Profile YOLO models
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
从SAM 到MobileSAM
MobileSAM 保留了与原 SAM,包括预处理、后处理和所有接口。这意味着您可以从SAM 过渡到MobileSAM ,而只需对工作流程做最小的改动。
主要区别在于图像编码器:MobileSAM 以更小的 Tiny-ViT 编码器(5M 参数)取代了原始的 ViT-H 编码器(632M 参数)。在单个GPU 上,MobileSAM 处理图像的时间约为 12 毫秒(编码器 8 毫秒,掩码解码器 4 毫秒)。
基于 ViT 的图像编码器比较
图像编码器 | 原创SAM | MobileSAM |
---|---|---|
参数 | 611M | 5M |
速度 | 452ms | 8ms |
提示引导掩码解码器
掩码解码器 | 原创SAM | MobileSAM |
---|---|---|
参数 | 3.876M | 3.876M |
速度 | 4ms | 4ms |
整条管道比较
整个管道( Enc+Dec) | 原创SAM | MobileSAM |
---|---|---|
参数 | 615M | 9.66M |
速度 | 456ms | 12ms |
下面用点提示和方框提示来说明MobileSAM 和原始SAM 的性能。
MobileSAM 比FastSAM 小约 5 倍,速度快约 7 倍。更多详情,请访问MobileSAM 项目页面。
测试MobileSAM Ultralytics
与原版一样 SAM一样,Ultralytics 也为MobileSAM 测试提供了一个简单的界面,同时支持点提示和盒提示。
模型下载
从Ultralytics assets 下载MobileSAM 预训练权重。
要点提示
示例
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a single point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# Predict multiple segments based on multiple points prompt
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
# Predict a segment based on multiple points prompt per object
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Predict a segment using both positive and negative prompts.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
盒子提示
示例
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a single point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# Predict multiple segments based on multiple points prompt
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
# Predict a segment based on multiple points prompt per object
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Predict a segment using both positive and negative prompts.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
两者 MobileSAM
和 SAM
共享相同的应用程序接口。更多使用详情,请参阅 SAM 文档.
使用检测模型自动构建分割数据集
要使用Ultralytics 框架自动注释数据集,请使用 auto_annotate
功能,如下图所示:
示例
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="mobile_sam.pt")
论据 | 类型 | 默认值 | 说明 |
---|---|---|---|
data |
str |
所需 | 包含标注或分割目标图像的目录路径。 |
det_model |
str |
'yolo11x.pt' |
YOLO 检测模型路径进行初始物体检测。 |
sam_model |
str |
'sam_b.pt' |
用于分割的SAM 模型路径(支持SAM、SAM2 变体和 mobile_sam 模型)。 |
device |
str |
'' |
计算设备(例如,"cuda:0"、"cpu"或"",用于自动设备检测)。 |
conf |
float |
0.25 |
YOLO 检测可信度阈值,用于过滤弱检测。 |
iou |
float |
0.45 |
用于过滤重叠方框的非最大抑制 IoU 阈值。 |
imgsz |
int |
640 |
用于调整图像大小的输入尺寸(必须是 32 的倍数)。 |
max_det |
int |
300 |
每个图像的最大检测次数,以提高内存效率。 |
classes |
list[int] |
None |
要检测的类索引列表(如 [0, 1] 人和自行车)。 |
output_dir |
str |
None |
注释的保存目录(默认为相对于数据路径的"./labels")。 |
引用和致谢
如果MobileSAM 对您的研究或开发有帮助,请考虑引用以下论文:
@article{mobile_sam,
title={Faster Segment Anything: Towards Lightweight SAM for Mobile Applications},
author={Zhang, Chaoning and Han, Dongshen and Qiao, Yu and Kim, Jung Uk and Bae, Sung Ho and Lee, Seungkyu and Hong, Choong Seon},
journal={arXiv preprint arXiv:2306.14289},
year={2023}
}
常见问题
什么是MobileSAM ,它与最初的SAM 模式有何不同?
MobileSAM 是一种轻便、快速的图像分割模型,专为移动和边缘应用而优化。它保持了与原始SAM 相同的管道,但用紧凑型 Tiny-ViT 编码器(500 万参数)取代了大型 ViT-H 编码器(632M 参数)。这使得MobileSAM 的体积比原来的SAM 小 5 倍,速度快 7 倍,每幅图像的运行时间大约为 12 毫秒,而SAM 为 456 毫秒。有关MobileSAM 实现的更多信息,请访问MobileSAM GitHub 存储库。
如何使用Ultralytics 测试MobileSAM ?
在Ultralytics 中测试MobileSAM 非常简单。您可以使用点和框提示来预测细分市场。例如,使用点提示
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
更多详情,请参阅在Ultralytics中测试MobileSAM 部分。
为什么我的移动应用程序要使用MobileSAM ?
MobileSAM 设计轻巧,推理速度快,是移动和边缘应用的理想选择。与原始SAM 相比,MobileSAM 的体积小了约 5 倍,速度快了 7 倍,因此适合在计算资源有限的设备上进行实时分割。它的高效性使移动设备能在没有明显延迟的情况下进行实时图像分割。此外,MobileSAM 支持针对移动性能进行优化的推理模式。
MobileSAM 是如何接受培训的?
MobileSAM 是在单GPU 上用 10 万张图像数据集(原始图像的 1%)进行训练的,用时不到一天。虽然训练代码将在未来发布,但您目前可以从MobileSAM GitHub 存储库中获取预训练权重和实现细节。
MobileSAM 的主要用途是什么?
MobileSAM 专为在移动和边缘环境中进行快速、高效的图像分割而设计。主要用例包括
- 移动应用程序的实时对象检测和分割
- 在计算能力有限的设备上实现低延迟图像处理
- 集成到人工智能驱动的移动应用中,用于增强现实 (AR)、分析等功能
有关使用案例和性能的更多详情,请参阅从SAM 到MobileSAM的调整以及Ultralytics 关于MobileSAM 应用程序的博客。