SAM

SAM (Segment Anything) zamienia kliknięcie punktu lub ramki w maskę obiektu. LibreYOLO wczytuje go przez osobną fabrykę LibreSAM, niezależną od fabryki detektorów LibreYOLO(), ponieważ model sterowany promptami wymaga innego sposobu wywołania.

Zadania
instance segmentation
Rozmiary
base, large, huge at 1024 px
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 (Segment Anything), autorzy: Meta AI Research (FAIR), licencja: Apache-2.0. Publikacja, kod źródłowy
Licencje
Kod: MIT, wagi: Apache-2.0. Użycie komercyjne

Instalacja

SAM wymaga dodatku sam, który instaluje zależności transformers i timm.

bash
pip install "libreyolo[sam]"

Predykcja

LibreSAM(...) 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.

Prompty punktowe i ramkowe
from libreyolo import LibreSAM, SAMPLE_IMAGE # "base" automatycznie pobiera facebook/sam-vit-base przy pierwszym użyciu.# Inne rozmiary: "large", "huge" (także "b"/"l"/"h").model = LibreSAM("base") # 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 LibreSAM, SAMPLE_IMAGE model = LibreSAM("base") # 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. SAM służy w LibreYOLO wyłącznie do predykcji, a śledzenie wideo pozostaje poza zakresem. Informacje o typach źródeł zawiera strona predykcji.

Warianty

Dostępne są trzy rozmiary enkodera obrazu ViT: base, large i huge, wszystkie ze stałym wejściem 1024 px. 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. Base koduje najszybciej, a huge jest najcięższy.

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 (Segment Anything), Meta AI Research (FAIR)
Licencja projektu źródłowego
Apache-2.0
Kod LibreYOLO
MIT
Wagi
Apache-2.0, rozpowszechniane przez autorów. LibreYOLO ich nie hostuje ani nie udostępnia kopii.
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 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 nie hostuje własnej kopii wag SAM-1. LibreSAM("base"), "large" i "huge" pobierają je bezpośrednio z własnych repozytoriów Meta facebook/sam-vit-base, facebook/sam-vit-large i facebook/sam-vit-huge na Hugging Face. Każde z nich jest tam oznaczone licencją Apache-2.0 niezależnie od LibreYOLO.

Cytowanie

@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}
}

Skopiowano z bloku cytowania autorów w github.com/facebookresearch/segment-anything#citing-segment-anything.

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.