Mobile Segment Anything (MobileSAM)
MobileSAM est un modèle de segmentation d'image compact et efficace conçu pour les appareils mobiles et périphériques. Conçu pour apporter la puissance du modèle Segment Anything de Meta (SAM) de Meta dans des environnements où le calcul est limité, MobileSAM offre une segmentation quasi instantanée tout en maintenant la compatibilité avec le pipeline SAM d'origine. 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 une inférence avec MobileSAM en utilisant Ultralytics | Guide étape par étape 🎉
MobileSAM a été adopté dans le cadre de divers projets, notamment SAM, AnyLabeling et Segment Anything in 3D.
MobileSAM a été entraîné sur un seul GPU à l'aide d'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é 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 les 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 | Formation | Exportation |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | Segmentation des instances | ✅ | ❌ | ❌ | ❌ |
Comparaison 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 (MB) |
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 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 les modèles SAM offrent des capacités uniques de segmentation automatique, les modèles YOLO - en particulier YOLOv8n et YOLO11n-seg - sont nettement plus petits, plus rapides et plus efficaces en termes de calcul.
Les tests ont été effectués sur un Apple M4 Pro 2025 avec 24GB 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 la version originale de SAMoriginal, y compris le prétraitement, le post-traitement et toutes les interfaces. Cela signifie que vous pouvez passer de SAM à MobileSAM en apportant un minimum de modifications à votre flux de travail.
La principale différence réside dans le codeur 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 12 ms environ (8 ms pour l'encodeur, 4 ms pour le décodeur de masque).
Comparaison des encodeurs d'images basés sur le ViT
Encodeur d'images | Original SAM | MobileSAM |
---|---|---|
Paramètres | 611M | 5M |
Vitesse | 452ms | 8ms |
Décodeur de masque guidé par un message-guide
Décodeur de masque | Original SAM | MobileSAM |
---|---|---|
Paramètres | 3.876M | 3.876M |
Vitesse | 4ms | 4ms |
Comparaison de l'ensemble du pipeline
Pipeline entier (Enc+Dec) | Original SAM | MobileSAM |
---|---|---|
Paramètres | 615M | 9.66M |
Vitesse | 456ms | 12ms |
Les performances de MobileSAM et du SAM original sont illustrées ci-dessous à l'aide d'invites ponctuelles et de boîtes.
MobileSAM est environ 5 fois plus petit et 7 fois plus rapide que FastSAM. Pour plus de détails, visitez la page du projetMobileSAM .
Tester MobileSAM dans Ultralytics
Comme l'original SAMoriginal, Ultralytics fournit une interface simple pour tester MobileSAM, supportant à la fois les invites de type " Point " et " Box ".
Modèle à télécharger
Téléchargez les poids pré-entraînés de MobileSAM à partir des actifs d'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]])
Les deux MobileSAM
et SAM
partagent la même API. Pour plus de détails sur l'utilisation, voir la page Documentation SAM.
Construire automatiquement des ensembles de données de segmentation à l'aide d'un modèle de détection
Pour annoter automatiquement votre jeu de données avec le cadre Ultralytics , utilisez l'option 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 MobileSAM vous est utile dans votre recherche ou votre développement, pensez à 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 surMobileSAM 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 (632M paramètres) par un encodeur compact Tiny-ViT (5M paramètres). MobileSAM est ainsi environ 5 fois plus petit et 7 fois plus rapide que le SAM original, fonctionnant à environ 12 ms par image contre 456 ms pour le SAM. Pour en savoir plus sur la mise en œuvre de MobileSAM , consultez le dépôtMobileSAM GitHub.
Comment puis-je tester MobileSAM avec Ultralytics?
Tester MobileSAM dans Ultralytics est simple. Vous pouvez utiliser les invites Point et Box pour prédire les segments. Par exemple, à l'aide d'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])
Pour plus de détails, voir la section Test de MobileSAM dans Ultralytics.
Pourquoi 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. Par rapport 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 disposant de ressources informatiques limitées. Son efficacité permet aux appareils mobiles d'effectuer une segmentation d'image en temps réel sans latence significative. En outre, MobileSAM prend en charge le mode d'inférence optimisé 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 GPU avec 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, mais vous pouvez actuellement accéder aux poids pré-entraînés et aux détails de la mise en œuvre sur le dépôt GitHub deMobileSAM .
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 et périphériques. 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 sur des appareils à capacité de calcul limitée
- Intégration dans les applications mobiles alimentées par l'IA pour la réalité augmentée (AR), l'analyse, etc.
Pour plus de détails sur les cas d'utilisation et les performances, voir Adaptation de SAM à MobileSAM et le blog d'Ultralytics sur les applications MobileSAM .