SAM 2
SAM 2 estende SAM con un'architettura a memoria in streaming pensata per il video, e trasforma un clic di punto o di box in una maschera dell'oggetto. LibreYOLO supporta il suo percorso di segmentazione di immagini attraverso una factory LibreSAM dedicata, separata dalla factory di detector LibreYOLO().
- Task
- instance segmentation
- Dimensioni
- 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 MIT, pesi Apache-2.0. Uso commerciale
Installazione
SAM 2 richiede l'extra sam, che porta con sé transformers e timm.
pip install "libreyolo[sam]"Predizione
LibreSAM(...) (o il LibreSAM2(...) 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 significa niente
senza un prompt spaziale. Per questa famiglia non esiste il comando CLI
libreyolo predict; usa l'API Python. È supportata solo la segmentazione di
immagini; il tracking con memoria video di SAM 2 qui è fuori ambito.
from libreyolo import LibreSAM, SAMPLE_IMAGE # Alias di dimensione: "sam2-tiny", "sam2-small", "sam2-base-plus",# "sam2-large" (anche le forme brevi "sam2-t"/"sam2-s"/"sam2-bp"/"sam2-l").model = LibreSAM("sam2-large") # 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)from libreyolo import LibreSAM2, SAMPLE_IMAGE # La classe specifica della famiglia prende la dimensione senza il prefisso "sam2-".model = LibreSAM2("large") # 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: qui quello che LibreYOLO
supporta è l'inferenza sulle immagini. Vedi predizione per i
tipi di sorgente.
Varianti
Quattro dimensioni con backbone Hiera: tiny, small, base-plus e large, tutte alla stessa risoluzione di input. 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: tiny è il più veloce da codificare, large il più pesante.
Checkpoint
Tutti i file di pesi pubblicati per questa famiglia.
| File | Ingresso (px) | Licenza dei pesi |
|---|---|---|
| Instance segmentation | ||
| LibreSAM2tiny.pt | apache-2.0 | |
| LibreSAM2small.pt | apache-2.0 | |
| LibreSAM2base-plus.pt | apache-2.0 | |
| LibreSAM2large.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
- SAM 2, Meta FAIR
- Licenza upstream
- Apache-2.0
- Sorgente upstream
- github.com/facebookresearch/sam2
- 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 loads SAM 2 through the Apache-2.0 Transformers implementation and republishes Transformers-compatible snapshots of the tiny, small, base-plus and large checkpoints on its own Hugging Face org, tagged Apache-2.0 there as well. LibreYOLO ships image inference only; SAM 2's video-memory tracking is out of scope for this family.
Citazione
@article{ravi2024sam2,
title={SAM 2: Segment Anything in Images and Videos},
author={Ravi, Nikhila and Gabeur, Valentin and Hu, Yuan-Ting and Hu, Ronghang and Ryali, Chaitanya and Ma, Tengyu and Khedr, Haitham and R{\"a}dle, Roman and Rolland, Chloe and Gustafson, Laura and Mintun, Eric and Pan, Junting and Alwala, Kalyan Vasudev and Carion, Nicolas and Wu, Chao-Yuan and Girshick, Ross and Doll{\'a}r, Piotr and Feichtenhofer, Christoph},
journal={arXiv preprint arXiv:2408.00714},
url={https://arxiv.org/abs/2408.00714},
year={2024}
}Copiato dal blocco di citazione degli autori disponibile su github.com/facebookresearch/sam2#citing-sam-2.