Vai al contenuto

MobileSAM Logo

Segmento Mobile Anything (MobileSAM)

Il documento MobileSAM è ora disponibile su arXiv.

Una dimostrazione dell'esecuzione di MobileSAM su un CPU è disponibile a questo link dimostrativo. L'esecuzione su un Mac i5 CPU richiede circa 3 secondi. Nella demo di Hugging Face , l'interfaccia e le CPU a prestazioni inferiori contribuiscono a rallentare la risposta, ma il programma continua a funzionare efficacemente.



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

MobileSAM è implementato in vari progetti, tra cui Grounding-SAM, AnyLabeling e Segment Anything in 3D.

MobileSAM è stato addestrato su un singolo GPU con un set di dati di 100k (1% delle immagini originali) in meno di un giorno. Il codice per questo addestramento sarà reso disponibile in futuro.

Modelli disponibili, attività supportate e modalità operative

Questa tabella presenta i modelli disponibili con i loro pesi specifici pre-addestrati, i compiti che supportano e la loro compatibilità con diverse modalità operative come Inferenza, Convalida, Addestramento ed Esportazione, indicate da ✅ emoji per le modalità supportate e ❌ emoji per le modalità non supportate.

Tipo di modello Pesi pre-addestrati Attività supportate Inferenza Convalida Formazione Esportazione
MobileSAM mobile_sam.pt Segmentazione delle istanze

Adattarsi da SAM a MobileSAM

Poiché MobileSAM mantiene la stessa pipeline dell'originale SAM, abbiamo incorporato la preelaborazione, la postelaborazione e tutte le altre interfacce dell'originale. Di conseguenza, chi utilizza l'originale SAM può passare a MobileSAM con il minimo sforzo.

MobileSAM ha prestazioni paragonabili a quelle del sito SAM e mantiene la stessa pipeline, tranne che per una modifica del codificatore di immagini. In particolare, sostituiamo il pesante codificatore ViT-H originale (632M) con un più piccolo Tiny-ViT (5M). Su un singolo GPU, MobileSAM opera a circa 12 ms per immagine: 8ms per il codificatore di immagini e 4ms per il decodificatore di maschere.

La tabella seguente mostra un confronto tra i codificatori di immagini basati su ViT:

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

Sia il sito originale SAM che MobileSAM utilizzano lo stesso decodificatore di maschere guidato da prompt:

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

Ecco il confronto dell'intera pipeline:

Intera pipeline (Enc+Dec) Originale SAM MobileSAM
Parametri 615M 9.66M
Velocità 456 ms 12 ms

Le prestazioni di MobileSAM e del sito originale SAM sono dimostrate utilizzando sia un punto che una casella come prompt.

Immagine con punto come promemoria

Immagine con riquadro come promemoria

Grazie alle sue prestazioni superiori, MobileSAM è circa 5 volte più piccolo e 7 volte più veloce dell'attuale FastSAM. Maggiori dettagli sono disponibili alla pagina del progettoMobileSAM .

Test su MobileSAM in Ultralytics

Proprio come l'originale SAM, in Ultralytics offriamo un metodo di verifica semplice, che include modalità per i prompt Point e Box.

Modello da scaricare

È possibile scaricare il modello qui.

Prompt a punti

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

Box Prompt

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

Abbiamo implementato MobileSAM e SAM utilizzando la stessa API. Per ulteriori informazioni sull'uso, consultare la sezione SAM pagina.

Citazioni e ringraziamenti

Se trovate utile il sito MobileSAM nel vostro lavoro di ricerca o di sviluppo, vi invitiamo a citare il nostro documento:

@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}
}

FAQ

Che cos'è MobileSAM e come si differenzia dal modello originale SAM ?

MobileSAM è un modello di segmentazione delle immagini leggero e veloce, progettato per le applicazioni mobili. Mantiene la stessa pipeline dell'originale SAM ma sostituisce il pesante codificatore ViT-H (632M parametri) con un codificatore Tiny-ViT più piccolo (5M parametri). Questo cambiamento fa sì che MobileSAM sia circa 5 volte più piccolo e 7 volte più veloce dell'originale SAM. Ad esempio, MobileSAM opera a circa 12 ms per immagine, rispetto ai 456 ms dell'originale SAM. Per saperne di più sull'implementazione di MobileSAM in vari progetti , si veda qui.

Come posso testare MobileSAM utilizzando Ultralytics?

Il test di MobileSAM in Ultralytics può essere effettuato con metodi semplici. Per prevedere i segmenti si possono usare i prompt Punto e Casella. Ecco un esempio che utilizza un prompt 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 ulteriori dettagli, consultare la sezione Test di MobileSAM.

Perché dovrei usare MobileSAM per la mia applicazione mobile?

MobileSAM è ideale per le applicazioni mobili grazie alla sua architettura leggera e alla velocità di inferenza. Rispetto all'originale SAM, MobileSAM è circa 5 volte più piccolo e 7 volte più veloce, il che lo rende adatto ad ambienti in cui le risorse computazionali sono limitate. Questa efficienza garantisce che i dispositivi mobili possano eseguire la segmentazione delle immagini in tempo reale senza una latenza significativa. Inoltre, i modelli di MobileSAM, come l'inferenza, sono ottimizzati per le prestazioni dei dispositivi mobili.

Come è stato addestrato MobileSAM ed è disponibile il codice di addestramento?

MobileSAM è stato addestrato su un singolo GPU con un set di dati di 100k, pari all'1% delle immagini originali, in meno di un giorno. Mentre il codice di addestramento sarà reso disponibile in futuro, attualmente è possibile esplorare altri aspetti di MobileSAM nel repository GitHub MobileSAM . Questo repository include pesi pre-addestrati e dettagli di implementazione per varie applicazioni. Questo repository include pesi pre-addestrati e dettagli di implementazione per varie applicazioni.

Quali sono i principali casi d'uso di MobileSAM?

MobileSAM è stato progettato per una segmentazione rapida ed efficiente delle immagini in ambienti mobili. I casi d'uso principali includono:

  • Rilevamento e segmentazione di oggetti in tempo reale per applicazioni mobili.
  • Elaborazione di immagini a bassa latenza in dispositivi con risorse computazionali limitate.
  • Integrazione in applicazioni mobili guidate dall'intelligenza artificiale per attività come la realtà aumentata (AR) e l'analisi in tempo reale.

Per casi d'uso più dettagliati e confronti di prestazioni, consultare la sezione Adattamento da SAM a MobileSAM.

📅C reato 1 anno fa ✏️ Aggiornato 2 mesi fa

Commenti