移动分割一切(MobileSAM)
MobileSAM论文现已可在arXiv上获取。
您可以通过此演示链接访问在CPU上运行的MobileSAM演示。在Mac i5 CPU上的性能大约需要3秒。在Hugging Face演示中,界面和较低性能的CPU导致响应较慢,但它仍然有效运行。
观看: 如何使用Ultralytics运行MobileSAM推理 | 分步指南 🎉
MobileSAM在多个项目中实现,包括Grounding-SAM、AnyLabeling和3D中的分割一切。
MobileSAM在单个GPU上使用100k数据集(原始图像的1%)在不到一天的时间内完成训练。此训练的代码将在未来提供。
可用模型、支持的任务和操作模式
此表展示了可用模型及其特定的预训练权重、支持的任务以及与不同操作模式的兼容性,如推理、验证、训练和导出,支持的模式用✅表情符号表示,不支持的模式用❌表情符号表示。
模型类型 | 预训练权重 | 支持的任务 | 推理 | 验证 | 训练 | 导出 |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
从SAM到MobileSAM的适应
由于MobileSAM保留了与原始SAM相同的管道,我们整合了原始的预处理、后处理以及所有其他接口。因此,目前使用原始SAM的用户可以轻松过渡到MobileSAM。
MobileSAM与原始SAM表现相当,并保留了相同的管道,除了图像编码器的更改。具体来说,我们将原始的重型ViT-H编码器(632M)替换为较小的Tiny-ViT(5M)。在单个GPU上,MobileSAM每张图像的操作时间约为12ms:图像编码器8ms,掩码解码器4ms。
以下是基于ViT的图像编码器的比较:
图像编码器 | 原始SAM | MobileSAM |
---|---|---|
参数 | 611M | 5M |
速度 | 452ms | 8ms |
原始SAM和MobileSAM都使用相同的提示引导掩码解码器:
掩码解码器 | 原始SAM | MobileSAM |
---|---|---|
参数 | 3.876M | 3.876M |
速度 | 4ms | 4ms |
以下是整个管道的比较:
整个管道(编码+解码) | 原始SAM | MobileSAM |
---|---|---|
参数 | 615M | 9.66M |
速度 | 456ms | 12ms |
MobileSAM和原始SAM的性能通过点和框作为提示进行演示。
凭借其优越的性能,MobileSAM比当前的FastSAM小约5倍,快7倍。更多详情请访问MobileSAM项目页面。
在Ultralytics中测试MobileSAM
与原始SAM一样,我们在Ultralytics中提供了一种简单的测试方法,包括点和框提示的模式。
模型下载
你可以在此处下载模型 here。
点提示
Example
from ultralytics import SAM
# 加载模型
model = SAM("mobile_sam.pt")
# 基于单点提示预测分割
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# 基于多点提示预测多个分割
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
# 基于每个对象的多点提示预测分割
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# 使用正负提示预测分割
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
框提示
Example
from ultralytics import SAM
# 加载模型
model = SAM("mobile_sam.pt")
# 基于单点提示预测分割
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# 基于多点提示预测多个分割
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
# 基于每个对象的多点提示预测分割
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# 使用正负提示预测分割
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
我们使用相同的API实现了 MobileSAM
和 SAM
。更多使用信息,请参见 SAM页面。
引用和致谢
如果你在研究或开发工作中发现MobileSAM有用,请考虑引用我们的论文:
常见问题
什么是MobileSAM,它与原始SAM模型有何不同?
MobileSAM是一个轻量级、快速的图像分割模型,专为移动应用设计。它保留了与原始SAM相同的管道,但用较小的Tiny-ViT编码器(5M参数)替换了重量级的ViT-H编码器(632M参数)。这一变化使得MobileSAM比原始SAM小约5倍,快7倍。例如,MobileSAM每张图像的操作时间约为12ms,而原始SAM为456ms。你可以在这里了解更多关于MobileSAM在各种项目中的实现。
如何使用Ultralytics测试MobileSAM?
在Ultralytics中测试MobileSAM可以通过简单的方法实现。你可以使用点和框提示来预测分割。以下是使用点提示的示例:
from ultralytics import SAM
# 加载模型
model = SAM("mobile_sam.pt")
# 基于点提示预测分割
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
你也可以参考在Ultralytics中测试MobileSAM部分获取更多详细信息。
为什么我应该为我的移动应用使用MobileSAM?
MobileSAM由于其轻量级架构和快速推理速度,非常适合移动应用。与原始SAM相比,MobileSAM小约5倍,快7倍,使其适用于计算资源有限的环境。这种效率确保了移动设备可以在没有显著延迟的情况下执行实时图像分割。此外,MobileSAM的模型,如推理,针对移动性能进行了优化。
MobileSAM是如何训练的,训练代码是否可用?
MobileSAM在单个GPU上使用100k数据集(原始图像的1%)在不到一天的时间内进行了训练。虽然训练代码将在未来提供,但目前你可以在MobileSAM GitHub仓库中探索MobileSAM的其他方面。该仓库包括预训练权重和各种应用的实现细节。
MobileSAM的主要用例是什么?
MobileSAM 旨在移动环境中实现快速高效的图像分割。主要应用场景包括:
- 移动应用中的实时目标检测和分割。
- 在计算资源有限的设备中进行低延迟图像处理。
- 集成于人工智能驱动的移动应用,用于增强现实(AR)和实时分析等任务。
有关更详细的使用案例和性能比较,请参阅从 SAM 到 MobileSAM 的适配部分。