Skip to main content

Logo del modello di segmentazione immagini leggero MobileSAM

Mobile Segment Anything (MobileSAM)

MobileSAM è un modello di segmentazione immagini compatto ed efficiente, creato appositamente per dispositivi mobili ed edge. Progettato per portare la potenza del Segment Anything Model di Meta (SAM) in ambienti con risorse computazionali 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 dei requisiti di dimensioni e velocità dei suoi predecessori.



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

MobileSAM è stato adottato in una varietà di progetti, tra cui Grounding-SAM, AnyLabeling, e Segment Anything in 3D.

MobileSAM è stato addestrato su una singola GPU utilizzando un dataset di 100k immagini (1% delle immagini originali) in meno di un giorno. Il codice di addestramento verrà rilasciato in futuro.

Modelli disponibili, attività supportate e modalità operative

La tabella sottostante illustra il modello MobileSAM disponibile, i suoi pesi pre-addestrati, le attività supportate e la compatibilità con diverse modalità operative come Inferenza, Validazione, Addestramento, e Esporta. Le modalità supportate sono indicate da ✅ e quelle non supportate da ❌.

Tipo di modelloPesi preaddestratiAttività supportateInferenzaValidazioneAddestramentoEsporta
MobileSAMmobile_sam.ptSegmentazione delle istanze

Confronto tra MobileSAM e YOLO

Il seguente confronto evidenzia le differenze tra le varianti SAM di Meta, MobileSAM e i modelli di segmentazione Ultralytics inclusi YOLO26n-seg:

ModelloDimensione
(MB)
Parametri
(M)
Velocità (CPU)
(ms/im)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s con YOLOv8 backbone23.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0x più piccolo)3.4 (11.4x in meno)24.8 (945x più veloce)
Ultralytics YOLO11n-seg6.2 (12.6x più piccolo)2.9 (13.4x in meno)24.3 (964x più veloce)
Ultralytics YOLO26n-seg6.7 (11.7x più piccolo)2.7 (14.4x in 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à di segmentazione automatica uniche, 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:

Esempio
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)

Adattamento da SAM a MobileSAM

MobileSAM conserva 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 è il codificatore di immagini: MobileSAM sostituisce il codificatore originale ViT-H (632M di parametri) con un codificatore Tiny-ViT molto più piccolo (5M di parametri). Su una singola GPU, MobileSAM elabora un'immagine in circa 12ms (8ms per il codificatore, 4ms per il decodificatore di maschere).

Confronto tra codificatori di immagini basati su ViT

Codificatore di immaginiSAM originaleMobileSAM
Parametri611M5M
Velocità452ms8ms

Decodificatore di maschere guidato da prompt

Decodificatore di maschereSAM originaleMobileSAM
Parametri3.876M3.876M
Velocità4ms4ms

Confronto dell'intera pipeline

Intera pipeline (Enc+Dec)SAM originaleMobileSAM
Parametri615M9.66M
Velocità456ms12ms

Le prestazioni di MobileSAM e del SAM originale sono illustrate di seguito utilizzando prompt sia con punti che con riquadri.

Immagine con punto come prompt

Immagine con riquadro come prompt

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 il SAM originale, Ultralytics fornisce un'interfaccia semplice per testare MobileSAM, supportando prompt sia con Punti che con Riquadri.

Download del modello

Scarica i pesi pre-addestrati di MobileSAM da risorse Ultralytics.

Prompt con punto

Esempio
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 con riquadro

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

Entrambi MobileSAM e SAM condividono la stessa API. Per ulteriori 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:

Esempio
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")
ArgomentoTipoPredefinitoDescrizione
datastrobbligatorioPercorso della directory contenente le immagini di destinazione per l'annotazione o la segmentazione.
det_modelstr'yolo26x.pt'Percorso del modello di rilevamento YOLO per il rilevamento iniziale degli oggetti.
sam_modelstr'sam_b.pt'Percorso del modello SAM per la segmentazione (supporta varianti SAM, SAM2 e modelli MobileSAM).
devicestr''Dispositivo di calcolo (ad esempio, 'cuda:0', 'cpu', o '' per il rilevamento automatico del dispositivo).
conffloat0.25Soglia di confidenza del rilevamento YOLO per filtrare i rilevamenti deboli.
ioufloat0.45Soglia IoU per la NMS (Non-Maximum Suppression) per filtrare le BBox sovrapposte.
imgszint640Dimensione di input per il ridimensionamento delle immagini (deve essere un multiplo di 32).
max_detint300Numero massimo di rilevamenti per immagine per l'efficienza della memoria.
classeslist[int]NoneElenco degli indici di classe da rilevare (ad esempio, [0, 1] per persona e bicicletta).
output_dirstrNoneDirectory di salvataggio per le annotazioni (predefinita su './labels' relativa al percorso dei dati).

Citazioni e riconoscimenti

Se MobileSAM ti è utile nella tua ricerca o sviluppo, considera di citare il seguente articolo:

Citazione
@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 in che modo differisce dal modello SAM originale?

MobileSAM è un modello segmentazione immagini leggero e veloce ottimizzato per applicazioni mobile e edge. Mantiene la stessa pipeline del SAM originale, ma sostituisce l'encoder ViT-H di grandi dimensioni (632M parametri) con un encoder Tiny-ViT compatto (5M parametri). Di conseguenza, 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 usando Ultralytics?

Testare MobileSAM in Ultralytics è semplice. Puoi usare i prompt di punti e BBox per prevedere i segmenti. Ad esempio, usando un prompt di punto:

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 il Testare MobileSAM in Ultralytics.

Perché dovrei usare MobileSAM per la mia applicazione mobile?

MobileSAM è ideale per applicazioni mobile e 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 mobile di eseguire segmentazione delle immagini in tempo reale senza latenza significativa. Inoltre, MobileSAM supporta la modalità di inferenza ottimizzata per le prestazioni mobile.

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 di implementazione dal repository GitHub di MobileSAM.

Quali sono i principali casi d'uso per MobileSAM?

MobileSAM è progettato per una segmentazione delle immagini veloce ed efficiente in ambienti mobile e edge. I casi d'uso principali includono:

  • Rilevamento e segmentazione di oggetti in tempo reale per app mobile
  • Elaborazione di immagini a bassa latenza su dispositivi con calcolo limitato
  • Integrazione in applicazioni mobile basate sull'IA per realtà aumentata (AR), analisi e altro

Per ulteriori dettagli sui casi d'uso e sulle prestazioni, vedi Adattamento da SAM a MobileSAM e il blog di Ultralytics sulle applicazioni di MobileSAM.

Commenti