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.
Origine
MobileSAM di Kyung Hee University, Apache-2.0. Articolo, sorgente
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.

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

Prompt di punto e di box
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)
Codifica una volta, lancia molti prompt
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.

FileIngresso (px)Licenza dei pesi
Instance segmentation
LibreMobileSAM.ptapache-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
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.

Verificato con LibreYOLO v1.5.0. Le tabelle di supporto, i checkpoint e i dati dei benchmark in questa pagina vengono generati dalla libreria rilasciata e dai pesi pubblicati, non scritti a mano.