Segmento Mobile Anything (MobileSAM)
Il documento MobileSAM è ora disponibile su arXiv.
Una dimostrazione di MobileSAM in esecuzione su una CPU è disponibile a questo link demo. L'esecuzione su una CPU Mac i5 richiede circa 3 secondi. Sulla 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 | ✅ | ❌ | ❌ | ❌ |
Confronto MobileSAM vs YOLO
Qui confrontiamo le varianti SAM di Meta, tra cui MobileSAM, con il modello di segmentazione più piccolo di Ultralytics , 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 condorsale YOLOv8 | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n | 6,7 (11,7 volte più piccolo) | 3,4 (11,4 volte in meno) | 24,5 (1061 volte più veloce) |
Ultralytics YOLO11n-seg | 5,9 (13,2 volte più piccolo) | 2,9 (13,4 volte in meno) | 30,1 (864x più veloce) |
Questo confronto dimostra le differenze sostanziali nelle dimensioni e nella velocità dei modelli tra le varianti SAM e i modelli di segmentazione YOLO . Mentre SAM offre capacità di segmentazione automatica uniche, i modelli YOLO , in particolare YOLOv8n e YOLO11n-seg, sono significativamente più piccoli, più veloci e più efficienti dal punto di vista computazionale.
I test sono stati eseguiti su un Apple M4 Pro 2025 con 24 GB di RAM utilizzando torch==2.6.0
e ultralytics==8.3.90
. Per riprodurre questo test:
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)
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 SAMUltralytics offre un metodo di test semplice, che include modalità per i prompt Point e Box.
Modello da scaricare
È possibile scaricare i pesi preaddestrati di MobileSAM all'indirizzo ultralytics
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 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]])
Abbiamo implementato MobileSAM
e SAM
utilizzando la stessa API. Per ulteriori informazioni sull'uso, consultare la sezione SAM pagina.
Costruire automaticamente set di dati di segmentazione sfruttando un modello di rilevamento
Per annotare automaticamente il set di dati utilizzando il framework Ultralytics , utilizzare il metodo auto_annotate
come dimostrato di seguito:
Esempio
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' |
YOLO percorso del modello di rilevamento per il rilevamento iniziale degli oggetti. |
sam_model |
str |
'sam_b.pt' |
Percorso del modello SAM per la segmentazione (supporta i modelli SAM, SAM2 e mobile_sam). |
device |
str |
'' |
Dispositivo di calcolo (ad esempio, 'cuda:0', 'cpu', o '' per il rilevamento automatico del dispositivo). |
conf |
float |
0.25 |
YOLO soglia di fiducia del rilevamento per filtrare i rilevamenti deboli. |
iou |
float |
0.45 |
Soglia IoU per la soppressione non massima per filtrare le caselle sovrapposte. |
imgsz |
int |
640 |
Dimensione di ingresso per il ridimensionamento delle immagini (deve essere un multiplo di 32). |
max_det |
int |
300 |
Numero massimo di rilevamenti per immagine per garantire l'efficienza della memoria. |
classes |
list[int] |
None |
Elenco degli indici di classe da rilevare (es, [0, 1] per persona e bicicletta). |
output_dir |
str |
None |
Directory di salvataggio delle annotazioni (predefinita a './labels' rispetto al percorso dei dati). |
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 del SAM originale, 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 del SAM originale. Ad esempio, MobileSAM opera a circa 12 ms per immagine, rispetto ai 456 ms del SAM originale. Per saperne di più sull'implementazione di MobileSAM in vari progetti, è possibile consultare il repository GitHub di MobileSAM .
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.