Vai al contenuto

Logo di MobileSAM

Mobile Segment Anything (MobileSAM)

MobileSAM è un modello di segmentazione delle immagini compatto ed efficiente, progettato appositamente per dispositivi mobili e edge. Progettato per portare la potenza del Segment Anything Model di Meta (SAM) in ambienti con risorse di calcolo limitate, MobileSAM offre una segmentazione quasi istantanea pur 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.



Guarda: Come eseguire l'inferenza con MobileSAM utilizzando Ultralytics | Guida dettagliata 🎉

MobileSAM è stato adottato in diversi progetti, tra cui Grounding-SAM, AnyLabeling e Segment Anything in 3D.

MobileSAM è stato addestrato su una singola GPU utilizzando un set di dati di 100.000 immagini (l'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 seguente delinea il modello MobileSAM disponibile, i suoi pesi pre-addestrati, le attività supportate e la compatibilità con diverse modalità operative come Inference, Validation, Training e Export. Le modalità supportate sono indicate con ✅ e le modalità non supportate con ❌.

Tipo di modello Pesi pre-addestrati Task supportati Inferenza Validazione Training Esportazione
MobileSAM mobile_sam.pt Segmentazione 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 più piccoli di Ultralytics, tra cui YOLO11n-seg:

Modello Dimensione
(MB)
Parametri
(M)
Velocità (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 con backbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6.7 (11.7 volte più piccolo) 3.4 (11.4 volte inferiore) 24.5 (1061 volte più veloce)
Ultralytics YOLO11n-seg 5.9 (13,2 volte più piccolo) 2.9 (13,4 volte inferiore) 30.1 (864 volte 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, in particolare YOLOv8n-seg e YOLO11n-seg, sono significativamente più piccoli, più veloci e più efficienti dal punto di vista computazionale.

I test sono stati condotti su un Apple M4 Pro 2025 con 24 GB di RAM utilizzando torch==2.6.0 e ultralytics==8.3.90. 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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    model(ASSETS)

Adattamento 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 fondamentale è l'encoder di immagini: MobileSAM sostituisce l'encoder ViT-H originale (632 milioni di parametri) con un encoder Tiny-ViT molto più piccolo (5 milioni di parametri). Su una singola GPU, MobileSAM elabora un'immagine in circa 12 ms (8 ms per l'encoder, 4 ms per il decoder della maschera).

Confronto tra Image Encoder basati su ViT

Codificatore di immagini SAM originale MobileSAM
Parametri 611M 5M
Velocità 452ms 8ms

Decodificatore di maschere guidato da prompt

Decodificatore di maschere SAM originale MobileSAM
Parametri 3.876M 3.876M
Velocità 4ms 4ms

Confronto tra pipeline complete

Pipeline completa (Enc+Dec) SAM originale MobileSAM
Parametri 615M 9.66M
Velocità 456ms 12ms

Le prestazioni di MobileSAM e del SAM originale sono illustrate di seguito utilizzando sia prompt di punti che di 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, visitate la pagina del progettoMobileSAM .

Testare MobileSAM in Ultralytics

Proprio come l'originale SAM, Ultralytics fornisce una semplice interfaccia per testare MobileSAM, supportando sia i prompt Point che Box.

Download del modello

Scarica i pesi pre-addestrati di MobileSAM dagli asset di Ultralytics.

Prompt 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 del 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 maggiori dettagli sull'utilizzo, consultare il Documentazione SAM.

Creazione automatica di dataset di segmentazione utilizzando un modello di rilevamento

Per annotare automaticamente il tuo dataset con il framework Ultralytics, usa il auto_annotate funzione come mostrato di seguito:

Esempio

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="mobile_sam.pt")
Argomento Tipo Predefinito Descrizione
data str richiesto Percorso della directory contenente le immagini di destinazione per l'annotazione o la segmentazione.
det_model str 'yolo11x.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 le varianti SAM, SAM2 e i modelli mobile_sam).
device str '' Dispositivo di calcolo (ad esempio, '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 Dimensione di input per il ridimensionamento delle immagini (deve essere un multiplo di 32).
max_det int 300 Numero massimo di rilevamenti per immagine per efficienza della memoria.
classes list[int] None Elenco degli indici di classe da rilevare (ad esempio, [0, 1] per persone e biciclette).
output_dir str None Salva la directory per le annotazioni (il valore predefinito è './labels' relativo al percorso dei dati).

Citazioni e riconoscimenti

Se MobileSAM è utile nella tua ricerca o sviluppo, considera 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 su MobileSAM su arXiv.

FAQ

Cos'è MobileSAM e in cosa differisce dal modello SAM originale?

MobileSAM è un modello di segmentazione delle immagini leggero e veloce, ottimizzato per applicazioni mobile ed edge. Mantiene la stessa pipeline del SAM originale, ma sostituisce l'encoder ViT-H di grandi dimensioni (632 milioni di parametri) con un encoder Tiny-ViT compatto (5 milioni di parametri). Ciò si traduce in un MobileSAM circa 5 volte più piccolo e 7 volte più veloce del SAM originale, operando a circa 12 ms per immagine rispetto ai 456 ms del SAM. Scopri di più sull'implementazione di MobileSAM nel repository GitHub di MobileSAM.

Come posso testare MobileSAM utilizzando Ultralytics?

Testare MobileSAM in Ultralytics è semplice. Puoi utilizzare prompt Point e Box per prevedere i segmenti. Ad esempio, utilizzando 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, consulta la sezione Test di MobileSAM in Ultralytics.

Perché dovrei usare MobileSAM per la mia applicazione mobile?

MobileSAM è ideale per applicazioni mobile 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, il che lo rende adatto per la 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 una 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 set di dati di 100.000 immagini (1% delle immagini originali) in meno di un giorno. Sebbene il codice di addestramento verrà rilasciato in futuro, è attualmente possibile 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 rapida ed efficiente in ambienti mobile ed edge. I principali casi d'uso includono:

  • Object detection e segmentazione in tempo reale per app mobile
  • Elaborazione di immagini a bassa latenza su dispositivi con capacità di calcolo limitate
  • Integrazione in applicazioni mobili basate sull'AI per realtà aumentata (AR), analisi e altro

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



📅 Creato 1 anno fa ✏️ Aggiornato 4 giorni fa

Commenti