更快的分割任何物体(MobileSAM)和分割所有物体(MobileSAMv2)
:pushpin: MobileSAMv2现已在ResearchGate和arXiv上发布。它用物体感知的提示采样替代了SAM中的网格搜索提示采样,以实现更快的分割所有物体(SegEvery)。
:pushpin: MobileSAM现已在ResearchGate和arXiv上发布。它用轻量级图像编码器替代了SAM中的重量级图像编码器,以实现更快的分割任何物体(SegAny)。
支持ONNX模型导出。欢迎在您的设备上测试并与我们分享结果。
MobileSAM的演示在CPU上运行,可在hugging face演示上查看。在我们的Mac i5 CPU上,大约需要3秒。在hugging face演示中,由于界面和性能较差的CPU,速度会更慢,但仍然运行良好。敬请期待更多功能的新版本!您也可以在本地PC上运行MobileSAM的演示。
:grapes: 媒体报道和从SAM适配到MobileSAM的项目(感谢大家!)
- 2023/07/03:joliGEN支持MobileSAM,以实现更快、更轻量级的使用扩散和GAN进行图像修复的掩码细化。
- 2023/07/03:MobileSAM-in-the-Browser展示了在本地PC或手机浏览器上运行MobileSAM的演示。
- 2023/07/02:Inpaint-Anything支持MobileSAM,以实现更快、更轻量级的修复任何物体。
- 2023/07/02:Personalize-SAM支持MobileSAM,以实现更快、更轻量级的单样本个性化分割任何物体。
- 2023/07/01:MobileSAM-in-the-Browser在浏览器中实现了MobileSAM的示例。
- 2023/06/30:SegmentAnythingin3D支持MobileSAM,以高效地分割3D中的任何物体。
- 2023/06/30:MobileSAM再次被AK报道,请查看AK的MobileSAM推文。欢迎转发。
- 2023/06/29:AnyLabeling支持MobileSAM进行自动标注。
- 2023/06/29:SonarSAM支持MobileSAM进行图像编码器的全面微调。
- 2023/06/29:Stable Diffusion WebUIv支持MobileSAM。
- 2023/06/28:Grounding-SAM通过Grounded-MobileSAM支持MobileSAM。
- 2023/06/27:MobileSAM被AK报道,请查看AK的MobileSAM推文。欢迎转发。
:star: MobileSAM是如何训练的? MobileSAM在单个GPU上使用10万个数据集(原始图像的1%)训练不到一天。训练代码将很快发布。
:star: 如何从SAM适配到MobileSAM? 由于MobileSAM完全保持了与原始SAM相同的流程,我们继承了原始SAM的预处理、后处理和所有其他接口。因此,假设除了更小的图像编码器外,其他一切都完全相同,那些将原始SAM用于项目的人几乎可以零成本地适配到MobileSAM。
:star: MobileSAM的性能与原始SAM相当(至少在视觉上),并且除了图像编码器的变化外,完全保持了与原始SAM相同的流程。具体来说,我们用一个更小的Tiny-ViT(5M)替换了原始的重量级ViT-H编码器(632M)。在单个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
:star: 原始SAM和MobileSAM以点作为提示。
:star: 原始SAM和MobileSAM以框作为提示。
:muscle: MobileSAM是否比FastSAM更快、更小?是的! MobileSAM比同期的FastSAM小约7倍,快约5倍。 整个流程的比较如下:
整个流程(编码器+解码器) | FastSAM | MobileSAM |
---|---|---|
参数数量 | 68M | 9.66M |
速度 | 64ms | 12ms |
:muscle: MobileSAM是否比FastSAM更好地对齐原始SAM?是的! 建议FastSAM使用多个点,因此我们比较了两个提示点(具有不同像素距离)的mIoU,结果如下。更高的mIoU表示更好的对齐。
mIoU | FastSAM | MobileSAM |
---|---|---|
100 | 0.27 | 0.73 |
200 | 0.33 | 0.71 |
300 | 0.37 | 0.74 |
400 | 0.41 | 0.73 |
500 | 0.41 | 0.73 |
安装
代码需要 python>=3.8
,以及 pytorch>=1.7
和 torchvision>=0.8
。请按照这里的说明安装 PyTorch 和 TorchVision 依赖。强烈建议安装支持 CUDA 的 PyTorch 和 TorchVision。
安装 Mobile Segment Anything:
pip install git+https://github.com/ChaoningZhang/MobileSAM.git
或者在本地克隆仓库并安装:
git clone git@github.com:ChaoningZhang/MobileSAM.git
cd MobileSAM; pip install -e .
演示
安装 MobileSAM 后,您可以在本地 PC 上运行演示或查看我们的 HuggingFace 演示。
它需要最新版本的 gradio。
cd app
python app.py
入门
可以通过以下方式加载 MobileSAM:
from mobile_sam import sam_model_registry, SamAutomaticMaskGenerator, SamPredictor
model_type = "vit_t"
sam_checkpoint = "./weights/mobile_sam.pt"
device = "cuda" if torch.cuda.is_available() else "cpu"
mobile_sam = sam_model_registry[model_type](checkpoint=sam_checkpoint)
mobile_sam.to(device=device)
mobile_sam.eval()
predictor = SamPredictor(mobile_sam)
predictor.set_image(<your_image>)
masks, _, _ = predictor.predict(<input_prompts>)
或为整个图像生成蒙版:
from mobile_sam import SamAutomaticMaskGenerator
mask_generator = SamAutomaticMaskGenerator(mobile_sam)
masks = mask_generator.generate(<your_image>)
入门(MobileSAMv2)
从检查点下载模型权重。
下载模型权重后,可以简单地使用更快的 SegEvery 和 MobileSAMv2,如下所示:
cd MobileSAMv2
bash ./experiments/mobilesamv2.sh
ONNX 导出
MobileSAM 现在支持 ONNX 导出。使用以下命令导出模型:
python scripts/export_onnx_model.py --checkpoint ./weights/mobile_sam.pt --model-type vit_t --output ./mobile_sam.onnx
还可以查看 示例笔记本 以了解详细步骤。
我们建议使用经过测试的 onnx==1.12.0
和 onnxruntime==1.13.1
。
我们 MobileSAM 的 BibTex
如果您在研究中使用 MobileSAM,请使用以下 BibTeX 条目。:mega: 谢谢!
@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}
}
致谢
本工作得到了韩国政府(MSIT)资助的信息通信技术规划评估研究所(IITP)的支持(No.RS-2022-00155911,人工智能融合创新人力资源开发(庆熙大学))
SAM(Segment Anything)[bib]
@article{kirillov2023segany,
title={Segment Anything},
author={Kirillov, Alexander and Mintun, Eric and Ravi, Nikhila and Mao, Hanzi and Rolland, Chloe and Gustafson, Laura and Xiao, Tete and Whitehead, Spencer and Berg, Alexander C. and Lo, Wan-Yen and Doll{\'a}r, Piotr and Girshick, Ross},
journal={arXiv:2304.02643},
year={2023}
}
TinyViT(TinyViT: Fast Pretraining Distillation for Small Vision Transformers)[bib]
@InProceedings{tiny_vit,
title={TinyViT: Fast Pretraining Distillation for Small Vision Transformers},
author={Wu, Kan and Zhang, Jinnian and Peng, Houwen and Liu, Mengchen and Xiao, Bin and Fu, Jianlong and Yuan, Lu},
booktitle={European conference on computer vision (ECCV)},
year={2022}