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.
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.