SigLIP2

SigLIP2 là mô hình hai tower chấm điểm ảnh theo các prompt văn bản bằng sigmoid độc lập cho từng lớp, thay vì softmax dùng chung trên một tập nhãn cố định. LibreYOLO hỗ trợ mô hình để phân loại zero-shot và tạo embedding ảnh/văn bản mà không cần bước huấn luyện.

Tác vụ
classify, embed
Kích thước
Cài đặt
pip install libreyolo
Bậc hỗ trợ
Bậc song hành, từ v. Một bề mặt sản phẩm riêng với factory và contract riêng.
Thượng nguồn
SigLIP 2 của Google DeepMind, Apache-2.0. Bài báo, mã nguồn
Giấy phép
Mã nguồn MIT, trọng số Apache-2.0. Sử dụng thương mại

Cài đặt

SigLIP2 cần extra riêng, extra này cài thêm gói SentencePiece mà tokenizer đa ngôn ngữ sử dụng.

bash
pip install "libreyolo[siglip2]"

Dự đoán

Trọng số được tải từ Hugging Face ở lần dùng đầu tiên và lưu vào bộ nhớ đệm cục bộ.

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
# Khi không gọi set_classes(), dự đoán bằng CLI dùng 1.000 tên lớp# ImageNet mà mô hình tải theo mặc định.libreyolo predict model=LibreSigLIP2b16-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Chấm điểm sigmoid đa nhãn
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) # Xác suất độc lập theo lớp: nhiều lớp hoặc không lớp nào có thể cùng# đạt điểm cao. Softmax (mặc định) chuẩn hóa chúng thành phân phối# đơn nhãn, khớp với hành vi của LibreCLIP.for i, name in model.names.items():    print(name, float(r.probs.data[i]))
Embedding ảnh và văn bản
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") # Cả hai đều được chuẩn hóa L2, nên tích vô hướng thông thường là độ tương đồng cosine.similarity = (image_embed @ text_embed.T).item()

set_classes() là thao tác cơ bản biến mô hình thành bộ phân loại open-vocabulary: phương thức kết xuất từng nhãn vào mọi mẫu prompt, mã hóa và lấy trung bình kết quả, rồi lưu ma trận [K, D] thu được làm head phân loại trong bộ nhớ đệm để không phải tính lại theo từng ảnh. Gọi lại phương thức bất cứ lúc nào để đổi lớp. Nếu không gọi, LibreSigLIP2 tải với 1.000 tên lớp ImageNet-1k đã được đặt sẵn.

SigLIP chấm điểm từng lớp độc lập: logit = scale * (image . text) + bias. Theo mặc định, tập logit vẫn được đưa qua softmax để tạo phân phối đơn nhãn khớp với hành vi top1/top5 của LibreCLIP. Truyền multi_label=True vào set_classes() (hoặc khi khởi tạo) sẽ chuyển sang các xác suất sigmoid độc lập, vì vậy nhiều lớp hoặc không lớp nào có thể đạt điểm cao trên cùng một ảnh. Tokenizer là mô hình SentencePiece đa ngôn ngữ (từ vựng Gemma), nên tên lớp ở ngôn ngữ khác tiếng Anh hoạt động theo cùng cách.

Với task="embed", dự đoán trả về một vector ảnh đã chuẩn hóa L2 cho mỗi đầu vào thay vì xác suất lớp, còn embed_text() trả về các hàng văn bản đã chuẩn hóa trong cùng không gian vector, vì vậy tích vô hướng thông thường giữa chúng là độ tương đồng cosine. iou không tác động đến cả hai tác vụ; không có bước NMS. Xem dự đoán để biết về nguồn, streaming và xử lý kết quả.

Đánh giá

val() đọc tên thư mục lớp trong phần chia train/ của ImageFolder, gọi set_classes() với các tên đó, rồi đo độ chính xác zero-shot top-1 và top-5 theo cách chấm điểm softmax. Độ chính xác phụ thuộc vào cách tên lớp được diễn đạt thành prompt chứ không phụ thuộc vào cập nhật trọng số vì không có gì để huấn luyện. Việc đánh giá chỉ bao quát task="classify"; task="embed" không có bộ đánh giá tập dữ liệu.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreSigLIP2b16-cls.pt") # data là thư mục gốc ImageFolder có phần chia train/; tên các thư mục# trở thành prompt lớp zero-shot cho lượt chạy này.metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreSigLIP2b16-cls.pt data=imagenette160

Xuất

Tác vụONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX: được hỗ trợclassify to TorchScript: được hỗ trợclassify to ExecuTorch: được hỗ trợclassify to TensorRT: được hỗ trợclassify to OpenVINO: được hỗ trợclassify to Paddle: không được hỗ trợclassify to MNN: không được hỗ trợclassify to RKNN: không được hỗ trợclassify to ncnn: không được hỗ trợclassify to TFLite: được hỗ trợclassify to CoreML: không được hỗ trợclassify to Core AI: được hỗ trợ
embedembed to ONNX: được hỗ trợembed to TorchScript: được hỗ trợembed to ExecuTorch: được hỗ trợembed to TensorRT: được hỗ trợembed to OpenVINO: được hỗ trợembed to Paddle: không được hỗ trợembed to MNN: không được hỗ trợembed to RKNN: không được hỗ trợembed to ncnn: không được hỗ trợembed to TFLite: được hỗ trợembed to CoreML: không được hỗ trợembed to Core AI: không được hỗ trợ

Quá trình xuất nhúng trạng thái hiện tại của mô hình vào đồ thị cố định. Với task="classify", các nhãn được set_classes() đặt gần nhất cùng độ phân giải tại thời điểm xuất được nhúng vào lớp tuyến tính cuối với scale và bias đã học, vì vậy đồ thị đã xuất là bộ phân loại ảnh [B, K] thông thường, không có text tower hay tokenizer; hãy xuất lại sau khi đổi lớp hoặc kích thước. Chưa triển khai xuất ở chế độ multi_label=True; trước tiên hãy đặt lại thành False. Xuất task="embed" chỉ truy vết image tower. Cả hai cần ONNX opset 14 trở lên, được trình xuất đặt theo mặc định.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreSigLIP2b16-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])model.export(format="onnx") # Các nhãn set_classes() hiện tại và độ phân giải đầu vào được nhúng# vào đồ thị. Hãy xuất lại sau khi thay đổi một trong hai. multi_label# phải là False (mặc định) khi xuất.
CLI
# Không gọi set_classes() ở đây, nên thao tác này nhúng 1.000 lớp# ImageNet mặc định mà mô hình tải.libreyolo export model=LibreSigLIP2b16-cls.pt format=onnx
Xuất embedding
from libreyolo import LibreYOLO # task="embed" chỉ truy vết image tower; không cần lớp.model = LibreYOLO("LibreSigLIP2b16-cls.pt", task="embed")model.export(format="onnx")

Checkpoint

Mọi tệp trọng số đã công bố cho họ này. Cả hai đều được chuyển đổi từ các checkpoint siglip2-base-patch16-256siglip2-so400m-patch14-384 theo Apache-2.0 của Google, không phải từ bất kỳ lượt huấn luyện COCO nào.

TệpĐầu vào (px)Giấy phép trọng số
classify
LibreSigLIP2b16-cls.ptapache-2.0
LibreSigLIP2so400m-cls.ptapache-2.0

Mọi tệp ở trên hiện đều có trong tổ chức LibreYOLO và được tải xuống trong lần sử dụng đầu tiên.

Giấy phép

Hãy kiểm tra giấy phép trong repo Hugging Face của trọng số cụ thể mà bạn tải xuống. Mỗi checkpoint trong tổ chức LibreYOLO đều có giấy phép riêng và giấy phép có thể khác nhau trong cùng một họ. Repo đó là nguồn có thẩm quyền; phần tóm tắt dưới đây mô tả các điều khoản áp dụng khi trang này được kiểm chứng lần gần nhất.

Đây là phần mô tả các giấy phép liên quan, không phải tư vấn pháp lý. Nếu câu trả lời có ý nghĩa về mặt thương mại, hãy tự đọc các giấy phép và tham khảo cố vấn của riêng bạn.

Công trình gốc
SigLIP 2, Google DeepMind
Giấy phép thượng nguồn
Apache-2.0
Nguồn thượng nguồn
github.com/huggingface/transformers
Mã nguồn LibreYOLO
MIT
Trọng số
Apache-2.0, được phát hành lại tại huggingface.co/LibreYOLO
Diễn giải
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.

Trích dẫn

@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}, 
}

Được sao chép từ khối trích dẫn của tác giả tại huggingface.co/google/siglip2-base-patch16-256#bibtex-entry-and-citation-info.

Đã kiểm chứng với LibreYOLO v1.5.0. Các bảng hỗ trợ, checkpoint và số liệu benchmark trên trang này được tạo từ thư viện đã phát hành và trọng số đã công bố, không phải viết thủ công.