Segmento Mobile Anything (MobileSAM)
MobileSAM è un modello di segmentazione dell'immagine compatto ed efficiente, appositamente costruito per dispositivi mobili e periferici. Progettato per portare la potenza del Segment Anything Model di Meta (SAM) agli ambienti con calcolo limitato, MobileSAM offre una segmentazione quasi istantanea mantenendo la compatibilità con la pipeline SAM originale. Sia che stiate sviluppando applicazioni in tempo reale o distribuzioni 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 passo-passo 🎉
MobileSAM è stato adottato in diversi progetti, tra cui SAM, AnyLabeling e Segment Anything in 3D.
MobileSAM è stato addestrato su una singola GPU utilizzando un dataset di 100.000 immagini (l'1% delle immagini originali) in meno di un giorno. Il codice di addestramento sarà rilasciato in futuro.
Modelli disponibili, attività supportate e modalità operative
La tabella seguente illustra il modello MobileSAM disponibile, i suoi pesi pre-addestrati, i compiti supportati e la compatibilità con diverse modalità operative come Inferenza, Convalida, Addestramento ed Esportazione. Le modalità supportate sono indicate con ✅ e quelle non supportate con ❌.
Tipo di modello | Pesi pre-addestrati | Attività supportate | Inferenza | Convalida | Formazione | Esportazione |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | Segmentazione delle istanze | ✅ | ❌ | ❌ | ❌ |
Confronto MobileSAM vs 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 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 in termini di dimensioni e velocità dei modelli 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 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 24GB 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)
Adattarsi da SAM a MobileSAM
MobileSAM mantiene la stessa pipeline dell'originale SAMcompresa la pre-elaborazione, la post-elaborazione e tutte le interfacce. Ciò significa che è possibile passare da SAM a MobileSAM con modifiche minime al flusso di lavoro.
La differenza principale è il codificatore di immagini: MobileSAM sostituisce l'encoder ViT-H originale (632M parametri) con un encoder Tiny-ViT molto più piccolo (5M 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 i codificatori di immagini basati su ViT
Codificatore di immagini | Originale SAM | MobileSAM |
---|---|---|
Parametri | 611M | 5M |
Velocità | 452 ms | 8 ms |
Decodificatore di maschere guidato da un prompt
Decodificatore di maschere | Originale SAM | MobileSAM |
---|---|---|
Parametri | 3.876M | 3.876M |
Velocità | 4ms | 4ms |
Confronto tra l'intera pipeline
Intera pipeline (Enc+Dec) | Originale SAM | MobileSAM |
---|---|---|
Parametri | 615M | 9.66M |
Velocità | 456 ms | 12 ms |
Le prestazioni di MobileSAM e del SAM originale sono illustrate di seguito, utilizzando sia i prompt a punti che quelli a caselle.
MobileSAM è circa 5 volte più piccolo e 7 volte più veloce di FastSAM. Per ulteriori dettagli, visitate la pagina del progettoMobileSAM .
Test su MobileSAM in Ultralytics
Proprio come l'originale SAMUltralytics offre un'interfaccia semplice per testare MobileSAM, supportando sia i prompt Point che Box.
Modello da scaricare
Scaricate i pesi preaddestrati di MobileSAM dagli asset diUltralytics .
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]])
Entrambi MobileSAM
e SAM
condividono la stessa API. Per maggiori dettagli sull'uso, vedere la sezione Documentazione SAM.
Costruire automaticamente set di dati di segmentazione utilizzando un modello di rilevamento
Per annotare automaticamente il set di dati con il framework Ultralytics , si può utilizzare il metodo auto_annotate
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' |
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 MobileSAM vi è utile per la vostra ricerca o il vostro sviluppo, considerate la possibilità di citare il seguente 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}
}
Leggete l'intero documentoMobileSAM su arXiv.
FAQ
Cos'è il MobileSAM e in cosa si differenzia dal modello SAM originale?
MobileSAM è un modello di segmentazione delle immagini leggero e veloce, ottimizzato per le applicazioni mobili e per i bordi. Mantiene la stessa pipeline del SAM originale, ma sostituisce il grande codificatore ViT-H (632M parametri) con un codificatore Tiny-ViT compatto (5M parametri). Il risultato è che MobileSAM è circa 5 volte più piccolo e 7 volte più veloce del SAM originale, con una velocità di funzionamento di circa 12 ms per immagine rispetto ai 456 ms del SAM. Per saperne di più sull'implementazione di MobileSAM, consultare il repository GitHub diMobileSAM .
Come posso testare MobileSAM utilizzando Ultralytics?
Testare MobileSAM in Ultralytics è semplice. È possibile utilizzare i prompt Point e Box per prevedere i segmenti. Ad esempio, utilizzando 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 maggiori dettagli, consultare la sezione Test di MobileSAM in Ultralytics.
Perché dovrei usare MobileSAM per la mia applicazione mobile?
MobileSAM è ideale per le applicazioni mobili ed edge grazie al suo design leggero e alla velocità di inferenza. Rispetto al SAM originale, MobileSAM è circa 5 volte più piccolo e 7 volte più veloce, il che lo rende adatto alla 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 dei dispositivi mobili.
Come è stato formato MobileSAM e il codice di formazione è disponibile?
MobileSAM è stato addestrato su una singola GPU con un dataset di 100.000 immagini (l'1% delle immagini originali) in meno di un giorno. Il codice di addestramento sarà rilasciato in futuro, ma attualmente è possibile accedere ai pesi pre-addestrati e ai dettagli di implementazione dal repository GitHub di MobileSAM .
Quali sono i principali casi d'uso di MobileSAM?
MobileSAM è stato progettato per una segmentazione rapida ed efficiente delle immagini in ambienti mobili e periferici. I casi d'uso principali includono:
- Rilevamento e segmentazione degli oggetti in tempo reale per le app mobili
- Elaborazione delle immagini a bassa latenza su dispositivi con calcolo limitato
- Integrazione in applicazioni mobili alimentate dall'intelligenza artificiale per la realtà aumentata (AR), l'analisi e altro ancora.
Per ulteriori dettagli sui casi d'uso e sulle prestazioni, consultare l'adattamento da SAM a MobileSAM e il blog diUltralytics sulle applicazioni MobileSAM .