CLIP

CLIP to model z dwiema wieżami, który ocenia obraz względem promptów tekstowych zamiast stałego zestawu etykiet. LibreYOLO obsługuje go w klasyfikacji zero-shot oraz do tworzenia embeddingów obrazu i tekstu, bez etapu trenowania.

Zadania
classify, embed
Rozmiary
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
CLIP / OpenCLIP, autorzy: OpenAI; LAION / ML Foundations, licencja: MIT. Publikacja, kod źródłowy
Licencje
Kod: MIT, wagi: MIT. Użycie komercyjne

Instalacja

CLIP wymaga własnego dodatku, który instaluje pakiety używane przez dołączony tokenizator BPE do dokładnego odtworzenia identyfikatorów tokenów.

bash
pip install "libreyolo[clip]"

Predykcja

Przy pierwszym użyciu wagi są pobierane z Hugging Face i zapisywane lokalnie w pamięci podręcznej.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreCLIPb32-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])result = model(SAMPLE_IMAGE, save=True) print(model.names[result.probs.top1], float(result.probs.top1conf))
CLI
# Bez wywołania set_classes() predykcja CLI używa 1000 nazw klas# ImageNet, które model wczytuje domyślnie.libreyolo predict model=LibreCLIPb32-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Embedding obrazu i tekstu
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreCLIPb32-cls.pt", task="embed")image_embed = model(SAMPLE_IMAGE).embeddings.datatext_embed = model.embed_text("a photo of a forklift") # Oba są znormalizowane normą L2, więc zwykły iloczyn skalarny jest podobieństwem cosinusowym.similarity = (image_embed @ text_embed.T).item()

set_classes() to podstawowa operacja, dzięki której jest to klasyfikator z otwartym słownikiem. Renderuje każdą etykietę we wszystkich szablonach promptów, koduje i uśrednia wyniki, a następnie zapisuje powstałą macierz [K, D] w pamięci podręcznej jako głowicę klasyfikatora, dzięki czemu nie jest ona obliczana ponownie dla każdego obrazu. Metodę można wywołać ponownie, aby w dowolnej chwili zmienić klasy. Bez tego wywołania LibreCLIP ma już ustawione 1000 nazw klas ImageNet-1k.

Przy task="embed" predykcja zwraca po jednym znormalizowanym normą L2 wektorze obrazu dla każdego wejścia zamiast prawdopodobieństw klas, a embed_text() zwraca znormalizowane wiersze tekstu w tej samej przestrzeni wektorowej. Zwykły iloczyn skalarny między nimi jest więc podobieństwem cosinusowym. Argument iou nie ma wpływu na żadne z tych zadań, ponieważ nie występuje etap NMS. Zobacz stronę predykcji, aby poznać źródła, streaming i obsługę wyników.

Walidacja

Metoda val() odczytuje nazwy folderów klas z podziału train/ ImageFolder, wywołuje z nimi set_classes(), a następnie mierzy accuracy top-1 i top-5 w trybie zero-shot. Accuracy zależy od tego, jak nazwy klas sprawdzają się jako prompty, a nie od aktualizacji wag, ponieważ model nie jest trenowany. Walidacja obejmuje wyłącznie task="classify". Dla task="embed" nie ma walidatora zbioru danych.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt") # data to katalog główny ImageFolder z podziałem train/; nazwy jego# folderów stają się promptami klas zero-shot dla tego uruchomienia.metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreCLIPb32-cls.pt data=imagenette160

Eksport

ZadanieONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX: obsługiwaneclassify to TorchScript: obsługiwaneclassify to ExecuTorch: obsługiwaneclassify to TensorRT: obsługiwaneclassify to OpenVINO: obsługiwaneclassify to Paddle: brak obsługiclassify to MNN: brak obsługiclassify to RKNN: brak obsługiclassify to ncnn: brak obsługiclassify to TFLite: brak obsługiclassify to CoreML: brak obsługiclassify to Core AI: obsługiwane
embedembed to ONNX: obsługiwaneembed to TorchScript: obsługiwaneembed to ExecuTorch: obsługiwaneembed to TensorRT: obsługiwaneembed to OpenVINO: obsługiwaneembed to Paddle: brak obsługiembed to MNN: brak obsługiembed to RKNN: brak obsługiembed to ncnn: brak obsługiembed to TFLite: brak obsługiembed to CoreML: brak obsługiembed to Core AI: brak obsługi

Eksport zapisuje bieżący stan modelu w stałym grafie. W przypadku task="classify" etykiety ustawione ostatnio przez set_classes() oraz rozdzielczość w chwili eksportu zostają zapisane w końcowej warstwie liniowej. Wyeksportowany graf ONNX lub TensorRT jest więc zwykłym klasyfikatorem obrazów [B, K], bez wieży tekstu i bez tokenizatora. Po zmianie klas lub rozmiaru należy wyeksportować model ponownie. Eksport task="embed" śledzi tylko wieżę obrazu. Oba warianty wymagają ONNX opset 14 lub nowszego, który eksporter ustawia domyślnie.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])model.export(format="onnx") # Bieżące etykiety set_classes() i rozdzielczość wejścia zostają zapisane# w grafie. Po zmianie którejkolwiek z nich należy ponowić eksport.
CLI
# Tutaj nie ma wywołania set_classes(), więc zapisywanych jest 1000# domyślnych klas ImageNet wczytanych przez model.libreyolo export model=LibreCLIPb32-cls.pt format=onnx
Eksport embeddingów
from libreyolo import LibreYOLO # task="embed" śledzi tylko wieżę obrazu; klasy nie są potrzebne.model = LibreYOLO("LibreCLIPb32-cls.pt", task="embed")model.export(format="onnx")

Checkpointy

Wszystkie opublikowane pliki wag dla tej rodziny. Oba przekonwertowano z checkpointów OpenCLIP wytrenowanych na LAION-2B (ViT-B-32 i ViT-B-16), a nie w ramach trenowania na COCO.

PlikWejście (px)Licencja wag
classify
LibreCLIPb32-cls.ptmit
LibreCLIPb16-cls.ptmit

Każdy z powyższych plików jest obecnie dostępny w organizacji LibreYOLO i pobierany przy pierwszym użyciu.

W danych treningowych LAION-2B udokumentowano występowanie materiałów CSAM (Stanford Internet Observatory, grudzień 2023). Od tego czasu LAION opublikował Re-LAION, oczyszczone ponowne wydanie. Jeśli te wagi mają być dalej udostępniane, w miarę dostępności należy preferować checkpointy utworzone z Re-LAION.

Licencjonowanie

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
CLIP / OpenCLIP, OpenAI; LAION / ML Foundations
Licencja projektu źródłowego
MIT
Kod źródłowy projektu
github.com/mlfoundations/open_clip
Kod LibreYOLO
MIT
Wagi
MIT, ponownie opublikowane w huggingface.co/LibreYOLO
Interpretacja
MIT is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep the license text and copyright notice with any copy you redistribute, and it places no obligation on your own application code. LibreCLIP's tokenizer is vendored from the OpenAI CLIP / OpenCLIP byte-pair-encoding tokenizer (also MIT); its image and text towers are a clean-room re-implementation of the standard CLIP architecture, built without open_clip as a runtime dependency. The shipped checkpoints (b32, b16) are converted from OpenCLIP's LAION-2B-trained weights, which OpenCLIP publishes as MIT-redistributable. Training is not offered for this family: LibreCLIP is zero-shot, and set_classes() replaces the fine-tuning step a trained classifier would otherwise need.

Cytowanie

@software{ilharco_gabriel_2021_5143773,
  author       = {Ilharco, Gabriel and
                  Wortsman, Mitchell and
                  Wightman, Ross and
                  Gordon, Cade and
                  Carlini, Nicholas and
                  Taori, Rohan and
                  Dave, Achal and
                  Shankar, Vaishaal and
                  Namkoong, Hongseok and
                  Miller, John and
                  Hajishirzi, Hannaneh and
                  Farhadi, Ali and
                  Schmidt, Ludwig},
  title        = {OpenCLIP},
  month        = jul,
  year         = 2021,
  note         = {If you use this software, please cite it as below.},
  publisher    = {Zenodo},
  version      = {0.1},
  doi          = {10.5281/zenodo.5143773},
  url          = {https://doi.org/10.5281/zenodo.5143773}
}

Skopiowano z bloku cytowania autorów w github.com/mlfoundations/open_clip#citing.

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.