YOLO Vision 2026:

MobileSAM lightweight image segmentation model logo

Mobile Segment Anything (MobileSAM)#

MobileSAM 是一款紧凑、高效的图像 segmentation 模型,专为移动和边缘设备打造。MobileSAM 旨在将 Meta 的 Segment Anything Model(SAM)的强大功能带到计算资源受限的环境中,提供近乎实时的 segmentation,同时保持与原始 SAM 管道的兼容性。无论你是在开发实时应用还是轻量级部署,MobileSAM 都能提供令人印象深刻的 segmentation 效果,而其体量和速度要求仅为前辈的一小部分。



Watch: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉

MobileSAM 已被应用于各种项目中,包括 Grounding-SAMAnyLabelingSegment Anything in 3D

MobileSAM 在单块 GPU 上使用 10 万张图像的数据集(原始图像的 1%)训练不到一天即可完成。训练代码将在未来发布。

可用模型、支持的任务和操作模式#

下表概述了可用的 MobileSAM 模型、其预训练权重、支持的任务以及与不同操作模式(例如推理验证训练导出)的兼容性。支持的模式用 ✅ 表示,不支持的模式用 ❌ 表示。

模型类型预训练权重支持的任务训练验证推理导出
MobileSAMmobile_sam.pt实例分割

MobileSAM 与 YOLO 的比较#

以下对比突显了 Meta 的 SAM 变体、MobileSAM 以及包括 YOLO26n-seg 在内的 Ultralytics segmentation 模型之间的差异:

模型大小
(MB)
参数量
(M)
速度 (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
带有 YOLOv8 backbone 的 FastSAM-s23.911.858.0
Ultralytics YOLOv8n-seg7.1 (小 11.0 倍)3.4 (少 11.4 倍)24.8 (快 945 倍)
Ultralytics YOLO11n-seg6.2 (小 12.6 倍)2.9 (少 13.4 倍)24.3 (快 964 倍)
Ultralytics YOLO26n-seg6.7 (小 11.7 倍)2.7 (少 14.4 倍)25.2 (快 930 倍)

此比较展示了 SAM 变体与 YOLO 分割模型在模型大小和速度上的显著差异。尽管 SAM 模型提供了独特的自动分割能力,但 YOLO 模型(特别是 YOLOv8n-seg、YOLO11n-seg 和 YOLO26n-seg)在体积、速度和计算效率方面都具有显著优势。

SAM 速度使用 PyTorch 测量,YOLO 速度使用 ONNX Runtime 测量。测试在配备 16GB RAM 的 2025 年 Apple M4 Air 上运行,使用的是 torch==2.10.0ultralytics==8.4.31onnxruntime==1.24.4。要复现这些结果:

示例
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 (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True)
    model = YOLO(onnx_path)
    model(ASSETS)

从 SAM 适配到 MobileSAM#

MobileSAM 保留了与原始 SAM 相同的管道,包括预处理、后处理以及所有接口。这意味着你只需对工作流进行极少的更改,即可从 SAM 过渡到 MobileSAM。

主要区别在于图像编码器:MobileSAM 用小得多的 Tiny-ViT 编码器(5M 参数)替换了原始的 ViT-H 编码器(637M 参数)。在单张 GPU 上,MobileSAM 处理一张图像大约需要 12ms(编码器 8ms,掩码解码器 4ms)。

基于 ViT 的图像编码器比较#

图像编码器原始 SAMMobileSAM
参数量637M5M
速度452ms8ms

提示引导的掩码解码器#

掩码解码器原始 SAMMobileSAM
参数量3.876M3.876M
速度4ms4ms

完整流水线比较#

完整流水线 (编码+解码)原始 SAMMobileSAM
参数量641M9.66M
速度456ms12ms

下文通过点提示和框提示演示了 MobileSAM 和原始 SAM 的性能。

Image with Point as Prompt

Image with Box as Prompt

MobileSAM 的体积约为 FastSAM 的 7 分之一,速度快 5 倍。有关更多详细信息,请访问 MobileSAM 项目页面

在 Ultralytics 中测试 MobileSAM#

就像原始的 SAM 一样,Ultralytics 提供了一个用于测试 MobileSAM 的简单接口,同时支持 Point 和 Box 提示。

模型下载#

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 box prompt
model.predict("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Predict multiple segments based on multiple box prompts
model.predict("ultralytics/assets/zidane.jpg", bboxes=[[439, 437, 524, 709], [114, 196, 313, 708]])

MobileSAMSAM 共享相同的 API。有关更多使用详情,请参阅 SAM 文档

使用检测模型自动构建分割数据集#

要使用 Ultralytics 框架自动标注你的数据集,请使用如下所示的 auto_annotate 函数:

示例
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")
参数类型默认值描述
datastr必填包含目标图像的目录路径,用于标注或分割。
det_modelstr'yolo26x.pt'用于初始目标检测的 YOLO 检测模型路径。
sam_modelstr'sam_b.pt'用于分割的 SAM 模型路径(支持 SAM、SAM 2、MobileSAM 和 SAM 3 权重)。
devicestr''计算设备(例如 'cuda:0'、'cpu' 或 '' 表示自动设备检测)。
conffloat0.25用于过滤弱检测的 YOLO 检测置信度阈值。
ioufloat0.45用于非极大值抑制(Non-Maximum Suppression)以过滤重叠边界框的 IoU 阈值。
imgszint640用于调整图像大小的输入尺寸(必须是 32 的倍数)。
max_detint300为了内存效率,每张图像的最大检测数。
classeslist[int]None要检测的类索引列表(例如,[0, 1] 用于人和自行车)。
output_dirstrNone标注的保存目录(默认值:<data>_auto_annotate_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}
}

阅读 arXiv 上的完整 MobileSAM 论文

常见问题解答#

  • MobileSAM 是一款轻量级、快速的图像 segmentation 模型,专为移动和边缘应用进行了优化。它保持了与原始 SAM 相同的管道,但用紧凑的 Tiny-ViT 编码器(5M 参数)替换了大型 ViT-H 编码器(637M 参数)。这使得 MobileSAM 的体积比原始 SAM 小约 5 倍,速度快约 7 倍,每张图片的处理时间约为 12ms,而 SAM 则为 456ms。在 MobileSAM GitHub 仓库上探索更多关于 MobileSAM 实现的信息。

  • 在 Ultralytics 中测试 MobileSAM 非常简单。你可以使用点(Point)和框(Box)提示来预测分割区域。例如,使用点提示:

    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 是移动和边缘应用的理想选择。与原始 SAM 相比,MobileSAM 的体积缩小了约 5 倍,速度提升了约 7 倍,非常适合在计算资源有限的设备上进行实时 segmentation。其高效性使移动设备能够在没有显著延迟的情况下执行实时图像 segmentation。此外,MobileSAM 还支持针对移动性能优化的推理模式

  • MobileSAM 在单个 GPU 上使用包含 10 万张图像的数据集(原始图像的 1%)在不到一天的时间内完成了训练。虽然训练代码将在未来发布,但你目前可以从 MobileSAM GitHub 仓库获取预训练权重和实现细节。

  • MobileSAM 旨在为移动和边缘环境提供快速、高效的图像分割。主要应用场景包括:

    • 面向移动应用的实时对象检测和 segmentation
    • 在计算能力有限的设备上进行低延迟图像处理
    • 集成到人工智能驱动的移动应用中,用于增强现实 (AR)、分析等场景

    有关用例和性能的更多详细信息,请参阅从 SAM 适配到 MobileSAM 以及 Ultralytics 关于 MobileSAM 应用的博客

评论