MobileSAM

MobileSAM zastępuje enkoder obrazu ViT-H modelu SAM destylowanym enkoderem TinyViT, dzięki czemu ten sam proces sterowany promptami punktowymi i ramkami działa na lżejszym sprzęcie. LibreYOLO udostępnia jego natywny port przez osobną fabrykę LibreSAM, niezależną od fabryki detektorów LibreYOLO().

Zadania
instance segmentation
Rozmiary
tiny 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
MobileSAM, autorzy: Kyung Hee University, licencja: Apache-2.0. Publikacja, kod źródłowy
Licencje
Kod: Apache-2.0, wagi: Apache-2.0. Użycie komercyjne

Instalacja

MobileSAM wymaga dodatku sam. Własne pobieranie wag LibreYOLO nadal korzysta z narzędzi snapshotów Hugging Face w transformers, mimo że inferencja działa na natywnym dekoderze niezależnym od transformers.

bash
pip install "libreyolo[sam]"

Predykcja

LibreSAM(...) (lub właściwy dla tej rodziny LibreMobileSAM(...)) 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 # MobileSAM ma jeden rozmiar, "tiny", dlatego nie jest potrzebny inny alias.model = LibreSAM("mobilesam") # 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 LibreMobileSAM, SAMPLE_IMAGE model = LibreMobileSAM() # 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. MobileSAM służy w LibreYOLO wyłącznie do predykcji. Informacje o typach źródeł zawiera strona predykcji.

Warianty

Dostępny jest jeden rozmiar, tiny, ze stałym wejściem 1024 px. MobileSAM udostępnia pojedynczy enkoder TinyViT zamiast poziomów base/large/huge z SAM-1.

Checkpointy

Wszystkie opublikowane pliki wag dla tej rodziny.

PlikWejście (px)Licencja wag
Instance segmentation
LibreMobileSAM.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
MobileSAM, Kyung Hee University
Licencja projektu źródłowego
Apache-2.0
Kod źródłowy projektu
github.com/ChaoningZhang/MobileSAM
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 carries a native port of the TinyViT image encoder, prompt encoder, two-way transformer and mask decoder rather than vendoring upstream files unmodified, checked for bit-exact parity against the original Apache-2.0 implementation, with a NOTICE recording that provenance. The converted checkpoint is hosted as LibreMobileSAM.pt on the LibreYOLO Hugging Face org, tagged Apache-2.0 there as well.

Cytowanie

@article{mobile_sam,
  title={Faster Segment Anything: Towards Lightweight SAM for Mobile Applications},
  author={Zhang, Chaoning and Han, Dongshen and Qiao, Yu and Kim, Jung Uk and Bae, Sung-Ho and Lee, Seungkyu and Hong, Choong Seon},
  journal={arXiv preprint arXiv:2306.14289},
  year={2023}
}

Skopiowano z bloku cytowania autorów w github.com/ChaoningZhang/MobileSAM#bibtex-of-our-mobilesam.

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.