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.
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:
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.