Vai al contenuto

MobileSAM Logo

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.

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

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

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

📅C reato 1 anno fa ✏️ Aggiornato 6 giorni fa

Commenti