SigLIP2

SigLIP2 ist ein Dual-Tower-Modell, das ein Bild anhand von Text-Prompts bewertet. Dabei verwendet es für jede Klasse ein unabhängiges Sigmoid statt eines gemeinsamen Softmax über einen festen Label-Satz. LibreYOLO unterstützt es für die Zero-Shot-Klassifizierung sowie Bild- und 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
SigLIP 2 von Google DeepMind, Apache-2.0. Publikation, Quelle
Lizenzen
Code MIT, Gewichte Apache-2.0. Kommerzielle Nutzung

Installation

SigLIP2 benötigt ein eigenes Extra, das das SentencePiece-Paket für seinen mehrsprachigen Tokenizer installiert.

bash
pip install "libreyolo[siglip2]"

Vorhersage

Die Gewichte werden bei der ersten Verwendung von Hugging Face heruntergeladen und lokal zwischengespeichert.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreSigLIP2b16-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 Aufruf von set_classes() verwendet die CLI-Vorhersage die 1.000# ImageNet-Klassennamen, die das Modell standardmäßig lädt.libreyolo predict model=LibreSigLIP2b16-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Sigmoid-Bewertung für mehrere Labels
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreSigLIP2b16-cls.pt")model.set_classes(["a dog", "a cat", "outdoors"], multi_label=True)r = model(SAMPLE_IMAGE) # Unabhängige Wahrscheinlichkeiten je Klasse: Mehrere oder auch keine# können gleichzeitig hoch ausfallen. Softmax (der Standard) normiert sie# stattdessen wie bei LibreCLIP zu einer Single-Label-Verteilung.for i, name in model.names.items():    print(name, float(r.probs.data[i]))
Bild- und Text-Embeddings
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreSigLIP2b16-cls.pt", task="embed")image_embed = model(SAMPLE_IMAGE).embeddings.datatext_embed = model.embed_text("a photo of a forklift") # Beide sind L2-normalisiert, daher entspricht ein einfaches Skalarprodukt der Kosinusähnlichkeit.similarity = (image_embed @ text_embed.T).item()

set_classes() ist die zentrale Funktion, die daraus einen Open-Vocabulary-Klassifikator macht. Sie setzt jedes Label in alle Prompt-Vorlagen ein, codiert und mittelt die Ergebnisse und speichert die resultierende [K, D]-Matrix als Klassifikationskopf zwischen. Dadurch wird sie nicht für jedes Bild neu berechnet. Rufe die Funktion jederzeit erneut auf, um die Klassen zu ändern. Ohne Aufruf lädt LibreSigLIP2 die bereits festgelegten 1.000 Klassennamen von ImageNet-1k.

SigLIP bewertet jede Klasse unabhängig: logit = scale * (image . text) + bias. Standardmäßig wird diese Menge von Logits dennoch durch ein Softmax geleitet. So entsteht eine Single-Label-Verteilung, deren Verhalten für top1 und top5 dem von LibreCLIP entspricht. Wenn du multi_label=True an set_classes() oder beim Erstellen des Modells übergibst, verwendet das Modell stattdessen unabhängige Sigmoid-Wahrscheinlichkeiten. Dadurch können auf demselben Bild mehrere Klassen oder gar keine Klasse eine hohe Bewertung erzielen. Der Tokenizer ist ein mehrsprachiges SentencePiece-Modell mit Gemma-Vokabular, sodass Klassennamen in anderen Sprachen genauso funktionieren wie englische.

Mit task="embed" gibt die Vorhersage statt Klassenwahrscheinlichkeiten einen L2-normalisierten Bildvektor je Eingabe zurück. embed_text() liefert normalisierte Textzeilen im selben Vektorraum, sodass ihr einfaches Skalarprodukt der Kosinusähnlichkeit entspricht. iou hat bei keiner der beiden Aufgaben eine Wirkung, da es keinen NMS-Schritt gibt. Unter Vorhersage findest du Informationen zu Quellen, Streaming und Ergebnisverarbeitung.

Validierung

val() liest die Namen der Klassenordner unter dem train/-Split eines ImageFolder-Datensatzes, ruft damit set_classes() auf und misst anschließend die Zero-Shot-Genauigkeit für Top-1 und Top-5 unter Softmax-Bewertung. Die Genauigkeit hängt davon ab, wie gut sich die Klassennamen als Prompts eignen, nicht von einer Aktualisierung der Gewichte, da kein Training stattfindet. Die Validierung gilt nur für task="classify"; für task="embed" gibt es keinen Datensatz-Validator.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreSigLIP2b16-cls.pt") # data ist ein ImageFolder-Stammverzeichnis mit einem train/-Split;# dessen Ordnernamen werden für diesen Lauf zu Zero-Shot-Klassen-Prompts.metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreSigLIP2b16-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: 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: unterstütztembed to CoreML: nicht unterstütztembed to Core AI: nicht unterstützt

Beim Export wird der aktuelle Zustand des Modells in einen festen Graphen eingebettet. Für task="classify" werden die zuletzt mit set_classes() festgelegten Labels und die Auflösung zum Exportzeitpunkt in eine abschließende lineare Schicht mit dem gelernten Skalierungsfaktor und Bias übernommen. Der exportierte Graph ist damit ein gewöhnlicher [B, K]-Bildklassifikator ohne Text-Tower und Tokenizer. Exportiere erneut, nachdem du die Klassen oder die Größe geändert hast. Der Export im Modus multi_label=True ist nicht implementiert. Setze den Wert zuerst wieder auf False. Beim Export mit task="embed" wird nur der Bild-Tower aufgezeichnet. Beide Varianten benötigen ONNX-Opset 14 oder höher, den der Exporter standardmäßig festlegt.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreSigLIP2b16-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])model.export(format="onnx") # Die aktuellen Labels aus set_classes() und die Eingabeauflösung werden# in den Graphen eingebettet. Exportiere nach jeder Änderung erneut.# multi_label muss beim Export False (der Standard) sein.
CLI
# Ohne Aufruf von set_classes() werden hier die standardmäßigen 1.000# ImageNet-Klassen eingebettet, die das Modell lädt.libreyolo export model=LibreSigLIP2b16-cls.pt format=onnx
Embedding-Export
from libreyolo import LibreYOLO # task="embed" zeichnet nur den Bild-Tower auf; Klassen sind nicht erforderlich.model = LibreYOLO("LibreSigLIP2b16-cls.pt", task="embed")model.export(format="onnx")

Checkpoints

Alle für diese Familie veröffentlichten Gewichtsdateien. Beide wurden aus Googles Apache-2.0-Checkpoints siglip2-base-patch16-256 und siglip2-so400m-patch14-384 konvertiert, nicht aus einem COCO-Trainingslauf.

DateiEingabe (px)Lizenz der Gewichte
classify
LibreSigLIP2b16-cls.ptapache-2.0
LibreSigLIP2so400m-cls.ptapache-2.0

Jede oben aufgeführte Datei ist heute in der LibreYOLO-Organisation verfügbar und wird bei der ersten Verwendung heruntergeladen.

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
SigLIP 2, Google DeepMind
Upstream-Lizenz
Apache-2.0
LibreYOLO-Code
MIT
Gewichte
Apache-2.0, erneut unter huggingface.co/LibreYOLO veröffentlicht
Einordnung
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code. LibreSigLIP2's image and text towers are a clean-room re-implementation structured to match Hugging Face Transformers' SigLIP reference implementation, built without transformers as a runtime dependency; the multilingual SentencePiece tokenizer (Gemma vocabulary) is shipped verbatim from the Apache-2.0 google/siglip2-* release. The shipped checkpoints (b16, so400m) are converted from Google's Apache-2.0 siglip2-base-patch16-256 and siglip2-so400m-patch14-384 weights, a metadata wrap with the learned parameters unchanged. Training is not offered for this family: LibreSigLIP2 is zero-shot, and set_classes() replaces the fine-tuning step a trained classifier would otherwise need.

Zitieren

@misc{tschannen2025siglip2multilingualvisionlanguage,
      title={SigLIP 2: Multilingual Vision-Language Encoders with Improved Semantic Understanding, Localization, and Dense Features}, 
      author={Michael Tschannen and Alexey Gritsenko and Xiao Wang and Muhammad Ferjad Naeem and Ibrahim Alabdulmohsin and Nikhil Parthasarathy and Talfan Evans and Lucas Beyer and Ye Xia and Basil Mustafa and Olivier Hénaff and Jeremiah Harmsen and Andreas Steiner and Xiaohua Zhai},
      year={2025},
      eprint={2502.14786},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2502.14786}, 
}

Aus dem Zitierblock der Autoren unter huggingface.co/google/siglip2-base-patch16-256#bibtex-entry-and-citation-info 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.