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
Instalacja
pip install "libreyolo[sam]"
Poziom obsługi
Poziom siostrzany, od wersji v1.3.1. 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.

PlikLicencja wag

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.

Architektura SAM 2

Wybierz wariant lub przegląd rodziny, a następnie blok, aby zobaczyć szczegóły. Otwórz pełny diagram, aby powiększyć go lub pobrać SVG i PNG. Diagramy są w języku angielskim.