CLIP

CLIP là mô hình hai nhánh chấm điểm một ảnh theo các prompt văn bản thay vì một tập nhãn cố định. LibreYOLO hỗ trợ mô hình này cho 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
CLIP / OpenCLIP của OpenAI; LAION / ML Foundations, MIT. Bài báo, mã nguồn
Giấy phép
Mã nguồn MIT, trọng số MIT. Sử dụng thương mại

Cài đặt

CLIP cần extra riêng, extra này kéo về các package mà BPE tokenizer đi kèm sử dụng để tái tạo chính xác các ID token.

bash
pip install "libreyolo[clip]"

Dự đoán

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

Python
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))
CLI
# Khi không gọi set_classes(), lệnh predict của CLI dùng 1.000 tên lớp# ImageNet mà mô hình tải theo mặc định.libreyolo predict model=LibreCLIPb32-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Embedding ảnh và văn bản
from 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") # Cả hai đều được chuẩn hóa L2, vì vậy tích vô hướng chính là độ tương đồng cosine.similarity = (image_embed @ text_embed.T).item()

set_classes() là primitive duy nhất biến mô hình này thành bộ phân loại với từ vựng mở (open-vocabulary): hàm dựng từng nhãn theo mọi mẫu prompt, mã hóa rồi lấy trung bình kết quả và lưu ma trận [K, D] thu được làm classifier head, vì vậy ma trận không được tính lại cho từng ảnh. Gọi lại hàm bất kỳ lúc nào để thay đổi các lớp đối tượng. Nếu không gọi, LibreCLIP tải với 1.000 tên lớp đối tượng ImageNet-1k đã được thiết lập sẵn.

Với task="embed", thao tác dự đoán trả về một vector ảnh được chuẩn hóa L2 cho mỗi đầu vào thay vì xác suất lớp đối tượng, còn embed_text() trả về các hàng văn bản được 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 có tác dụng với cả hai tác vụ; không có bước NMS. Xem dự đoán để biết về nguồn, xử lý luồng và kết quả.

Xác thực

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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt") # data là thư mục gốc ImageFolder có phần train/; tên thư mục của nó# trở thành prompt lớp zero-shot cho lần chạy này.metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreCLIPb32-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: không đượ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: không được hỗ trợembed to CoreML: không được hỗ trợembed to Core AI: không được hỗ trợ

Thao tác xuất đóng trạng thái hiện tại của mô hình vào một graph cố định. Với task="classify", các nhãn được thiết lập gần nhất bởi set_classes() và độ phân giải tại thời điểm xuất được đóng vào lớp tuyến tính cuối cùng, do đó graph ONNX hoặc TensorRT đã xuất là một bộ phân loại ảnh [B, K] thông thường, không có nhánh văn bản và tokenizer; hãy xuất lại sau khi thay đổi lớp đối tượng hoặc kích thước. Thao tác xuất task="embed" chỉ truy vết nhánh ảnh. Cả hai đều cần ONNX opset 14 trở lên, trình xuất thiết lập giá trị này theo mặc định.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-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 đóng cố định# vào graph. Hãy xuất lại sau khi thay đổi một trong hai.
CLI
# Không gọi set_classes() ở đây, vì vậy thao tác này đóng cố định 1.000# lớp ImageNet mặc định mà mô hình tải cùng.libreyolo export model=LibreCLIPb32-cls.pt format=onnx
Xuất embedding
from libreyolo import LibreYOLO # task="embed" truy vết riêng nhánh ảnh; không cần lớp đối tượng.model = LibreYOLO("LibreCLIPb32-cls.pt", task="embed")model.export(format="onnx")

Checkpoint

Mọi tệp trọng số đã phát hành cho họ mô hình này. Cả hai đều được chuyển đổi từ các checkpoint của OpenCLIP được huấn luyện trên LAION-2B (ViT-B-32ViT-B-16), không phải từ bất kỳ lần huấn luyện COCO nào.

TệpĐầu vào (px)Giấy phép trọng số
classify
LibreCLIPb32-cls.ptmit
LibreCLIPb16-cls.ptmit

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.

Dữ liệu huấn luyện LAION-2B có lịch sử được ghi nhận về nội dung CSAM (Stanford Internet Observatory, tháng 12 năm 2023). Kể từ đó LAION đã phát hành Re-LAION, một bản phát hành lại đã được làm sạch; nếu bạn tiếp tục host lại các trọng số này, nên ưu tiên checkpoint bắt nguồn từ Re-LAION khi có.

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
CLIP / OpenCLIP, OpenAI; LAION / ML Foundations
Giấy phép thượng nguồn
MIT
Nguồn thượng nguồn
github.com/mlfoundations/open_clip
Mã nguồn LibreYOLO
MIT
Trọng số
MIT, được phát hành lại tại huggingface.co/LibreYOLO
Diễn giải
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.

Trích dẫn

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

Được sao chép từ khối trích dẫn của tác giả tại github.com/mlfoundations/open_clip#citing.

Đã 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.