跳转至内容

MobileSAM 标志

MobileSAM(移动版分割一切模型)

MobileSAM 是一款紧凑、高效的图像分割模型,专为移动和边缘设备打造。旨在将 Meta 的 Segment Anything Model(SAM)的功能引入到计算能力有限的环境中,MobileSAM 在保持与原始 SAM 流程兼容性的同时,提供近乎即时的分割。无论您是开发实时应用程序还是轻量级部署,MobileSAM 都能以其前身所需的一小部分大小和速度要求,提供令人印象深刻的分割结果。



观看: 如何使用 Ultralytics 运行 MobileSAM 推理 | 逐步指南 🎉

MobileSAM 已被应用于多个项目,包括 Grounding-SAMAnyLabelingSegment 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)
Meta SAM-b 375 93.7 49401
Meta SAM2-b 162 80.8 31901
Meta SAM2-t 78.1 38.9 25997
MobileSAM 40.7 10.1 25381
带有 YOLOv8 backbone 的 FastSAM-s 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 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-seg 和 YOLO11n-seg)的体积更小、速度更快、计算效率更高。

测试是在配备 24GB 内存的 2025 Apple M4 Pro 上进行的,使用 torch==2.6.0ultralytics==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
速度 452毫秒 8ms

提示引导的掩码解码器

掩码解码器 原始 SAM MobileSAM
参数 3.876M 3.876M
速度 4毫秒 4毫秒

整体流程对比

完整流程(编码+解码) 原始 SAM MobileSAM
参数 615M 9.66M
速度 456毫秒 12毫秒

下图展示了 MobileSAM 和原始 SAM 在使用点和框提示时的性能。

带有 Point 作为提示的图像

带有 Box 作为提示的图像

MobileSAM 比FastSAM 小约 7 倍,速度快约 5 倍。更多详情,请访问MobileSAM 项目页面

在 Ultralytics 中测试 MobileSAM

就像原始的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]])

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

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

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

示例

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}
}

阅读 arXiv 上的完整 MobileSAM 论文

常见问题

什么是 MobileSAM?它与原始 SAM 模型有何不同?

MobileSAM 是一款轻量级、快速的 图像分割 模型,针对移动和边缘应用进行了优化。它保持了与原始 SAM 相同的流程,但将大型 ViT-H 编码器(632M 参数)替换为紧凑的 Tiny-ViT 编码器(5M 参数)。这使得 MobileSAM 比原始 SAM 小约 5 倍,快约 7 倍,每张图像的处理速度约为 12 毫秒,而 SAM 则为 456 毫秒。请在 MobileSAM GitHub 仓库 上了解更多关于 MobileSAM 实现的信息。

如何使用 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 专为移动和边缘环境中的快速、高效图像分割而设计。主要用例包括:

  • 用于移动应用程序的实时目标检测和分割
  • 低延迟图像处理 在计算能力有限的设备上
  • 在 AI 驱动的移动应用程序中集成,用于增强现实 (AR)、分析等

有关用例和性能的更多详细信息,请参阅 从 SAM 调整到 MobileSAMUltralytics 博客上关于 MobileSAM 应用的文章



📅 创建于 1 年前 ✏️ 更新于 4 天前

评论