CLIP

CLIP є двовежовою моделлю, яка оцінює зображення відносно текстових запитів замість фіксованого набору міток. LibreYOLO підтримує її для класифікації без прикладів та ембедингів зображень/тексту без етапу навчання.

Задачі
classify, embed
Розміри
Встановлення
pip install libreyolo
Рівень підтримки
Суміжний рівень, починаючи з v. Окремий інтерфейс продукту з власною фабрикою та контрактом.
Першоджерело
CLIP / OpenCLIP, автори: OpenAI; LAION / ML Foundations, ліцензія MIT. Стаття, джерело
Ліцензії
Код: MIT, ваги: MIT. Комерційне використання

Встановлення

CLIP потребує власного набору додаткових залежностей, який установлює пакети для включеного токенізатора BPE, щоб точно відтворювати ідентифікатори токенів.

bash
pip install "libreyolo[clip]"

Передбачення

Під час першого використання ваги завантажуються з Hugging Face і кешуються локально.

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
# Без виклику set_classes() передбачення CLI використовує 1,000 назв# класів ImageNet, з якими модель завантажується типово.libreyolo predict model=LibreCLIPb32-cls.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Ембединги зображення й тексту
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") # Обидва L2-нормалізовані, тому звичайний скалярний добуток є косинусною подібністю.similarity = (image_embed @ text_embed.T).item()

set_classes() є базовою операцією, яка робить цей класифікатор відкритим: вона підставляє кожну мітку в усі шаблони запитів, кодує й усереднює результати та кешує отриману матрицю [K, D] як голову класифікатора, тому її не обчислюють повторно для кожного зображення. Викличте метод знову, щоб будь-коли змінити класи. Без виклику LibreCLIP завантажується з уже заданими 1,000 назвами класів ImageNet-1k.

З task="embed" передбачення повертає один L2-нормалізований вектор зображення на вхід замість імовірностей класів, а embed_text() повертає нормалізовані рядки тексту в тому самому векторному просторі, тому звичайний скалярний добуток між ними є косинусною подібністю. iou не впливає на жодне завдання; етапу NMS немає. Типи джерел, потокове передбачення та обробку результатів описано в розділі передбачення.

Валідація

val() читає назви папок класів у поділі train/ ImageFolder, викликає з ними set_classes(), а потім вимірює правильність top-1 і top-5 без прикладів. Правильність залежить від того, як назви класів читаються як запити, а не від оновлення ваг, оскільки навчання не виконується. Валідація охоплює лише task="classify"; task="embed" не має валідатора датасету.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt") # data є коренем ImageFolder із поділом train/; назви папок стають# запитами класів без прикладів для цього запуску.metrics = model.val(data="imagenette160") print(metrics["metrics/accuracy_top1"])print(metrics["metrics/accuracy_top5"])
CLI
libreyolo val model=LibreCLIPb32-cls.pt data=imagenette160

Експорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
classifyclassify to ONNX: підтримуєтьсяclassify to TorchScript: підтримуєтьсяclassify to ExecuTorch: підтримуєтьсяclassify to TensorRT: підтримуєтьсяclassify to OpenVINO: підтримуєтьсяclassify to Paddle: не підтримуєтьсяclassify to MNN: не підтримуєтьсяclassify to RKNN: не підтримуєтьсяclassify to ncnn: не підтримуєтьсяclassify to TFLite: не підтримуєтьсяclassify to CoreML: не підтримуєтьсяclassify to Core AI: підтримується
embedembed to ONNX: підтримуєтьсяembed to TorchScript: підтримуєтьсяembed to ExecuTorch: підтримуєтьсяembed to TensorRT: підтримуєтьсяembed to OpenVINO: підтримуєтьсяembed to Paddle: не підтримуєтьсяembed to MNN: не підтримуєтьсяembed to RKNN: не підтримуєтьсяembed to ncnn: не підтримуєтьсяembed to TFLite: не підтримуєтьсяembed to CoreML: не підтримуєтьсяembed to Core AI: не підтримується

Експорт вбудовує поточний стан моделі у фіксований граф. Для task="classify" мітки, востаннє задані set_classes(), і роздільна здатність під час експорту вбудовуються у завершальний лінійний шар. Тому експортований граф ONNX або TensorRT є звичайним класифікатором зображень [B, K] без текстової вежі й токенізатора; після зміни класів або розміру експортуйте повторно. Експорт task="embed" трасує лише вежу зображення. Для обох потрібен opset ONNX 14 або новіший, який експортер задає типово.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreCLIPb32-cls.pt")model.set_classes(["a forklift", "an empty aisle", "a spill"])model.export(format="onnx") # Поточні мітки set_classes() і вхідна роздільна здатність вбудовуються# у граф. Після зміни будь-якого з них експортуйте повторно.
CLI
# Тут немає виклику set_classes(), тому вбудовуються типові 1,000# класів ImageNet, з якими завантажується модель.libreyolo export model=LibreCLIPb32-cls.pt format=onnx
Експорт ембедингів
from libreyolo import LibreYOLO # task="embed" трасує лише вежу зображення; класи не потрібні.model = LibreYOLO("LibreCLIPb32-cls.pt", task="embed")model.export(format="onnx")

Контрольні точки

Усі опубліковані файли ваг цього сімейства. Обидві перетворено з контрольних точок OpenCLIP, навчених на LAION-2B (ViT-B-32 і ViT-B-16), а не з будь-якого запуску навчання COCO.

ФайлВхід (пікс.)Ліцензія ваг
classify
LibreCLIPb32-cls.ptmit
LibreCLIPb16-cls.ptmit

Кожен наведений вище файл уже доступний у організації LibreYOLO і завантажується під час першого використання.

Навчальні дані LAION-2B мають задокументовану історію вмісту CSAM (Stanford Internet Observatory, грудень 2023 року). Відтоді LAION випустила Re-LAION, очищене повторне видання. Якщо далі розміщуєте ці ваги, за можливості віддавайте перевагу контрольним точкам на основі Re-LAION.

Ліцензування

Перевіряйте ліцензію в репозиторії Hugging Face конкретних ваг, які завантажуєте. Кожна контрольна точка в організації LibreYOLO має ліцензію, і вона не завжди однакова для всього сімейства. Цей репозиторій є авторитетним джерелом, а наведене нижче резюме описує умови на момент останньої перевірки сторінки.

Це опис відповідних ліцензій, а не юридична консультація. Якщо відповідь має комерційне значення, самостійно прочитайте ліцензії та зверніться по юридичну консультацію.

Оригінальна робота
CLIP / OpenCLIP, OpenAI; LAION / ML Foundations
Ліцензія першоджерела
MIT
Джерело першоджерела
github.com/mlfoundations/open_clip
Код LibreYOLO
MIT
Ваги
MIT, повторно опубліковано на huggingface.co/LibreYOLO
Тлумачення
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.

Цитування

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

Скопійовано з блоку цитування авторів на сторінці github.com/mlfoundations/open_clip#citing.

Перевірено з LibreYOLO v1.5.0. Таблиці підтримки, контрольні точки й результати бенчмарків на цій сторінці згенеровано з випущеної бібліотеки та опублікованих ваг, а не написано вручну.