CLIP
CLIP adalah model dua menara yang menilai sebuah gambar terhadap prompt teks, bukan terhadap kumpulan label tetap. LibreYOLO mendukungnya untuk klasifikasi zero-shot serta embedding gambar dan teks, tanpa langkah 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 MIT. Penggunaan komersial
Instalasi
CLIP membutuhkan extra tersendiri, yang ikut memasang paket yang dipakai tokenizer BPE bawaannya untuk menghasilkan token id yang persis sama.
pip install "libreyolo[clip]"Prediksi
Bobot diunduh dari Hugging Face saat pertama kali dipakai dan disimpan di cache lokal.
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))# Tanpa panggilan set_classes(), predict CLI memakai 1.000 nama# kelas ImageNet yang dimuat model secara default.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") # Keduanya ternormalisasi L2, jadi dot product biasa adalah cosine similarity.similarity = (image_embed @ text_embed.T).item()set_classes() adalah satu-satunya primitif yang menjadikan ini classifier open-vocabulary: fungsi ini menyisipkan setiap label ke seluruh template prompt, melakukan encoding lalu merata-ratakan hasilnya, dan menyimpan matriks [K, D] yang terbentuk di cache sebagai head classifier, sehingga matriks itu tidak dihitung ulang untuk tiap gambar. Panggil lagi kapan saja untuk mengganti kelas. Tanpa panggilan itu, LibreCLIP dimuat dengan 1.000 nama kelas ImageNet-1k yang sudah tersetel.
Dengan task="embed", prediksi mengembalikan satu vektor gambar ternormalisasi L2 per input, bukan probabilitas kelas, dan embed_text() mengembalikan baris teks ternormalisasi di ruang vektor yang sama, sehingga dot product biasa di antara keduanya adalah cosine similarity. iou tidak berpengaruh pada kedua task itu; tidak ada langkah NMS. Lihat prediksi untuk sumber, streaming dan penanganan hasil.
Validasi
val() membaca nama folder kelas di bawah split train/ sebuah ImageFolder, memanggil set_classes() dengan nama tersebut, lalu mengukur akurasi zero-shot top-1 dan top-5. Akurasi bergantung pada seberapa baik nama kelas terbaca sebagai prompt, bukan pada pembaruan bobot apa pun, karena tidak ada yang perlu dilatih. Validasi hanya mencakup task="classify"; task="embed" tidak punya validator dataset.
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-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=LibreCLIPb32-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: tidak 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: tidak didukung | embed to CoreML: tidak didukung | embed to Core AI: tidak didukung |
Ekspor menanamkan kondisi model saat ini ke dalam graph yang tetap. Untuk task="classify", label apa pun yang terakhir ditetapkan set_classes(), beserta resolusi pada saat ekspor, ditanamkan ke lapisan linear terakhir, sehingga graph ONNX atau TensorRT hasil ekspor adalah classifier gambar [B, K] biasa tanpa menara teks dan tanpa tokenizer; lakukan ekspor ulang setelah mengubah kelas atau ukurannya. Ekspor dengan task="embed" hanya menelusuri menara gambar. Keduanya membutuhkan ONNX opset 14 atau lebih tinggi, yang memang disetel exporter secara default.
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])model.export(format="onnx") # Label set_classes() saat ini dan resolusi input ditanamkan ke# dalam graph. Lakukan ekspor ulang setelah mengubah salah satunya.# Tidak ada panggilan set_classes() di sini, jadi ini menanamkan# 1.000 kelas ImageNet bawaan yang dimuat model.libreyolo export model=LibreCLIPb32-cls.pt format=onnxfrom libreyolo import LibreYOLO # task="embed" hanya menelusuri menara gambar; tidak perlu kelas.model = LibreYOLO("LibreCLIPb32-cls.pt", task="embed")model.export(format="onnx")Checkpoint
Semua berkas bobot yang dipublikasikan untuk family ini. Keduanya dikonversi dari checkpoint OpenCLIP yang dilatih pada LAION-2B (ViT-B-32 dan ViT-B-16), bukan dari pelatihan COCO mana pun.
| Berkas | Input (piksel) | Lisensi bobot |
|---|---|---|
| classify | ||
| LibreCLIPb32-cls.pt | mit | |
| LibreCLIPb16-cls.pt | mit | |
Setiap berkas di atas saat ini tersedia di organisasi LibreYOLO dan diunduh saat pertama kali digunakan.
Data pelatihan LAION-2B punya riwayat terdokumentasi berisi konten CSAM (Stanford Internet Observatory, Desember 2023). Sejak itu LAION merilis Re-LAION, rilis ulang yang sudah dibersihkan; jika Anda melakukan hosting ulang bobot ini lebih lanjut, pilih checkpoint turunan Re-LAION bila tersedia.
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
- CLIP / OpenCLIP, OpenAI; LAION / ML Foundations
- Lisensi upstream
- MIT
- Sumber upstream
- github.com/mlfoundations/open_clip
- Kode LibreYOLO
- MIT
- Bobot
- MIT, dipublikasikan ulang di huggingface.co/LibreYOLO
- Interpretasi
- 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.
Sitasi
@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}
}Disalin dari blok sitasi penulis di github.com/mlfoundations/open_clip#citing.