CLIP
CLIP ist ein Dual-Tower-Modell, das ein Bild gegen Text-Prompts bewertet statt gegen einen festen Label-Satz. LibreYOLO unterstützt es für Zero-Shot-Klassifikation und Bild-/Text-Embeddings, ganz ohne Trainingsschritt.
- Aufgaben
- classify, embed
- Größen
- Installation
pip install libreyolo- Supportstufe
- Geschwisterstufe, seit v. Eine separate Produktoberfläche mit eigener Factory und eigenem Vertrag.
- Upstream
- CLIP / OpenCLIP von OpenAI; LAION / ML Foundations, MIT. Publikation, Quelle
- Lizenzen
- Code MIT, Gewichte MIT. Kommerzielle Nutzung
Installation
CLIP braucht ein eigenes Extra, das die Pakete mitbringt, die sein mitgelieferter BPE-Tokenizer nutzt, um exakte Token-IDs zu reproduzieren.
pip install "libreyolo[clip]"Vorhersage
Die Gewichte werden beim ersten Aufruf von Hugging Face geladen und lokal zwischengespeichert.
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))# Ohne set_classes()-Aufruf nutzt predict im CLI die 1000 ImageNet-# Klassennamen, mit denen das Modell standardmäßig lädt.libreyolo predict model=LibreCLIPb32-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom 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") # Beide sind L2-normalisiert, ein Skalarprodukt ist Kosinusähnlichkeit.similarity = (image_embed @ text_embed.T).item()set_classes() ist das eine Primitiv, das daraus einen Open-Vocabulary-Klassifikator macht: Es rendert jedes Label in jede Prompt-Vorlage, kodiert die Ergebnisse, mittelt sie und legt die resultierende [K, D]-Matrix als Classifier-Head im Cache ab, damit sie nicht pro Bild neu berechnet wird. Rufe es erneut auf, um die Klassen jederzeit zu ändern. Ohne Aufruf lädt LibreCLIP mit den bereits gesetzten 1000 Klassennamen von ImageNet-1k.
Mit task="embed" liefert die Vorhersage pro Eingabe einen L2-normalisierten Bildvektor statt Klassenwahrscheinlichkeiten, und embed_text() liefert normalisierte Textzeilen im selben Vektorraum, sodass ein einfaches Skalarprodukt zwischen beiden die Kosinusähnlichkeit ist. iou hat auf keine der beiden Aufgaben eine Wirkung; es gibt keinen NMS-Schritt. Siehe Vorhersage für Quellen, Streaming und den Umgang mit den Ergebnissen.
Validierung
val() liest die Namen der Klassenordner unter dem train/-Split eines ImageFolder-Datensatzes, ruft damit set_classes() auf und misst dann die Zero-Shot-Accuracy für Top-1 und Top-5. Die Accuracy hängt davon ab, wie sich die Klassennamen als Prompts lesen, nicht von einem Update der Gewichte, denn es gibt nichts zu trainieren. Die Validierung deckt nur task="classify" ab; für task="embed" gibt es keinen Validator für Datensätze.
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt") # data ist ein ImageFolder-Wurzelverzeichnis mit train/-Split; seine# Ordnernamen werden zu den Zero-Shot-Prompts dieses Laufs.metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])libreyolo val model=LibreCLIPb32-cls.pt data=imagenette160Export
| Aufgabe | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| classify | classify to ONNX: unterstützt | classify to TorchScript: unterstützt | classify to ExecuTorch: unterstützt | classify to TensorRT: unterstützt | classify to OpenVINO: unterstützt | classify to Paddle: nicht unterstützt | classify to MNN: nicht unterstützt | classify to RKNN: nicht unterstützt | classify to ncnn: nicht unterstützt | classify to TFLite: nicht unterstützt | classify to CoreML: nicht unterstützt | classify to Core AI: unterstützt |
| embed | embed to ONNX: unterstützt | embed to TorchScript: unterstützt | embed to ExecuTorch: unterstützt | embed to TensorRT: unterstützt | embed to OpenVINO: unterstützt | embed to Paddle: nicht unterstützt | embed to MNN: nicht unterstützt | embed to RKNN: nicht unterstützt | embed to ncnn: nicht unterstützt | embed to TFLite: nicht unterstützt | embed to CoreML: nicht unterstützt | embed to Core AI: nicht unterstützt |
Der Export brennt den aktuellen Zustand des Modells in einen festen Graphen ein. Bei task="classify" landen die zuletzt von set_classes() gesetzten Labels und die Auflösung zum Zeitpunkt des Exports in einer finalen linearen Schicht, sodass der exportierte ONNX- oder TensorRT-Graph ein gewöhnlicher [B, K]-Bildklassifikator ohne Text-Tower und ohne Tokenizer ist; exportiere erneut, nachdem du entweder die Klassen oder die Größe geändert hast. Der Export mit task="embed" erfasst per Tracing nur den Bild-Tower. Beide brauchen ONNX-Opset 14 oder höher, was der Exporter standardmäßig setzt.
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])model.export(format="onnx") # Die aktuellen set_classes()-Labels und die Eingabeauflösung werden# in den Graphen eingebrannt. Nach einer Änderung neu exportieren.# Hier kein set_classes()-Aufruf, also werden die 1000 ImageNet-# Standardklassen eingebrannt, mit denen das Modell lädt.libreyolo export model=LibreCLIPb32-cls.pt format=onnxfrom libreyolo import LibreYOLO # task="embed" erfasst per Tracing nur den Bild-Tower, keine Klassen.model = LibreYOLO("LibreCLIPb32-cls.pt", task="embed")model.export(format="onnx")Checkpoints
Jede veröffentlichte Gewichtsdatei dieser Familie. Beide sind aus den auf LAION-2B trainierten Checkpoints von OpenCLIP konvertiert (ViT-B-32 und ViT-B-16), nicht aus einem COCO-Trainingslauf.
| Datei | Eingabe (px) | Lizenz der Gewichte |
|---|---|---|
| classify | ||
| LibreCLIPb32-cls.pt | mit | |
| LibreCLIPb16-cls.pt | mit | |
Jede oben aufgeführte Datei ist heute in der LibreYOLO-Organisation verfügbar und wird bei der ersten Verwendung heruntergeladen.
Die Trainingsdaten von LAION-2B haben eine dokumentierte Vorgeschichte mit CSAM-Inhalten (Stanford Internet Observatory, Dezember 2023). LAION hat inzwischen Re-LAION veröffentlicht, eine bereinigte Neuauflage; bevorzuge, wo verfügbar, von Re-LAION abgeleitete Checkpoints, wenn du diese Gewichte weiter hostest.
Lizenzierung
Prüfe die Lizenz im Hugging-Face-Repository der konkreten Gewichte, die du herunterlädst. Jeder Checkpoint in der LibreYOLO-Organisation hat eine Lizenz, und sie ist innerhalb einer Familie nicht immer gleich. Dieses Repository ist die maßgebliche Quelle. Die Zusammenfassung unten beschreibt den Stand bei der letzten Verifizierung dieser Seite.
Dies ist eine Beschreibung der beteiligten Lizenzen und keine Rechtsberatung. Wenn die Antwort kommerziell relevant ist, lies die Lizenzen selbst und hole eigenen Rechtsrat ein.
- Originalarbeit
- CLIP / OpenCLIP, OpenAI; LAION / ML Foundations
- Upstream-Lizenz
- MIT
- Upstream-Quelle
- github.com/mlfoundations/open_clip
- LibreYOLO-Code
- MIT
- Gewichte
- MIT, erneut unter huggingface.co/LibreYOLO veröffentlicht
- Einordnung
- 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.
Zitieren
@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}
}Aus dem Zitierblock der Autoren unter github.com/mlfoundations/open_clip#citing kopiert.