
Segment Anything per dispositivi mobili (MobileSAM)#
MobileSAM è un modello compatto ed efficiente di segmentazione delle immagini, progettato appositamente per dispositivi mobili ed edge. Pensato per portare la potenza del Modello Segment Anything di Meta (SAM) in ambienti con risorse di calcolo limitate, MobileSAM esegue la segmentazione quasi istantaneamente e mantiene la compatibilità con la pipeline SAM originale. Che tu stia sviluppando applicazioni in tempo reale o implementazioni leggere, MobileSAM offre risultati di segmentazione notevoli con requisiti di dimensioni e velocità ridotti rispetto ai predecessori.
Guarda: Come eseguire inferenze con MobileSAM usando Ultralytics | Guida passo passo 🎉
MobileSAM è stato adottato in diversi progetti, tra cui Grounding-SAM, AnyLabeling e Segment Anything in 3D.
MobileSAM è stato addestrato su una singola GPU usando un dataset di 100k immagini (l'1% delle immagini originali) in meno di un giorno.
Modelli disponibili, attività supportate e modalità operative#
La tabella seguente presenta il modello MobileSAM disponibile, i relativi pesi preaddestrati, le attività supportate e la compatibilità con le diverse modalità operative, come Inferenza, Validazione, Addestramento ed Esportazione. ✅ indica le modalità supportate e ❌ quelle non supportate.
| Tipo di modello | Pesi preaddestrati | Attività supportate | Addestramento | Validazione | Inferenza | Esporta |
|---|---|---|---|---|---|---|
| MobileSAM | mobile_sam.pt | Segmentazione di istanze | ❌ | ❌ | ✅ | ❌ |
Confronto tra MobileSAM e YOLO#
Il confronto seguente evidenzia le differenze tra le varianti SAM di Meta, MobileSAM e i modelli di segmentazione Ultralytics, incluso YOLO26n-seg:
| Modello | Dimensione (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 in meno) | 24.8 (945x più veloce) |
| Ultralytics YOLO11n-seg | 6.2 (12.6x più piccolo) | 2.9 (13.4x in meno) | 24.3 (964x più veloce) |
| Ultralytics YOLO26n-seg | 6.7 (11.7x più piccolo) | 2.7 (14.4x in meno) | 25.2 (930x più veloce) |
Questo confronto evidenzia le notevoli differenze in termini di dimensioni e velocità tra le varianti SAM e i modelli di segmentazione YOLO. Sebbene i modelli SAM offrano funzionalità uniche di segmentazione automatica, i modelli YOLO, in particolare YOLOv8n-seg, YOLO11n-seg e YOLO26n-seg, sono significativamente più piccoli, veloci ed efficienti dal punto di vista computazionale.
Le velocità di SAM sono state misurate con PyTorch, quelle di YOLO con ONNX Runtime. I test sono stati eseguiti su un Apple M4 Air del 2025 con 16 GB di RAM usando torch==2.10.0, ultralytics==8.4.31 e onnxruntime==1.24.4. Per riprodurre questi risultati:
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# Profila 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)
# Profilo FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# Profila i modelli YOLO (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, nms=False) # Head senza NMS di YOLO26; non fa nulla per YOLOv8/YOLO11
model = YOLO(onnx_path)
model(ASSETS)Passare da SAM a MobileSAM#
MobileSAM mantiene la stessa pipeline di SAM, inclusi pre-elaborazione, post-elaborazione e tutte le interfacce. Ciò significa che puoi passare da SAM a MobileSAM apportando modifiche minime al tuo flusso di lavoro.
La differenza principale è l'encoder delle immagini: MobileSAM sostituisce l'encoder ViT-H originale (637M parametri) con un encoder Tiny-ViT molto più piccolo (5M parametri). Su una singola GPU, MobileSAM elabora un'immagine in circa 12 ms (8 ms per l'encoder, 4 ms per il decodificatore delle maschere).
Confronto tra encoder di immagini basati su ViT#
| Encoder delle immagini | SAM originale | MobileSAM |
|---|---|---|
| Parametri | 637M | 5M |
| Velocità | 452ms | 8ms |
Decodificatore delle maschere guidato da prompt#
| Decodificatore delle maschere | SAM originale | MobileSAM |
|---|---|---|
| Parametri | 3.876M | 3.876M |
| Velocità | 4ms | 4ms |
Confronto dell'intera pipeline#
| Intera pipeline (Enc+Dec) | SAM originale | MobileSAM |
|---|---|---|
| Parametri | 641M | 9.66M |
| Velocità | 456ms | 12ms |
Le prestazioni di MobileSAM e del SAM originale sono illustrate di seguito usando prompt sia puntuali sia basati su riquadri.


MobileSAM è circa 7 volte più piccolo e 5 volte più veloce di FastSAM. Per ulteriori dettagli, visita la pagina del progetto MobileSAM.
Testare MobileSAM in Ultralytics#
Proprio come per SAM, Ultralytics offre un'interfaccia semplice per testare MobileSAM, che supporta prompt puntuali e basati su riquadri.
Download del modello#
Scarica i pesi preaddestrati di MobileSAM dagli asset di Ultralytics.
Prompt puntuale#
from ultralytics import SAM
# Carica il modello
model = SAM("mobile_sam.pt")
# Prevedi un segmento a partire da un singolo prompt puntuale
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# Prevedi più segmenti a partire da più prompt puntuali
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
# Prevedi un segmento per oggetto a partire da più prompt puntuali
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Prevedi un segmento usando prompt positivi e negativi.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])Prompt basato su riquadro#
from ultralytics import SAM
# Carica il modello
model = SAM("mobile_sam.pt")
# Prevedi un segmento a partire da un singolo prompt basato su riquadro
model.predict("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
# Prevedi più segmenti a partire da più prompt basati su riquadri
model.predict("ultralytics/assets/zidane.jpg", bboxes=[[439, 437, 524, 709], [114, 196, 313, 708]])Sia MobileSAM sia SAM condividono la stessa API. Per ulteriori dettagli sull'uso, consulta la documentazione di SAM.
Creare automaticamente dataset di segmentazione usando 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 | obbligatorio | Percorso della directory contenente le immagini di destinazione da annotare o segmentare. |
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 i pesi di SAM, SAM 2, MobileSAM e SAM 3). |
device | str | '' | Dispositivo di calcolo (ad 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 soppressione non massima, usata per filtrare i riquadri sovrapposti. |
imgsz | int | 640 | Dimensione di input per ridimensionare le immagini (arrotondata al multiplo di 32 più vicino per eccesso, se necessario). |
max_det | int | 300 | Numero massimo di rilevamenti per immagine per ottimizzare l'uso della memoria. |
classes | list[int] | None | Elenco degli indici delle classi da rilevare (ad es. [0, 1] per persona e bicicletta). |
output_dir | str | None | Directory in cui salvare le annotazioni (per impostazione predefinita: directory sorella di <data>_auto_annotate_labels). |
Citazioni e ringraziamenti#
Se MobileSAM ti è utile per la tua ricerca o il tuo sviluppo, valuta la possibilità 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'articolo completo MobileSAM su arXiv.
Domande frequenti#
MobileSAM è un modello leggero e veloce di segmentazione delle immagini, ottimizzato per applicazioni mobili ed edge. Mantiene la stessa pipeline del SAM originale, ma sostituisce il grande encoder ViT-H (637M parametri) con un compatto encoder Tiny-ViT (5M parametri). Di conseguenza, l'intera pipeline di MobileSAM è circa 66 volte più piccola rispetto al SAM originale (9.66M contro 641M parametri) e circa 38 volte più veloce: elabora un'immagine in circa 12 ms, contro i 456 ms di SAM. Scopri di più sull'implementazione di MobileSAM nel repository GitHub di MobileSAM.
Testare MobileSAM in Ultralytics è semplice. Puoi usare prompt puntuali e basati su riquadri per prevedere i segmenti. Ad esempio, usando un prompt puntuale:
from ultralytics import SAM # Carica il modello model = SAM("mobile_sam.pt") # Prevedi un segmento a partire da un prompt puntuale model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])Per ulteriori dettagli, consulta la sezione Testare MobileSAM in Ultralytics.
MobileSAM è ideale per applicazioni mobili ed edge grazie al design leggero e alla velocità di inferenza. Rispetto al SAM originale, MobileSAM ha circa 66 volte meno parametri e funziona circa 38 volte più velocemente, risultando adatto alla segmentazione in tempo reale su dispositivi con risorse computazionali limitate. La sua efficienza consente ai dispositivi mobili di eseguire la segmentazione delle immagini in tempo reale senza latenza significativa. Inoltre, MobileSAM supporta la modalità di inferenza ottimizzata per le prestazioni sui dispositivi mobili.
MobileSAM è stato addestrato su una singola GPU con un dataset di 100k immagini (l'1% delle immagini originali di SA-1B) in meno di un giorno, distillando l'encoder delle immagini ViT-H di SAM in un encoder Tiny-ViT. I pesi preaddestrati e i dettagli dell'implementazione sono disponibili nel repository GitHub di MobileSAM.
MobileSAM è progettato per la segmentazione delle immagini rapida ed efficiente in ambienti mobili ed edge. I principali casi d'uso includono:
- Rilevamento e segmentazione degli oggetti in tempo reale per app mobili
- Elaborazione delle immagini a bassa latenza su dispositivi con capacità di calcolo limitata
- Integrazione in applicazioni mobili basate sull'IA per realtà aumentata (AR), analisi e altro
Per ulteriori dettagli sui casi d'uso e sulle prestazioni, consulta Passare da SAM a MobileSAM e il blog di Ultralytics sulle applicazioni di Segment Anything.