MobileSAM
MobileSAM sostituisce l'encoder di immagini ViT-H di SAM con un encoder TinyViT distillato, così lo stesso flusso di lavoro con prompt di punto e di box gira su hardware più leggero. LibreYOLO include un port nativo tramite una factory LibreSAM dedicata, separata dalla factory di detector LibreYOLO().
- Task
- instance segmentation
- Dimensioni
- tiny at 1024 px
- Installa
pip install libreyolo- Livello di supporto
- Livello parallelo, dalla v. Un'interfaccia di prodotto separata, con una propria factory e un proprio contratto.
- Licenze
- Codice Apache-2.0, pesi Apache-2.0. Uso commerciale
Installazione
MobileSAM richiede l'extra sam: il download dei pesi di LibreYOLO passa
ancora dagli strumenti di snapshot di Hugging Face di transformers, anche se
l'inferenza gira su un decoder nativo che non usa transformers.
pip install "libreyolo[sam]"Predizione
LibreSAM(...) (oppure il LibreMobileSAM(...) specifico della famiglia) è un
punto di ingresso separato da LibreYOLO(...): restituisce un segmentatore
guidato da prompt invece di un detector, perché qui un forward pass non ha
senso senza un prompt spaziale. Non esiste un comando CLI libreyolo predict
per questa famiglia; usa l'API Python.
from libreyolo import LibreSAM, SAMPLE_IMAGE # MobileSAM ha un'unica taglia, "tiny", quindi non serve nessun altro alias.model = LibreSAM("mobilesam") # Un prompt di punto: [x, y] in coordinate in pixel, label 1 = primo piano.result = model.predict(SAMPLE_IMAGE, points=[640, 420], labels=[1])print(result.masks.xy) # un poligono per mascheraprint(result.boxes.xyxy) # box aderente derivato dalla maschera # Un prompt di box invece di un punto.result = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700]) # Senza nessun prompt viene segmentata l'intera immagine (un generatore# automatico di maschere semplificato, non quello esaustivo di riferimento).result = model.predict(SAMPLE_IMAGE)from libreyolo import LibreMobileSAM, SAMPLE_IMAGE model = LibreMobileSAM() # L'encoder di immagini è la parte costosa. set_image() lo esegue una# volta; ogni chiamata a predict() successiva riusa l'embedding in cache.model.set_image(SAMPLE_IMAGE)a = model.predict(points=[640, 420], labels=[1])b = model.predict(bboxes=[300, 200, 900, 700])model.reset_image()Un prompt di punto accetta [x, y] per un oggetto, [[x, y], ...] per più
oggetti, oppure array numpy; labels marca ogni punto con 1 (primo piano) o
0 (sfondo) e per default sono tutti di primo piano. Un prompt di box prende
[x1, y1, x2, y2] o una lista di box, con una maschera per box. Omettendo
entrambi i prompt viene segmentata l'intera immagine lanciando una griglia
densa di prompt e tenendo le maschere sicure e non sovrapposte; questa modalità
"segmenta tutto" è semplificata rispetto al generatore automatico di maschere
di riferimento e può sottosegmentare le scene affollate, quindi un vero prompt
di punto o di box è la strada precisa. conf filtra in base alla qualità
predetta della maschera (IoU), non a una confidenza di rilevamento: passa 0.0
per tenere tutti i candidati. multimask=True restituisce tutte e tre le
maschere di ambiguità intero-contro-parte di SAM per ogni prompt, invece della
sola migliore. device= sposta il modello e, se è attiva una sessione
set_image(), il suo embedding in cache. Ogni maschera porta l'id di classe
0, di nome "object", dato che una maschera guidata da prompt non ha un
insieme fisso di classi. train(), val(), export() e track() sollevano
tutti NotImplementedError per questa famiglia: in LibreYOLO MobileSAM è solo
di predizione. Vedi predizione per i tipi di sorgente.
Varianti
Un'unica taglia, tiny, con input fisso a 1024 px: MobileSAM viene distribuito con un solo encoder TinyViT, invece della scala base/large/huge offerta da SAM-1.
Checkpoint
Tutti i file di pesi pubblicati per questa famiglia.
| File | Ingresso (px) | Licenza dei pesi |
|---|---|---|
| Instance segmentation | ||
| LibreMobileSAM.pt | apache-2.0 | |
Oggi tutti i file elencati sopra sono presenti nell<link>organizzazione LibreYOLO</link> e vengono scaricati al primo utilizzo.
Licenza
Controlla la licenza nel repository Hugging Face degli specifici pesi che scarichi. Ogni checkpoint nell<link>organizzazione LibreYOLO</link> ne include una e non è sempre la stessa per tutta la famiglia. Quel repository è la fonte autorevole; il riepilogo seguente descrive le condizioni applicabili al momento dellultima verifica di questa pagina.
Questa è una descrizione delle licenze coinvolte, non una consulenza legale. Se la risposta è importante a fini commerciali, leggi personalmente le licenze e chiedi una consulenza indipendente.
- Lavoro originale
- MobileSAM, Kyung Hee University
- Licenza upstream
- Apache-2.0
- Sorgente upstream
- github.com/ChaoningZhang/MobileSAM
- Codice LibreYOLO
- MIT
- Pesi
- Apache-2.0, ripubblicati su huggingface.co/LibreYOLO
- Interpretazione
- Apache-2.0 is a permissive license, so this code and these weights can be used in commercial and closed-source products. It asks you to keep the license text and attribution notices with any copy you redistribute, and it grants a patent license. LibreYOLO carries a native port of the TinyViT image encoder, prompt encoder, two-way transformer and mask decoder rather than vendoring upstream files unmodified, checked for bit-exact parity against the original Apache-2.0 implementation, with a NOTICE recording that provenance. The converted checkpoint is hosted as LibreMobileSAM.pt on the LibreYOLO Hugging Face org, tagged Apache-2.0 there as well.
Citazione
@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}
}Copiato dal blocco di citazione degli autori disponibile su github.com/ChaoningZhang/MobileSAM#bibtex-of-our-mobilesam.