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.
- 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.
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ộ.
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))# 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=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") # 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.
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"])libreyolo val model=LibreCLIPb32-cls.pt data=imagenette160Xuất
| Tác vụ | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| classify | classify 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ợ |
| embed | embed 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.
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.# 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=onnxfrom 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-32 và ViT-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.pt | mit | |
| LibreCLIPb16-cls.pt | mit | |
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.