Logo du modèle de segmentation d'image léger MobileSAM

Mobile Segment Anything (MobileSAM)

MobileSAM est un modèle de segmentation d'image compact et efficace, conçu spécifiquement pour les appareils mobiles et de périphérie (edge devices). Créé pour apporter la puissance du Segment Anything Model (SAM) de Meta dans des environnements aux ressources de calcul limitées, MobileSAM offre une segmentation quasi instantanée tout en conservant une compatibilité avec le pipeline SAM original. Que tu développes 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.



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

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 jeu de données de 100 000 images (1 % des images originales) en moins d'une journée. Le code d'entraînement sera publié ultérieurement.

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 Inference, Validation, Training et Export. Les modes pris en charge sont indiqués par ✅ et les modes non pris en charge par ❌.

Type de modèlePoids pré-entraînésTâches prises en chargeInférenceValidationEntraînementExportation
MobileSAMmobile_sam.ptSegmentation 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 modèles de segmentation Ultralytics incluant YOLO26n-seg :

ModèleTaille
(Mo)
Paramètres
(M)
Vitesse (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s avec backbone YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0x plus petit)3.4 (11.4x moins)24.8 (945x plus rapide)
Ultralytics YOLO11n-seg6.2 (12.6x plus petit)2.9 (13.4x moins)24.3 (964x plus rapide)
Ultralytics YOLO26n-seg6.7 (11.7x plus petit)2.7 (14.4x moins)25.2 (930x plus rapide)

Cette comparaison démontre les différences substantielles en termes de taille et de vitesse entre les variantes SAM et les modèles de segmentation YOLO. Bien que les modèles SAM offrent des capacités de segmentation automatique uniques, les modèles YOLO — en particulier YOLOv8n-seg, YOLO11n-seg et YOLO26n-seg — sont nettement plus petits, plus rapides et plus efficaces sur le plan informatique.

Vitesses SAM mesurées avec PyTorch, vitesses YOLO mesurées avec ONNX Runtime. Tests effectués sur un Apple M4 Air 2025 avec 16 Go de RAM utilisant torch==2.10.0, ultralytics==8.4.31 et onnxruntime==1.24.4. 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 (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True)
    model = YOLO(onnx_path)
    model(ASSETS)

Passer de SAM à MobileSAM

MobileSAM conserve le même pipeline que le SAM original, incluant le pré-traitement, le post-traitement et toutes les interfaces. Cela signifie que tu peux passer de SAM à MobileSAM avec un minimum de changements dans ton flux de travail.

La différence clé réside dans l'encodeur d'image : MobileSAM remplace l'encodeur ViT-H original (632M de paramètres) par un encodeur Tiny-ViT beaucoup plus petit (5M 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 de l'encodeur d'image basé sur ViT

Encodeur d'imageSAM OriginalMobileSAM
Paramètres611M5M
Vitesse452ms8ms

Décodeur de masque guidé par prompt

Décodeur de masqueSAM OriginalMobileSAM
Paramètres3.876M3.876M
Vitesse4ms4ms

Comparaison complète du pipeline

Pipeline complet (Enc+Dec)SAM OriginalMobileSAM
Paramètres615M9.66M
Vitesse456ms12ms

Les performances de MobileSAM et du SAM original sont illustrées ci-dessous en utilisant à la fois des prompts par point et par boîte.

Image avec point comme prompt

Image avec boîte comme prompt

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

Tester MobileSAM dans Ultralytics

Tout comme le SAM original, Ultralytics fournit une interface simple pour tester MobileSAM, prenant en charge les prompts par Point et par Boîte.

Téléchargement du modèle

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

Prompt par point

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

MobileSAM et SAM partagent la même API. Pour plus de détails sur l'utilisation, consulte la documentation SAM.

Construire automatiquement des jeux de données de segmentation en utilisant un modèle de détection

Pour annoter ton jeu de données automatiquement avec le framework Ultralytics, utilise la fonction auto_annotate comme indiqué ci-dessous :

Exemple
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")
ArgumentTypeDéfautDescription
datastrrequisChemin vers le répertoire contenant les images cibles pour l'annotation ou la segmentation.
det_modelstr'yolo26x.pt'Chemin du modèle de détection YOLO pour la détection initiale d'objets.
sam_modelstr'sam_b.pt'Chemin du modèle SAM pour la segmentation (prend en charge les variantes SAM, SAM2 et les modèles MobileSAM).
devicestr''Dispositif de calcul (par exemple, 'cuda:0', 'cpu' ou '' pour la détection automatique du dispositif).
conffloat0.25Seuil de confiance de détection YOLO pour filtrer les détections faibles.
ioufloat0.45Seuil IoU pour le NMS afin de filtrer les boîtes qui se chevauchent.
imgszint640Taille d'entrée pour le redimensionnement des images (doit être un multiple de 32).
max_detint300Nombre maximal de détections par image pour l'efficacité de la mémoire.
classeslist[int]NoneListe des indices de classe à détecter (par exemple, [0, 1] pour personne et vélo).
output_dirstrNoneRépertoire de sauvegarde pour les annotations (par défaut './labels' par rapport au chemin des données).

Citations et remerciements

Si MobileSAM est utile dans tes recherches ou ton développement, merci de considérer la citation de l'article suivant :

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

Lis l'article complet 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 de périphérie. Il maintient le même pipeline que le SAM original mais remplace le grand encodeur ViT-H (632M de paramètres) par un encodeur compact Tiny-ViT (5M de paramètres). Cela rend MobileSAM 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. Explore plus en détail l'implémentation de MobileSAM sur le dépôt GitHub MobileSAM.

Comment puis-je tester MobileSAM en utilisant Ultralytics ?

Tester MobileSAM dans Ultralytics est simple. Tu peux utiliser des prompts par Point et par Boîte pour prédire des segments. Par exemple, en utilisant un prompt par 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, consulte la section Tester MobileSAM dans Ultralytics.

Pourquoi devrais-je utiliser MobileSAM pour mon application mobile ?

MobileSAM est idéal pour les applications mobiles et de périphérie 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 en temps réel sur des appareils aux 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 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 jeu de données de 100 000 images (1 % des images originales) en moins d'une journée. Bien que le code d'entraînement sera publié ultérieurement, tu peux actuellement accéder aux poids pré-entraînés et aux détails de l'implémentation sur le dépôt GitHub 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 de périphérie. 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 des appareils avec des capacités de calcul limitées
  • Intégration dans des applications mobiles alimentées par l'IA pour la réalité augmentée (AR), l'analyse, et plus encore

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

Commentaires