SAM

SAM (Segment Anything) trasforma un clic di punto o di box in una maschera dell'oggetto. LibreYOLO lo carica attraverso una factory LibreSAM dedicata, separata dalla factory di detector LibreYOLO(), perché un modello guidato da prompt ha bisogno di una forma di chiamata diversa.

Task
instance segmentation
Dimensioni
base, large, huge 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
SAM (Segment Anything) di Meta AI Research (FAIR), Apache-2.0. Articolo, sorgente
Licenze
Codice MIT, pesi Apache-2.0. Uso commerciale

Installazione

SAM richiede l'extra sam, che porta con sé transformers e timm.

bash
pip install "libreyolo[sam]"

Predizione

LibreSAM(...) è un punto di ingresso separato da LibreYOLO(...): restituisce un segmentatore guidato da prompt invece di un detector, perché qui un forward pass non significa niente senza un prompt spaziale. Per questa famiglia non esiste il comando CLI libreyolo predict; usa l'API Python.

Prompt di punto e di box
from libreyolo import LibreSAM, SAMPLE_IMAGE # "base" scarica automaticamente facebook/sam-vit-base al primo utilizzo.# Altre dimensioni: "large", "huge" (anche "b"/"l"/"h").model = LibreSAM("base") # Un prompt di punto: [x, y] in coordinate 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, poi lancia tutti i prompt che vuoi
from libreyolo import LibreSAM, SAMPLE_IMAGE model = LibreSAM("base") # L'encoder dell'immagine è 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 diversi, oppure array numpy; labels marca ogni punto con 1 (primo piano) o 0 (sfondo) e per default sono tutti primo piano. Un prompt di box prende [x1, y1, x2, y2] o una lista di box, una maschera per box. Omettere entrambi i prompt segmenta l'intera immagine lanciando una griglia densa di prompt e tenendo le maschere confidenti che non si sovrappongono; questa modalità «segmenta tutto» è semplificata rispetto al generatore automatico di maschere di riferimento e può sotto-segmentare le scene affollate, quindi un vero prompt di punto o di box è la via precisa. conf filtra in base alla qualità predetta della maschera (IoU), non a una confidenza di rilevamento: passa 0.0 per tenere ogni candidato. 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 SAM serve solo a fare predizioni, e il tracking video è fuori ambito. Vedi predizione per i tipi di sorgente.

Varianti

Tre dimensioni di image encoder ViT: base, large e huge, tutte con input fisso a 1024 px. Per questa famiglia non è ancora pubblicato nessun benchmark di accuratezza o di latenza, quindi scegliere una dimensione significa scambiare direttamente peso dell'encoder con qualità della maschera: base è il più veloce da codificare, huge il più pesante.

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
SAM (Segment Anything), Meta AI Research (FAIR)
Licenza upstream
Apache-2.0
Codice LibreYOLO
MIT
Pesi
Apache-2.0, distribuiti dai rispettivi autori. LibreYOLO non li ospita né ne mantiene una copia.
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 does not mirror SAM-1 weights on its own Hugging Face org: LibreSAM downloads the base, large and huge checkpoints directly from Meta's own facebook/sam-vit-base, facebook/sam-vit-large and facebook/sam-vit-huge repositories, each tagged Apache-2.0 there as well.

LibreYOLO non ospita una propria copia dei pesi di SAM-1. LibreSAM("base"), "large" e "huge" scaricano direttamente dai repository facebook/sam-vit-base, facebook/sam-vit-large e facebook/sam-vit-huge di Meta su Hugging Face, ognuno dei quali è etichettato lì come Apache-2.0 indipendentemente da LibreYOLO.

Citazione

@article{kirillov2023segany,
  title={Segment Anything},
  author={Kirillov, Alexander and Mintun, Eric and Ravi, Nikhila and Mao, Hanzi and Rolland, Chloe and Gustafson, Laura and Xiao, Tete and Whitehead, Spencer and Berg, Alexander C. and Lo, Wan-Yen and Doll{\'a}r, Piotr and Girshick, Ross},
  journal={arXiv:2304.02643},
  year={2023}
}

Copiato dal blocco di citazione degli autori disponibile su github.com/facebookresearch/segment-anything#citing-segment-anything.

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.