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.
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.
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)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 źródłowy projektu
- github.com/facebookresearch/segment-anything
- 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.