SigLIP2
SigLIP2 adalah model dual-tower yang menilai gambar terhadap prompt teks dengan sigmoid independen per kelas, bukan softmax bersama pada kumpulan label tetap. LibreYOLO mendukungnya untuk klasifikasi zero-shot serta embedding gambar/teks, tanpa tahap pelatihan.
- Task
- classify, embed
- Ukuran
- Instalasi
pip install libreyolo- Tier dukungan
- Tier sejajar, sejak v. Permukaan produk terpisah dengan factory dan kontraknya sendiri.
- Lisensi
- Kode MIT, bobot Apache-2.0. Penggunaan komersial
Instalasi
SigLIP2 memerlukan komponen tambahannya sendiri, yang memasang paket SentencePiece untuk tokenizer multibahasa miliknya.
pip install "libreyolo[siglip2]"Prediksi
Bobot diunduh dari Hugging Face saat pertama kali digunakan dan disimpan dalam cache lokal.
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))# Tanpa pemanggilan set_classes(), prediksi CLI memakai 1.000 nama kelas# ImageNet yang dimuat model secara default.libreyolo predict model=LibreSigLIP2b16-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom 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) # Probabilitas independen per kelas: lebih dari satu, atau tidak ada, dapat# meraih skor tinggi sekaligus. Softmax (default) justru menormalisasikannya# menjadi distribusi satu label, sesuai perilaku LibreCLIP.for i, name in model.names.items(): print(name, float(r.probs.data[i]))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") # Keduanya dinormalisasi L2, sehingga dot product biasa adalah cosine similarity.similarity = (image_embed @ text_embed.T).item()set_classes() adalah satu-satunya primitif yang menjadikannya pengklasifikasi
open-vocabulary: metode ini merender setiap label ke dalam semua template prompt, mengenkode
dan merata-ratakan hasilnya, lalu menyimpan matriks [K, D] yang dihasilkan sebagai head
pengklasifikasi dalam cache, sehingga tidak dihitung ulang per gambar. Panggil lagi kapan pun
untuk mengubah kelas. Tanpa pemanggilan tersebut, LibreSigLIP2 dimuat dengan 1.000 nama kelas
ImageNet-1k yang sudah ditetapkan.
SigLIP menilai setiap kelas secara independen: logit = scale * (image . text) + bias.
Secara default, kumpulan logit tersebut tetap diteruskan melalui softmax, menghasilkan
distribusi satu label yang sesuai dengan perilaku top1/top5 LibreCLIP. Meneruskan
multi_label=True ke set_classes() (atau saat konstruksi) beralih ke probabilitas sigmoid
independen, sehingga lebih dari satu kelas, atau tidak ada kelas, dapat meraih skor tinggi
pada gambar yang sama. Tokenizer-nya adalah model SentencePiece multibahasa (kosakata Gemma),
sehingga nama kelas dalam bahasa selain Inggris berfungsi dengan cara yang sama.
Dengan task="embed", prediksi mengembalikan satu vektor gambar yang dinormalisasi L2 per
input, bukan probabilitas kelas, sedangkan embed_text() mengembalikan baris teks ternormalisasi
dalam ruang vektor yang sama, sehingga dot product biasa di antara keduanya adalah cosine
similarity. iou tidak berpengaruh pada kedua task; tidak ada tahap NMS. Lihat
prediksi untuk sumber, streaming, dan penanganan hasil.
Validasi
val() membaca nama folder kelas di bawah split train/ ImageFolder, memanggil
set_classes() dengannya, lalu mengukur akurasi zero-shot top-1 dan top-5 dengan penilaian
softmax. Akurasi bergantung pada cara nama kelas dibaca sebagai prompt, bukan pada pembaruan
bobot apa pun, karena tidak ada yang perlu dilatih. Validasi hanya mencakup
task="classify"; task="embed" tidak memiliki validator dataset.
from libreyolo import LibreYOLO model = LibreYOLO("LibreSigLIP2b16-cls.pt") # data adalah root ImageFolder dengan split train/; nama foldernya# menjadi prompt kelas zero-shot untuk proses ini.metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])libreyolo val model=LibreSigLIP2b16-cls.pt data=imagenette160Ekspor
| Task | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| classify | classify to ONNX: didukung | classify to TorchScript: didukung | classify to ExecuTorch: didukung | classify to TensorRT: didukung | classify to OpenVINO: didukung | classify to Paddle: tidak didukung | classify to MNN: tidak didukung | classify to RKNN: tidak didukung | classify to ncnn: tidak didukung | classify to TFLite: didukung | classify to CoreML: tidak didukung | classify to Core AI: didukung |
| embed | embed to ONNX: didukung | embed to TorchScript: didukung | embed to ExecuTorch: didukung | embed to TensorRT: didukung | embed to OpenVINO: didukung | embed to Paddle: tidak didukung | embed to MNN: tidak didukung | embed to RKNN: tidak didukung | embed to ncnn: tidak didukung | embed to TFLite: didukung | embed to CoreML: tidak didukung | embed to Core AI: tidak didukung |
Ekspor menanam status model saat ini ke dalam graph tetap. Untuk task="classify", label
apa pun yang terakhir ditetapkan set_classes() dan resolusi saat ekspor ditanam ke lapisan
linear akhir dengan scale dan bias yang dipelajari, sehingga graph hasil ekspor menjadi
pengklasifikasi gambar [B, K] biasa tanpa tower teks dan tanpa tokenizer; ekspor ulang
setelah mengubah kelas atau ukuran. Ekspor dalam mode multi_label=True belum
diimplementasikan; kembalikan ke False terlebih dahulu. Ekspor task="embed" melakukan
trace pada tower gambar saja. Keduanya memerlukan ONNX opset 14 atau lebih tinggi, yang
ditetapkan secara default oleh exporter.
from libreyolo import LibreYOLO model = LibreYOLO("LibreSigLIP2b16-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])model.export(format="onnx") # Label set_classes() saat ini dan resolusi input ditanam ke dalam graph.# Ekspor ulang setelah mengubah salah satunya. multi_label harus# False (default) saat ekspor.# Tidak ada pemanggilan set_classes() di sini, sehingga 1.000 kelas ImageNet# default yang dimuat model akan ditanam.libreyolo export model=LibreSigLIP2b16-cls.pt format=onnxfrom libreyolo import LibreYOLO # task="embed" melakukan trace pada tower gambar saja; tidak memerlukan kelas.model = LibreYOLO("LibreSigLIP2b16-cls.pt", task="embed")model.export(format="onnx")Checkpoint
Setiap berkas bobot yang dipublikasikan untuk family ini. Keduanya dikonversi dari checkpoint
Apache-2.0 Google siglip2-base-patch16-256 dan siglip2-so400m-patch14-384, bukan dari
proses pelatihan COCO apa pun.
| Berkas | Input (piksel) | Lisensi bobot |
|---|---|---|
| classify | ||
| LibreSigLIP2b16-cls.pt | apache-2.0 | |
| LibreSigLIP2so400m-cls.pt | apache-2.0 | |
Setiap berkas di atas saat ini tersedia di organisasi LibreYOLO dan diunduh saat pertama kali digunakan.
Lisensi
Periksa lisensi di repositori Hugging Face untuk bobot tertentu yang diunduh. Setiap checkpoint di organisasi LibreYOLO memiliki lisensi, dan lisensinya tidak selalu sama dalam satu family. Repositori tersebut adalah sumber resmi. Ringkasan di bawah menjelaskan ketentuan yang berlaku saat halaman ini terakhir diverifikasi.
Ini adalah deskripsi lisensi yang terlibat, bukan nasihat hukum. Jika jawabannya penting secara komersial, baca sendiri lisensinya dan mintalah nasihat dari penasihat hukum Anda.
- Karya asli
- SigLIP 2, Google DeepMind
- Lisensi upstream
- Apache-2.0
- Sumber upstream
- github.com/huggingface/transformers
- Kode LibreYOLO
- MIT
- Bobot
- Apache-2.0, dipublikasikan ulang di huggingface.co/LibreYOLO
- Interpretasi
- 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.
Sitasi
@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},
}Disalin dari blok sitasi penulis di huggingface.co/google/siglip2-base-patch16-256#bibtex-entry-and-citation-info.