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.
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.
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)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.
| Plik | Wejście (px) | Licencja wag |
|---|---|---|
| Instance segmentation | ||
| LibreMobileSAM.pt | apache-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.