Passer au contenu

Logo de MobileSAM

Mobile Segment Anything (MobileSAM)

MobileSAM est un modèle de segmentation d'image compact et efficace, spécialement conçu pour les appareils mobiles et périphériques. Conçu pour apporter la puissance du Segment Anything Model de Meta (SAM) aux environnements avec une capacité de calcul limitée, MobileSAM offre une segmentation quasi instantanée tout en maintenant la compatibilité avec le pipeline SAM original. Que vous développiez des applications en temps réel ou des déploiements légers, MobileSAM fournit des résultats de segmentation impressionnants avec une fraction de la taille et des exigences de vitesse de ses prédécesseurs.



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

MobileSAM a été adopté dans divers projets, notamment Grounding-SAM, AnyLabeling et Segment Anything in 3D.

MobileSAM a été entraîné sur un seul GPU en utilisant un ensemble de données de 100 000 images (1 % des images originales) en moins d'une journée. Le code d'entraînement sera publié à l'avenir.

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

Le tableau ci-dessous présente le modèle MobileSAM disponible, ses poids pré-entraînés, les tâches prises en charge et la compatibilité avec différents modes de fonctionnement tels que l'Inférence, la Validation, l'Entraînement et l'Exportation. Les modes pris en charge sont indiqués par ✅ et les modes non pris en charge par ❌.

Type de modèle Poids pré-entraînés Tâches prises en charge Inférence Validation Entraînement Exporter
MobileSAM mobile_sam.pt Segmentation d'instance

Comparaison de MobileSAM vs YOLO

La comparaison suivante met en évidence les différences entre les variantes SAM de Meta, MobileSAM et les plus petits modèles de segmentation d'Ultralytics, y compris YOLO11n-seg :

Modèle Taille
(Mo)
Paramètres
(M)
Vitesse (CPU)
(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-s avec backbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 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 (864x plus rapide)

Cette comparaison démontre les différences substantielles de taille et de vitesse du modèle entre les variantes SAM et les modèles de segmentation YOLO. Alors que les modèles SAM offrent des capacités de segmentation automatique uniques, les modèles YOLO, en particulier YOLOv8n-seg et YOLO11n-seg, sont considérablement plus petits, plus rapides et plus efficaces sur le plan du 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 ces résultats :

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

MobileSAM conserve le même pipeline que le SAM original, y compris le prétraitement, le post-traitement et toutes les interfaces. Cela signifie que vous pouvez passer de SAM à MobileSAM avec un minimum de modifications à votre flux de travail.

La principale différence est l'encodeur d'image : MobileSAM remplace l'encodeur ViT-H original (632 millions de paramètres) par un encodeur Tiny-ViT beaucoup plus petit (5 millions de paramètres). Sur un seul GPU, MobileSAM traite une image en environ 12 ms (8 ms pour l'encodeur, 4 ms pour le décodeur de masque).

Comparaison des encodeurs d'images basés sur ViT

Encodeur d'image SAM original MobileSAM
Paramètres 611M 5M
Vitesse 452 ms 8 ms

Décodeur de masque guidé par invite

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

Comparaison de l'ensemble du pipeline

Pipeline complète (Enc+Dec) SAM original MobileSAM
Paramètres 615M 9.66M
Vitesse 456 ms 12 ms

Les performances de MobileSAM et du SAM original sont illustrées ci-dessous à l'aide d'invites ponctuelles et de boîtes englobantes.

Image avec un point comme prompt

Image avec une boîte comme prompt

MobileSAM est environ 7 fois plus petit et 5 fois plus rapide que FastSAM. Pour plus de détails, visitez la page du projetMobileSAM .

Test de MobileSAM dans Ultralytics

Tout comme le SAM original, Ultralytics fournit une interface simple pour tester MobileSAM, prenant en charge les invites Point et Box.

Téléchargement de modèle

Téléchargez les poids pré-entraînés de MobileSAM depuis Ultralytics assets.

Invite ponctuelle

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

Invite de boîte

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

Les deux MobileSAM et SAM partagent la même API. Pour plus de détails sur l'utilisation, consultez le Documentation SAM.

Créer automatiquement des jeux de données de segmentation à l'aide d'un modèle de détection

Pour annoter automatiquement votre jeu de données avec le framework Ultralytics, utilisez le auto_annotate fonction 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 Par 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' Chemin du modèle de détection YOLO pour la détection d'objets initiale.
sam_model str 'sam_b.pt' Chemin d'accès au modèle SAM pour la segmentation (prend en charge les variantes SAM, SAM2 et les modèles mobile_sam).
device str '' Dispositif de calcul (par exemple, « cuda:0 », « cpu » ou « » pour la détection automatique du dispositif).
conf float 0.25 Seuil de confiance de détection YOLO pour filtrer les détections faibles.
iou float 0.45 Seuil IoU pour la suppression non maximale afin de filtrer les boîtes 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 maximal de détections par image pour l’efficacité de la mémoire.
classes list[int] None Liste des indices de classe à détecter (par exemple, [0, 1] pour les personnes et les vélos).
output_dir str None Répertoire d'enregistrement des annotations (par défaut, '.\labels' par rapport au chemin des données).

Citations et remerciements

Si MobileSAM est utile dans votre recherche ou développement, veuillez envisager de citer l'article suivant :

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

Lire l'article complet sur MobileSAM sur arXiv.

FAQ

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

MobileSAM est un modèle de segmentation d'image léger et rapide, optimisé pour les applications mobiles et périphériques. Il conserve le même pipeline que le SAM original, mais remplace le grand encodeur ViT-H (632 millions de paramètres) par un encodeur Tiny-ViT compact (5 millions de paramètres). Il en résulte que MobileSAM est environ 5 fois plus petit et 7 fois plus rapide que le SAM original, fonctionnant à environ 12 ms par image contre 456 ms pour SAM. Découvrez plus d'informations sur l'implémentation de MobileSAM sur le dépôt GitHub de MobileSAM.

Comment puis-je tester MobileSAM en utilisant Ultralytics ?

Tester MobileSAM dans Ultralytics est simple. Vous pouvez utiliser des invites Point et Box pour prédire les segments. Par exemple, en utilisant une invite 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])

Pour plus de détails, consultez la section Test de MobileSAM dans Ultralytics.

Pourquoi devrais-je utiliser MobileSAM pour mon application mobile ?

MobileSAM est idéal pour les applications mobiles et périphériques en raison de sa conception légère et de sa vitesse d'inférence rapide. Comparé au SAM original, MobileSAM est environ 5 fois plus petit et 7 fois plus rapide, ce qui le rend adapté à la segmentation d'image en temps réel sur les appareils dotés de ressources de calcul limitées. Son efficacité permet aux appareils mobiles d'effectuer une segmentation d'image en temps réel sans latence significative. De plus, MobileSAM prend en charge le mode d'inférence optimisé pour les performances mobiles.

Comment MobileSAM a-t-il été entraîné et le code d'entraînement est-il disponible ?

MobileSAM a été entraîné sur un seul GPU avec un ensemble de données de 100 000 images (1 % des images originales) en moins d'une journée. Bien que le code d'entraînement soit publié à l'avenir, vous pouvez actuellement accéder aux poids pré-entraînés et aux détails de l'implémentation à partir du dépôt GitHub de MobileSAM.

Quels sont les principaux cas d'utilisation de MobileSAM ?

MobileSAM est conçu pour une segmentation d'image rapide et efficace dans les environnements mobiles et périphériques. Les principaux cas d'utilisation incluent :

  • Détection et segmentation d’objets en temps réel pour les applications mobiles
  • Traitement d’image à faible latence sur les appareils dotés d’une capacité de calcul limitée
  • Intégration dans les applications mobiles basées sur l’IA pour la réalité augmentée (RA), l’analytique, et plus encore

Pour plus de détails sur les cas d'utilisation et les performances, consultez l'adaptation de SAM à MobileSAM et le blog Ultralytics sur les applications MobileSAM.



📅 Créé il y a 1 an ✏️ Mis à jour il y a 4 jours

Commentaires