Skip to content

MobileSAM Logo

Mobile Segment Anything (MobileSAM)

L'article MobileSAM est maintenant disponible sur arXiv.

Une démonstration de MobileSAM fonctionnant sur une CPU est accessible sur ce lien de démonstration. L'exécution sur un CPU Mac i5 prend environ 3 secondes. Sur le Hugging Face l'interface et les unités centrales moins performantes contribuent à ralentir la réponse, mais le système continue de fonctionner efficacement.



Regarder : Comment exécuter une inférence avec MobileSAM en utilisant Ultralytics | Guide étape par étape 🎉

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

MobileSAM est entraîné sur un seul site GPU avec un ensemble de données de 100 000 images (1 % des images originales) en moins d'une journée. Le code de cet entraînement 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 pré-entraînés spécifiques, les tâches qu'ils prennent en charge et leur compatibilité avec différents modes de fonctionnement tels que l'inférence, la validation, l'entraînement et l'exportation, indiqués par des émojis ✅ pour les modes pris en charge et des émojis ❌ pour les modes non pris en charge.

Type de modèle Poids pré-entraînés Tâches prises en charge Inférence Validation Formation Exportation
MobileSAM mobile_sam.pt Segmentation des instances

Comparaison MobileSAM vs YOLO

Nous comparons ici les variantes SAM de Meta, y compris MobileSAM, avec le plus petit modèle de segmentation d'Ultralytics , YOLO11n-seg :

Modèle Taille (MB) Paramètres (M) VitesseCPU) (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
FastSAM avecbackbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n 6,7 (11,7x plus petit) 3,4 (11,4x moins) 24,5 (1061x plus rapide)
Ultralytics YOLO11n-seg 5,9 (13,2x plus petit) 2,9 (13,4x moins) 30.1 (864 fois plus rapide)

Cette comparaison démontre les différences substantielles en termes de taille et de vitesse des modèles entre les variantes SAM et les modèles de segmentation YOLO . Alors que SAM offre des capacités uniques de segmentation automatique, les modèles YOLO , en particulier YOLOv8n et YOLO11n-seg, sont significativement plus petits, plus rapides et plus efficaces en termes de calcul.

Les tests ont été effectués sur un Apple M4 Pro 2025 avec 24 Go de RAM en utilisant torch==2.6.0 et ultralytics==8.3.90. Pour reproduire ce test :

Exemple

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)

Adaptation de SAM à MobileSAM

Étant donné que 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, ceux 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 le codeur d'image. Plus précisément, nous remplaçons le lourd encodeur ViT-H original (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 le codeur 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'images Original SAM MobileSAM
Paramètres 611M 5M
Vitesse 452ms 8ms

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

Décodeur de masque Original SAM MobileSAM
Paramètres 3.876M 3.876M
Vitesse 4ms 4ms

Voici la comparaison de l'ensemble de la filière :

Pipeline entier (Enc+Dec) Original SAM MobileSAM
Paramètres 615M 9.66M
Vitesse 456ms 12ms

Les performances de MobileSAM et de l'original SAM sont démontrées en utilisant un point et une boîte comme invites.

Image avec 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

Comme l'original SAMnous proposons une méthode de test simple dans Ultralytics, comprenant des modes pour les invites de type Point et Box.

Modèle à télécharger

Vous pouvez télécharger les poids pré-entraînés de MobileSAM à l'ultralytics.

Invitation à la discussion

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

Box Prompt

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

Nous avons mis en œuvre MobileSAM et SAM en utilisant la même API. Pour plus d'informations sur l'utilisation, veuillez consulter la page SAM page.

Construire automatiquement des ensembles de données de segmentation en s'appuyant sur un modèle de détection

Pour annoter automatiquement votre jeu de données à l'aide du cadre Ultralytics , utilisez la fonction auto_annotate comme indiqué ci-dessous :

Exemple

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="mobile_sam.pt")
Argument Type Défaut Description
data str requis Chemin d'accès au répertoire contenant les images cibles pour l'annotation ou la segmentation.
det_model str 'yolo11x.pt' YOLO chemin du modèle de détection pour la détection initiale de l'objet.
sam_model str 'sam_b.pt' Chemin d'accès au modèle SAM pour la segmentation (supporte les modèles SAM, SAM2 et mobile_sam).
device str '' Dispositif de calcul (par exemple, "cuda:0 ", "cpu" ou " " pour la détection automatique du dispositif).
conf float 0.25 YOLO seuil de confiance de détection pour filtrer les détections faibles.
iou float 0.45 Seuil de référence pour la suppression non maximale afin de filtrer les cases qui se chevauchent.
imgsz int 640 Taille d'entrée pour le redimensionnement des images (doit être un multiple de 32).
max_det int 300 Nombre maximum de détections par image pour une meilleure efficacité de la mémoire.
classes list[int] None Liste des indices de classe à détecter (par ex, [0, 1] pour les personnes et les vélos).
output_dir str None Répertoire de sauvegarde des annotations (par défaut './labels' par rapport au chemin des données).

Citations et remerciements

Si vous trouvez MobileSAM utile dans votre travail de recherche ou de développement, pensez à 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 est un modèle de segmentation d'image léger et rapide conçu pour les applications mobiles. Il conserve le même pipeline que le SAM original mais remplace le lourd encodeur ViT-H (632 millions de paramètres) par un encodeur Tiny-ViT plus petit (5 millions de paramètres). Grâce à ce changement, MobileSAM est environ 5 fois plus petit et 7 fois plus rapide que le SAM original. Par exemple, MobileSAM fonctionne à une vitesse d'environ 12 ms par image, contre 456 ms pour le SAM original. Vous pouvez en savoir plus sur l'implémentation de MobileSAM dans divers projets sur le dépôtMobileSAM GitHub.

Comment puis-je tester MobileSAM en utilisant Ultralytics?

Le test de MobileSAM dans Ultralytics peut être réalisé par des méthodes simples. Vous pouvez 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])

Vous pouvez également vous référer à la section Test de 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. 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 significative. 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é entraîné sur un seul site GPU avec un ensemble de données de 100 000 images, soit 1 % des images originales, en moins d'une journée. Le code d'entraînement sera disponible à l'avenir, mais vous pouvez 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 :

  • Détection et segmentation d'objets en temps réel pour les applications mobiles.
  • Traitement d'images à faible latence dans des appareils aux ressources informatiques limitées.
  • Intégration dans les applications 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.

📅C réé il y a 1 an ✏️ Mis à jour il y a 9 jours

Commentaires