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.

bash
pip install "libreyolo[clip]"

Vorhersage

Die Gewichte werden beim ersten Aufruf von Hugging Face geladen und lokal zwischengespeichert.

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
# 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=True
Bild- und Text-Embedding
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") # 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.

Python
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"])
CLI
libreyolo val model=LibreCLIPb32-cls.pt data=imagenette160

Export

AufgabeONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX: unterstütztclassify to TorchScript: unterstütztclassify to ExecuTorch: unterstütztclassify to TensorRT: unterstütztclassify to OpenVINO: unterstütztclassify to Paddle: nicht unterstütztclassify to MNN: nicht unterstütztclassify to RKNN: nicht unterstütztclassify to ncnn: nicht unterstütztclassify to TFLite: nicht unterstütztclassify to CoreML: nicht unterstütztclassify to Core AI: unterstützt
embedembed to ONNX: unterstütztembed to TorchScript: unterstütztembed to ExecuTorch: unterstütztembed to TensorRT: unterstütztembed to OpenVINO: unterstütztembed to Paddle: nicht unterstütztembed to MNN: nicht unterstütztembed to RKNN: nicht unterstütztembed to ncnn: nicht unterstütztembed to TFLite: nicht unterstütztembed to CoreML: nicht unterstütztembed 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.

Python
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.
CLI
# 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=onnx
Embedding-Export
from 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.

DateiEingabe (px)Lizenz der Gewichte
classify
LibreCLIPb32-cls.ptmit
LibreCLIPb16-cls.ptmit

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
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.

Mit LibreYOLO v1.5.0 verifiziert. Supporttabellen, Checkpoints und Benchmarkwerte auf dieser Seite werden aus der veröffentlichten Bibliothek und den publizierten Gewichten generiert und nicht von Hand geschrieben.