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.

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

Prompty punktowe i ramkowe
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)
Jedno kodowanie, wiele promptów
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.

PlikWejście (px)Licencja wag
Instance segmentation
LibreSAM2tiny.ptapache-2.0
LibreSAM2small.ptapache-2.0
LibreSAM2base-plus.ptapache-2.0
LibreSAM2large.ptapache-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.

Zweryfikowano z LibreYOLO v1.5.0. Tabele obsługi, checkpointy i wyniki benchmarków na tej stronie są generowane na podstawie wydanej biblioteki i opublikowanych wag, a nie wpisywane ręcznie.