
Mobile Segment Anything (MobileSAM)
MobileSAM è un modello di segmentazione d'immagine compatto ed efficiente, creato appositamente per dispositivi mobili ed edge. Progettato per portare la potenza del Segment Anything Model (SAM) di Meta in ambienti con risorse di calcolo limitate, MobileSAM offre una segmentazione quasi istantanea mantenendo la compatibilità con la pipeline SAM originale. Che tu stia sviluppando applicazioni in tempo reale o implementazioni leggere, MobileSAM fornisce risultati di segmentazione impressionanti con una frazione delle dimensioni e dei requisiti di velocità dei suoi predecessori.
Watch: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉
MobileSAM è stato adottato in svariati progetti, inclusi Grounding-SAM, AnyLabeling e Segment Anything in 3D.
MobileSAM è stato addestrato su una singola GPU utilizzando un dataset di 100k immagini (l'1% delle immagini originali) in meno di un giorno. Il codice di addestramento verrà rilasciato in futuro.
Modelli disponibili, task supportati e modalità operative
La tabella sottostante illustra il modello MobileSAM disponibile, i relativi pesi pre-addestrati, le attività supportate e la compatibilità con diverse modalità operative come Inference, Validation, Training e Export. Le modalità supportate sono indicate da ✅ e quelle non supportate da ❌.
| Tipo di modello | Pesi preaddestrati | Attività supportate | Inferenza (Inference) | Validazione | Addestramento | Export |
|---|---|---|---|---|---|---|
| MobileSAM | mobile_sam.pt | Segmentazione delle istanze | ✅ | ❌ | ❌ | ❌ |
Confronto tra MobileSAM e YOLO
Il seguente confronto mette in evidenza le differenze tra le varianti SAM di Meta, MobileSAM e i modelli di segmentazione Ultralytics, incluso YOLO26n-seg:
| Modello | Dimensioni (MB) | Parametri (M) | Velocità (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s con backbone YOLOv8 | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (11.0x più piccolo) | 3.4 (11.4x meno) | 24.8 (945x più veloce) |
| Ultralytics YOLO11n-seg | 6.2 (12.6x più piccolo) | 2.9 (13.4x meno) | 24.3 (964x più veloce) |
| Ultralytics YOLO26n-seg | 6.7 (11.7x più piccolo) | 2.7 (14.4x meno) | 25.2 (930x più veloce) |
Questo confronto dimostra le sostanziali differenze nelle dimensioni e nella velocità del modello tra le varianti SAM e i modelli di segmentazione YOLO. Mentre i modelli SAM offrono capacità uniche di segmentazione automatica, i modelli YOLO, specialmente YOLOv8n-seg, YOLO11n-seg e YOLO26n-seg, sono significativamente più piccoli, più veloci e più efficienti dal punto di vista computazionale.
Velocità SAM misurate con PyTorch, velocità YOLO misurate con ONNX Runtime. Test eseguiti su un Apple M4 Air 2025 con 16GB di RAM utilizzando torch==2.10.0, ultralytics==8.4.31 e onnxruntime==1.24.4. Per riprodurre questi risultati:
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)Adattarsi da SAM a MobileSAM
MobileSAM mantiene la stessa pipeline del SAM originale, inclusi pre-elaborazione, post-elaborazione e tutte le interfacce. Ciò significa che puoi passare da SAM a MobileSAM con modifiche minime al tuo flusso di lavoro.
La differenza principale è l'encoder dell'immagine: MobileSAM sostituisce l'encoder originale ViT-H (632M di parametri) con un encoder Tiny-ViT molto più piccolo (5M di parametri). Su una singola GPU, MobileSAM elabora un'immagine in circa 12ms (8ms per l'encoder, 4ms per il decoder della maschera).
Confronto dell'encoder immagine basato su ViT
| Encoder Immagine | SAM Originale | MobileSAM |
|---|---|---|
| Parametri | 611M | 5M |
| Velocità (Speed) | 452ms | 8ms |
Decoder maschera guidato da prompt
| Decoder Maschera | SAM Originale | MobileSAM |
|---|---|---|
| Parametri | 3.876M | 3.876M |
| Velocità (Speed) | 4ms | 4ms |
Confronto dell'intera pipeline
| Intera Pipeline (Enc+Dec) | SAM Originale | MobileSAM |
|---|---|---|
| Parametri | 615M | 9.66M |
| Velocità (Speed) | 456ms | 12ms |
Le prestazioni di MobileSAM e del SAM originale sono illustrate di seguito utilizzando prompt sia di tipo point che box.


MobileSAM è circa 7 volte più piccolo e 5 volte più veloce di FastSAM. Per ulteriori dettagli, visita la pagina del progetto MobileSAM.
Test di MobileSAM in Ultralytics
Proprio come il SAM originale, Ultralytics fornisce una semplice interfaccia per testare MobileSAM, supportando sia prompt di tipo Point che Box.
Download del modello
Scarica i pesi pre-addestrati di MobileSAM dagli asset di Ultralytics.
Prompt Point
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 Box
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]])Sia MobileSAM che SAM condividono la stessa API. Per maggiori dettagli sull'utilizzo, consulta la documentazione SAM.
Costruisci automaticamente dataset di segmentazione utilizzando un modello di rilevamento
Per annotare automaticamente il tuo dataset con il framework Ultralytics, usa la funzione auto_annotate come mostrato di seguito:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")| Argomento | Tipo | Predefinito | Descrizione |
|---|---|---|---|
data | str | richiesto | Percorso della directory contenente le immagini target per l'annotazione o la segmentazione. |
det_model | str | 'yolo26x.pt' | Percorso del modello di rilevamento YOLO per il rilevamento iniziale degli oggetti. |
sam_model | str | 'sam_b.pt' | Percorso del modello SAM per la segmentazione (supporta varianti SAM, SAM2 e modelli MobileSAM). |
device | str | '' | Dispositivo di calcolo (es. 'cuda:0', 'cpu', o '' per il rilevamento automatico del dispositivo). |
conf | float | 0.25 | Soglia di confidenza del rilevamento YOLO per filtrare i rilevamenti deboli. |
iou | float | 0.45 | Soglia IoU per la Non-Maximum Suppression per filtrare i riquadri sovrapposti. |
imgsz | int | 640 | Dimensioni di input per il ridimensionamento delle immagini (deve essere un multiplo di 32). |
max_det | int | 300 | Numero massimo di rilevamenti per immagine per l'efficienza della memoria. |
classes | list[int] | None | Elenco degli indici di classe da rilevare (es. [0, 1] per persona e bicicletta). |
output_dir | str | None | Salva la directory per le annotazioni (predefinito './labels' relativo al percorso dei dati). |
Citazioni e ringraziamenti
Se MobileSAM è utile nella tua ricerca o nel tuo sviluppo, ti preghiamo di considerare di citare il seguente articolo:
@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}
}Leggi l'intero articolo su MobileSAM su arXiv.
FAQ
Cos'è MobileSAM e come differisce dal modello SAM originale?
MobileSAM è un modello di segmentazione dell'immagine leggero e veloce, ottimizzato per applicazioni mobili ed edge. Mantiene la stessa pipeline del SAM originale ma sostituisce il grande encoder ViT-H (632M di parametri) con un encoder Tiny-ViT compatto (5M di parametri). Questo rende MobileSAM circa 5 volte più piccolo e 7 volte più veloce del SAM originale, operando a circa 12ms per immagine contro i 456ms di SAM. Scopri di più sull'implementazione di MobileSAM sul repository GitHub di MobileSAM.
Come posso testare MobileSAM utilizzando Ultralytics?
Testare MobileSAM in Ultralytics è semplice. Puoi usare prompt Point e Box per prevedere i segmenti. Ad esempio, usando un prompt 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])Per maggiori dettagli, vedi la sezione Test di MobileSAM in Ultralytics.
Perché dovrei usare MobileSAM per la mia applicazione mobile?
MobileSAM è ideale per applicazioni mobili ed edge grazie al suo design leggero e alla rapida velocità di inferenza. Rispetto al SAM originale, MobileSAM è circa 5 volte più piccolo e 7 volte più veloce, rendendolo adatto alla segmentazione in tempo reale su dispositivi con risorse computazionali limitate. La sua efficienza consente ai dispositivi mobili di eseguire la segmentazione dell'immagine in tempo reale senza una latenza significativa. Inoltre, MobileSAM supporta la modalità Inference ottimizzata per le prestazioni mobili.
Come è stato addestrato MobileSAM e il codice di addestramento è disponibile?
MobileSAM è stato addestrato su una singola GPU con un dataset di 100k immagini (1% delle immagini originali) in meno di un giorno. Sebbene il codice di addestramento verrà rilasciato in futuro, puoi attualmente accedere ai pesi pre-addestrati e ai dettagli dell'implementazione dal repository GitHub di MobileSAM.
Quali sono i casi d'uso principali per MobileSAM?
MobileSAM è progettato per una segmentazione dell'immagine rapida ed efficiente in ambienti mobili ed edge. I casi d'uso principali includono:
- Rilevamento e segmentazione di oggetti in tempo reale per app mobili
- Elaborazione immagini a bassa latenza su dispositivi con risorse di calcolo limitate
- Integrazione in applicazioni mobili basate su IA per realtà aumentata (AR), analisi e altro
Per ulteriori dettagli sui casi d'uso e sulle prestazioni, consulta Adattarsi da SAM a MobileSAM e il blog di Ultralytics su MobileSAM.