任何移动段 (MobileSAM)
MobileSAM 论文现已在arXiv 上发布。
在CPU 上运行MobileSAM 的演示可通过此演示链接访问。Mac i5CPU 上的运行时间约为 3 秒。在Hugging Face 演示中,界面和性能较低的 CPU 导致响应速度较慢,但仍能有效运行。
观看: 如何使用MobileSAM 运行推理Ultralytics | 分步指南 🎉
MobileSAM 在Grounding-SAM 、AnyLabeling 和Segment Anything in 3D 等多个项目中实施。
MobileSAM 在不到一天的时间内,就能在单个GPU 上使用 100k 数据集(原始图像的 1%)进行训练。训练代码将在未来公布。
可用型号、支持的任务和运行模式
本表介绍了可用模型及其特定的预训练权重、支持的任务以及与推理、验证、训练和导出等不同操作模式的兼容性,支持的模式用 ✅ 符号表示,不支持的模式用 ❌ 符号表示。
型号 | 预训练重量 | 支持的任务 | 推论 | 验证 | 培训 | 出口 |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | 实例分割 | ✅ | ❌ | ❌ | ❌ |
从SAM 到MobileSAM
由于MobileSAM 保留了与原版SAM 相同的管道,因此我们纳入了原版的预处理、后处理和所有其他接口。因此,目前使用原版SAM 的用户只需花费很少的精力即可过渡到MobileSAM 。
MobileSAM 与最初的SAM 性能相当,并保留了相同的管道,只是在图像编码器上做了改动。具体来说,我们用较小的 Tiny-ViT 编码器(5M)取代了原来重量级的 ViT-H 编码器(632M)。在单个GPU 上,MobileSAM ,每幅图像的运行时间约为 12 毫秒:图像编码器为 8 毫秒,掩码解码器为 4 毫秒。
下表对基于 ViT 的图像编码器进行了比较:
图像编码器 | 原创SAM | MobileSAM |
---|---|---|
参数 | 611M | 5M |
速度 | 452ms | 8ms |
最初的SAM 和MobileSAM 都使用相同的提示引导掩码解码器:
掩码解码器 | 原创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 中提供了直接的测试方法,包括点提示和方框提示两种模式。
模型下载
您可以在这里下载模型。
要点提示
示例
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 mutiple 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 页码.
引用和致谢
如果MobileSAM 对您的研究或开发工作有用,请考虑引用我们的论文:
常见问题
什么是MobileSAM ,它与最初的SAM 模式有何不同?
MobileSAM 是专为移动应用设计的轻量级快速图像分割模型。它保留了与原始SAM 相同的管道,但用较小的 Tiny-ViT 编码器(5M 参数)取代了重量级的 ViT-H 编码器(632M 参数)。这一变化使MobileSAM 比原来的SAM 小约 5 倍,速度快约 7 倍。例如,与原始SAM 的 456 毫秒相比,MobileSAM 每幅图像的运行时间约为 12 毫秒。有关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])
更多详情,请参阅测试MobileSAM部分。
为什么我的移动应用程序要使用MobileSAM ?
MobileSAM 由于其轻量级架构和快速推理速度,它是移动应用的理想选择。与最初的SAM 相比,MobileSAM 的体积小约 5 倍,速度快约 7 倍,因此适用于计算资源有限的环境。这种高效率确保了移动设备可以在没有明显延迟的情况下进行实时图像分割。此外,MobileSAM 的推理等模型也针对移动性能进行了优化。
MobileSAM 是如何培训的?培训代码是否可用?
MobileSAM 在不到一天的时间内,就在单个GPU 上用 10 万张数据集(占原始图片的 1%)进行了训练。虽然训练代码将在未来公布,但您目前可以在MobileSAM GitHub 存储库中探索MobileSAM 的其他方面。该资源库包括预训练的权重和各种应用的实现细节。
MobileSAM 的主要用途是什么?
MobileSAM 是专为移动环境中快速高效的图像分割而设计的。主要用途包括
- 移动应用的实时物体检测和分割。
- 在计算资源有限的设备中实现低延迟图像处理。
- 集成到人工智能驱动的移动应用程序中,用于增强现实(AR)和实时分析等任务。
有关更详细的使用案例和性能比较,请参阅 "从SAM 到MobileSAM"一节。