Skip to content

MobileSAM Logo

Mobile Segment Anything (MobileSAM)

L'article MobileSAM est maintenant disponible sur arXiv.

Une démonstration de MobileSAM fonctionnant sur CPU est accessible sur ce lien de démonstration. La performance sur un Mac i5 CPU prend environ 3 secondes. Sur la démo Hugging Face , l'interface et les unités centrales moins performantes contribuent à une réponse plus lente, mais elle continue à fonctionner efficacement.



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

MobileSAM est mis en œuvre dans divers projets, notamment Grounding-SAM, AnyLabeling, et Segment Anything in 3D.

MobileSAM est formé sur un seul site GPU avec un ensemble de données de 100k (1% des images originales) en moins d'une journée. Le code de cette formation sera mis à disposition ultérieurement.

Modèles disponibles, tâches prises en charge et modes de fonctionnement

Ce tableau présente les modèles disponibles avec leurs poids spécifiques pré-entraînés, les tâches qu'ils prennent en charge et leur compatibilité avec différents modes de fonctionnement comme Inference, Validation, Training et Export, indiqués par des emojis ✅ pour les modes pris en charge et des emojis ❌ pour les modes non pris en charge.

Type de modèlePoids pré-entraînésTâches prises en chargeInférenceValidationFormationExporter
MobileSAMmobile_sam.ptSegmentation des instances

Adaptation de SAM à MobileSAM

Puisque MobileSAM conserve le même pipeline que l'original SAM, nous avons incorporé le prétraitement, le post-traitement et toutes les autres interfaces de l'original. Par conséquent, les personnes qui utilisent actuellement l'original SAM peuvent passer à MobileSAM avec un minimum d'effort.

MobileSAM a des performances comparables à celles de l'original SAM et conserve le même pipeline, à l'exception d'un changement dans l'encodeur d'image. Plus précisément, nous remplaçons le lourd encodeur ViT-H d'origine (632M) par un encodeur Tiny-ViT plus petit (5M). Sur un seul site GPU, MobileSAM fonctionne à une vitesse d'environ 12 ms par image : 8 ms pour l'encodeur d'image et 4 ms pour le décodeur de masque.

Le tableau suivant présente une comparaison des encodeurs d'images basés sur le ViT :

Encodeur d'imagesOriginal SAMMobileSAM
Paramètres611M5M
La vitesse452ms8ms

L'original SAM et MobileSAM utilisent tous deux le même décodeur de masque guidé par l'invite :

Décodeur de masqueOriginal SAMMobileSAM
Paramètres3.876M3.876M
La vitesse4ms4ms

Voici la comparaison de l'ensemble de la canalisation :

Pipeline entier (Enc+Dec)Original SAMMobileSAM
Paramètres615M9.66M
La vitesse456ms12ms

Les performances de MobileSAM et de l'original SAM sont démontrées à l'aide d'un point et d'une boîte.

Image avec un point comme incitation

Image avec boîte en guise d'incitation

Grâce à ses performances supérieures, MobileSAM est environ 5 fois plus petit et 7 fois plus rapide que l'actuel FastSAM. Plus de détails sont disponibles sur la page du projetMobileSAM .

Tester MobileSAM dans Ultralytics

Tout comme l'original SAM, nous proposons une méthode de test simple dans Ultralytics, y compris des modes pour les messages-guides de type Point et Box.

Modèle à télécharger

Tu peux télécharger le modèle ici.

Point d'interrogation

Exemple

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]])

Prompt à l'action

Exemple

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]])

Nous avons mis en place MobileSAM et SAM en utilisant la même API. Pour plus d'informations sur l'utilisation, tu peux consulter le SAM page.

Citations et remerciements

Si tu trouves MobileSAM utile dans ton travail de recherche ou de développement, pense à citer notre article :

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

FAQ

Qu'est-ce que MobileSAM et en quoi diffère-t-il du modèle original SAM ?

MobileSAM is a lightweight, fast image segmentation model designed for mobile applications. It retains the same pipeline as the original SAM but replaces the heavyweight ViT-H encoder (632M parameters) with a smaller Tiny-ViT encoder (5M parameters). This change results in MobileSAM being approximately 5 times smaller and 7 times faster than the original SAM. For instance, MobileSAM operates at about 12ms per image, compared to the original SAM's 456ms. You can learn more about the MobileSAM implementation in various projects here.

Comment puis-je tester MobileSAM en utilisant Ultralytics?

Le test de MobileSAM dans Ultralytics peut être réalisé à l'aide de méthodes simples. Tu peux utiliser les invites Point et Box pour prédire les segments. Voici un exemple utilisant une invite de type Point :

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])

Tu peux aussi te référer à la section Tester MobileSAM pour plus de détails.

Pourquoi devrais-je utiliser MobileSAM pour mon application mobile ?

MobileSAM est idéal pour les applications mobiles en raison de son architecture légère et de sa vitesse d'inférence rapide. Par rapport à l'original SAM, MobileSAM est environ 5 fois plus petit et 7 fois plus rapide, ce qui le rend adapté aux environnements où les ressources informatiques sont limitées. Cette efficacité garantit que les appareils mobiles peuvent effectuer une segmentation d'image en temps réel sans latence importante. En outre, les modèles de MobileSAM, tels que Inference, sont optimisés pour les performances mobiles.

Comment MobileSAM a-t-il été formé et le code de formation est-il disponible ?

MobileSAM a été formé sur un seul site GPU avec un ensemble de données de 100k, ce qui représente 1% des images originales, en moins d'une journée. Alors que le code d'entraînement sera mis à disposition à l'avenir, tu peux actuellement explorer d'autres aspects de MobileSAM dans le dépôt GitHub MobileSAM . Ce dépôt comprend des poids pré-entraînés et des détails de mise en œuvre pour diverses applications.

Quels sont les principaux cas d'utilisation de MobileSAM?

MobileSAM est conçu pour une segmentation rapide et efficace des images dans les environnements mobiles. Les principaux cas d'utilisation sont les suivants :

  • Real-time object detection and segmentation for mobile applications.
  • Traitement d'images à faible latence dans les appareils aux ressources informatiques limitées.
  • Intégration dans les apps mobiles pilotées par l'IA pour des tâches telles que la réalité augmentée (AR) et l'analyse en temps réel.

Pour des cas d'utilisation plus détaillés et des comparaisons de performances, voir la section Adaptation de SAM à MobileSAM.

📅 Created 11 months ago ✏️ Updated 10 days ago

Commentaires