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.
Proyek upstream
SigLIP 2 oleh Google DeepMind, Apache-2.0. Makalah, sumber
Lisensi
Kode MIT, bobot Apache-2.0. Penggunaan komersial

Instalasi

SigLIP2 memerlukan komponen tambahannya sendiri, yang memasang paket SentencePiece untuk tokenizer multibahasa miliknya.

bash
pip install "libreyolo[siglip2]"

Prediksi

Bobot diunduh dari Hugging Face saat pertama kali digunakan dan disimpan dalam cache lokal.

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
# 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=True
Penilaian sigmoid multi-label
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) # 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]))
Embedding gambar dan teks
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.

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

Ekspor

TaskONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX: didukungclassify to TorchScript: didukungclassify to ExecuTorch: didukungclassify to TensorRT: didukungclassify to OpenVINO: didukungclassify to Paddle: tidak didukungclassify to MNN: tidak didukungclassify to RKNN: tidak didukungclassify to ncnn: tidak didukungclassify to TFLite: didukungclassify to CoreML: tidak didukungclassify to Core AI: didukung
embedembed to ONNX: didukungembed to TorchScript: didukungembed to ExecuTorch: didukungembed to TensorRT: didukungembed to OpenVINO: didukungembed to Paddle: tidak didukungembed to MNN: tidak didukungembed to RKNN: tidak didukungembed to ncnn: tidak didukungembed to TFLite: didukungembed to CoreML: tidak didukungembed 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.

Python
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.
CLI
# 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=onnx
Ekspor embedding
from 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.

BerkasInput (piksel)Lisensi bobot
classify
LibreSigLIP2b16-cls.ptapache-2.0
LibreSigLIP2so400m-cls.ptapache-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
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.

Diverifikasi dengan LibreYOLO v1.5.0. Tabel dukungan, checkpoint, dan angka benchmark di halaman ini dihasilkan dari library yang telah dirilis dan bobot yang dipublikasikan, bukan ditulis manual.