SAM 2
SAM 2 rozszerza SAM o architekturę pamięci strumieniowej zbudowaną do wideo oraz zamienia kliknięcie punktu lub ramki w maskę obiektu. LibreYOLO obsługuje jego ścieżkę segmentacji obrazów przez osobną fabrykę LibreSAM, niezależną od fabryki detektorów LibreYOLO().
- Zadania
- instance segmentation
- Rozmiary
- Instalacja
pip install libreyolo- Poziom obsługi
- Poziom siostrzany, od wersji v. Osobna część produktu z własną fabryką i kontraktem.
- Projekt źródłowy
- SAM 2, autorzy: Meta FAIR, licencja: Apache-2.0. Publikacja, kod źródłowy
- Licencje
- Kod: MIT, wagi: Apache-2.0. Użycie komercyjne
Instalacja
SAM 2 wymaga dodatku sam, który instaluje zależności transformers i timm.
pip install "libreyolo[sam]"Predykcja
LibreSAM(...) (lub właściwy dla tej rodziny LibreSAM2(...)) jest osobnym
punktem wejścia niż LibreYOLO(...). Zwraca segmenter sterowany promptami, a
nie detektor, ponieważ przebieg w przód nie ma tu znaczenia bez promptu
przestrzennego. Dla tej rodziny nie istnieje polecenie CLI libreyolo predict.
Należy użyć API Pythona. Obsługiwana jest tylko segmentacja obrazów. Śledzenie
z pamięcią wideo w SAM 2 pozostaje poza zakresem tej implementacji.
from libreyolo import LibreSAM, SAMPLE_IMAGE # Aliasy rozmiarów: "sam2-tiny", "sam2-small", "sam2-base-plus",# "sam2-large" (także krótkie formy "sam2-t"/"sam2-s"/"sam2-bp"/"sam2-l").model = LibreSAM("sam2-large") # Prompt punktowy: [x, y] we współrzędnych pikseli, etykieta 1 = pierwszy plan.result = model.predict(SAMPLE_IMAGE, points=[640, 420], labels=[1])print(result.masks.xy) # wielokąt dla każdej maskiprint(result.boxes.xyxy) # ciasna ramka wyznaczona z maski # Prompt ramkowy zamiast punktowego.result = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700]) # Brak promptu segmentuje cały obraz (uproszczony automatyczny# generator masek, a nie pełny generator referencyjny).result = model.predict(SAMPLE_IMAGE)from libreyolo import LibreSAM2, SAMPLE_IMAGE # Klasa właściwa dla rodziny przyjmuje rozmiar bez prefiksu "sam2-".model = LibreSAM2("large") # Enkoder obrazu jest kosztowną częścią. set_image() uruchamia go raz,# a każde kolejne wywołanie predict() ponownie wykorzystuje embedding z pamięci podręcznej.model.set_image(SAMPLE_IMAGE)a = model.predict(points=[640, 420], labels=[1])b = model.predict(bboxes=[300, 200, 900, 700])model.reset_image()Prompt punktowy przyjmuje [x, y] dla jednego obiektu, [[x, y], ...] dla
kilku obiektów lub tablice numpy. Argument labels oznacza każdy punkt jako 1
(pierwszy plan) lub 0 (tło), a domyślnie wszystkie punkty należą do pierwszego
planu. Prompt ramkowy przyjmuje [x1, y1, x2, y2] albo listę ramek i zwraca
jedną maskę dla każdej ramki. Pominięcie obu promptów segmentuje cały obraz za
pomocą gęstej siatki promptów, zachowując pewne i nienakładające się maski. Ten
tryb „segmentuj wszystko” jest uproszczony względem referencyjnego automatycznego
generatora masek i może niedostatecznie segmentować zatłoczone sceny, dlatego
prawdziwy prompt punktowy lub ramkowy zapewnia precyzyjniejszą ścieżkę. Argument
conf filtruje według przewidywanej jakości maski (IoU), a nie pewności
detekcji. Przekazanie 0.0 zachowuje każdego kandydata. Ustawienie
multimask=True zwraca dla każdego promptu wszystkie trzy maski SAM
odpowiadające niejednoznaczności całość względem części, zamiast tylko jednej
najlepszej. Argument device= przenosi model oraz, jeśli sesja set_image()
jest aktywna, jej embedding z pamięci podręcznej. Każda maska ma identyfikator
klasy 0 o nazwie "object", ponieważ maska sterowana promptem nie ma stałego
zbioru klas. Wywołania train(), val(), export() i track() zawsze
zgłaszają dla tej rodziny NotImplementedError. LibreYOLO obsługuje tu
inferencję obrazów. Informacje o typach źródeł zawiera strona
predykcji.
Warianty
Dostępne są cztery rozmiary z backbone Hiera: tiny, small, base-plus i large, wszystkie przy tej samej rozdzielczości wejściowej. Nie opublikowano jeszcze benchmarku dokładności ani opóźnienia tej rodziny, dlatego wybór rozmiaru bezpośrednio wymienia ciężar enkodera na jakość maski. Tiny koduje najszybciej, a large jest najcięższy.
Checkpointy
Wszystkie opublikowane pliki wag dla tej rodziny.
| Plik | Wejście (px) | Licencja wag |
|---|---|---|
| Instance segmentation | ||
| LibreSAM2tiny.pt | apache-2.0 | |
| LibreSAM2small.pt | apache-2.0 | |
| LibreSAM2base-plus.pt | apache-2.0 | |
| LibreSAM2large.pt | apache-2.0 | |
Każdy z powyższych plików jest obecnie dostępny w organizacji LibreYOLO i pobierany przy pierwszym użyciu.
Licencja
Sprawdź licencję w repozytorium konkretnych pobieranych wag na Hugging Face. Każdy checkpoint w organizacji LibreYOLO ma licencję, która nie zawsze jest taka sama w całej rodzinie. To repozytorium jest źródłem rozstrzygającym, a poniższe podsumowanie opisuje stan z chwili ostatniej weryfikacji tej strony.
To opis obowiązujących licencji, a nie porada prawna. Jeśli odpowiedź ma znaczenie komercyjne, przeczytaj licencje i zasięgnij własnej porady prawnej.
- Oryginalna praca
- SAM 2, Meta FAIR
- Licencja projektu źródłowego
- Apache-2.0
- Kod źródłowy projektu
- github.com/facebookresearch/sam2
- Kod LibreYOLO
- MIT
- Wagi
- Apache-2.0, ponownie opublikowane w huggingface.co/LibreYOLO
- Interpretacja
- 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.
Cytowanie
@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}
}Skopiowano z bloku cytowania autorów w github.com/facebookresearch/sam2#citing-sam-2.