Переглянути як Markdown

Виявлення з відкритим словником

Виявлення з відкритим словником замінює фіксований список класів контрольної точки словами, які ви вибираєте під час виклику. У LibreYOLO це не окрема задача: це задача detect, яку обслуговує окремий рівень моделей, завантажений через фабрику LibreOpenVocab замість LibreYOLO.

Визначення

Виявлення з відкритим словником повертає звичайні Results виявлення: рамки, значення впевненості й індекси класів, а result.names зіставляє ці індекси з указаними рядками. Змінюється джерело списку класів. Звичайний детектор навчається на фіксованому наборі категорій і не може повернути категорію поза ним. Ці моделі приймають словник як текст під час інференсу, тому set_classes(["forklift", "safety cone"]) достатньо, щоб зробити їх класами.

LibreYOLO не має ключа задачі open-vocabulary. Ці моделі оголошують SUPPORTED_TASKS = ("detect",), як будь-який інший детектор. Відрізняє їх шлях завантаження: це знімки Hugging Face, а не контрольні точки словника стану LibreYOLO, тому вони не входять до фабрики LibreYOLO() і створюються через LibreOpenVocab(). Ця фабрика є аналогом LibreSAM() і LibreVLM(), а не заміною LibreYOLO().

Оцінки є справжніми оцінками виявлення, а не згенерованим описом, розібраним постфактум. Кожне сімейство оцінює області зображення відносно текстового ембедингу кожної підказки.

Моделі

Цей рівень містить чотири сімейства, і всі вони підтримують лише передбачення. Завантажуйте будь-яке з них за псевдонімом через LibreOpenVocab.

Grounding DINO від IDEA Research має розміри t і b. Це стандартне сімейство рівня та єдине, що приймає text_threshold, другий поріг для оцінки токенів декодованої фрази.

OWLv2 від Google Research має розміри b16 і l14. Вона оцінює області зображення відносно текстових ембедингів CLIP-подібного енкодера.

OMDet-Turbo від Om AI Lab має один розмір t. Вона відокремлює ембединги класів від текстової підказки задачі та є єдиним сімейством тут, яке пригнічує перекривні рамки у власній постобробці, тому iou= ураховується.

OV-DEIM має розміри s, m і l. Це детектор у стилі DETR, який зіставляє запити декодера з текстовими ембедингами вбудованої текстової башти MobileCLIP. Він використовує взаємно однозначне зіставлення з вибором top-K, тому NMS ніде не виконується.

Ваги OV-DEIM є обмеженим випадком цього рівня. Ваги детектора мають некомерційну ліцензію CC BY-NC 4.0. Вбудована текстова башта має ліцензію Apple Machine Learning Research Model лише для досліджень. Контрольна точка l додає донавчений бекбон DINOv3-S за ліцензією Meta DINOv3. Тексти всіх трьох ліцензій постачаються в репозиторії ваг, а бібліотека реєструє такий самий підсумок перед побудовою моделі, коли визначає ваги. Перед розгортанням прочитайте OV-DEIM.

Для цього рівня потрібна одна додаткова залежність:

bash
pip install "libreyolo[openvocab]"

Вона охоплює transformers і timm для трьох обгорнутих сімейств, а також пакети huggingface_hub, safetensors, regex і ftfy, потрібні нативному перенесенню OV-DEIM.

Текстовий словник приймає й інший рівень: LibreVLM() завантажує генеративні моделі зору й мови, як-от Qwen3-VL і Florence-2, та перетворює їхній вивід на ті самі Results. Він має той самий інтерфейс set_classes(). Відмінність полягає в тому, що створює рамки: сімейства на цій сторінці є дискримінативними детекторами, які безпосередньо видають оцінки, тоді як рівень VLM генерує їх.

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

Python
from libreyolo import LibreOpenVocab, SAMPLE_IMAGE model = LibreOpenVocab("grounding-dino-t")model.set_classes(["person", "dog", "skateboard"]) result = model.predict(SAMPLE_IMAGE, conf=0.25)print(result.names)for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
Заміна словника
from libreyolo import LibreOpenVocab, SAMPLE_IMAGE model = LibreOpenVocab("owlv2-b16") # set_classes зберігає стан до наступного виклику.# Мітки мають бути унікальними після переведення в нижній регістр і вилучення артиклів.model.set_classes(["a red backpack", "traffic cone"])result = model.predict(SAMPLE_IMAGE) model.set_classes(["bicycle wheel"])result = model.predict(SAMPLE_IMAGE)
Текстовий поріг Grounding DINO
from libreyolo import LibreOpenVocab, SAMPLE_IMAGE model = LibreOpenVocab("grounding-dino-b")model.set_classes(["remote control", "school bus"]) # conf фільтрує за оцінкою рамки, а text_threshold за оцінкою токенів# декодованої фрази. Якщо їх не задано, стандартне значення обох становить 0.25.# Лише Grounding DINO приймає text_threshold; інші спричиняють помилку.result = model.predict(SAMPLE_IMAGE, conf=0.25, text_threshold=0.3)

set_classes() приймає непорожній список рядків міток і зберігає його до наступного виклику. Мітки мають бути унікальними після переведення в нижній регістр і вилучення початкових артиклів, тому "a bus" і "bus" не можуть одночасно бути в одному словнику. Багатослівні фрази є такими самими мітками, а кожне сімейство перетворює список на власний текстовий вхід до токенізації, тому "traffic cone", це інший запит, ніж "cone".

Три аргументи передбачення поводяться тут інакше, ніж у нативному детекторі. imgsz= відхиляється, оскільки зміною розміру для цих сімейств керує процесор. augment=True відхиляється, оскільки аугментація під час тестування не підтримується на цьому рівні. iou= застосовується лише до сімейства, процесор якого виконує власне пригнічення; якщо нічого не пригнічується, аргумент показує попередження й ігнорується.

Якщо conf не задано, використовується власне стандартне значення завантаженого сімейства, а не звичне для predict() значення 0.25. Воно відрізняється між сімействами рівня. Задавайте його явно під час порівняння двох сімейств на одному зображенні.

track() спричиняє помилку в усьому рівні. Натомість запускайте predict() для кожного кадру. Джерела, потокову обробку й роботу з результатами описано в розділі передбачення.

Навчання

Жодне сімейство цього рівня не навчається в LibreYOLO. train() спричиняє помилку: виконайте донавчання в upstream і завантажте отримані ваги. Словник, переданий до set_classes(), є єдиним налаштуванням, яке змінює об'єкти, що виявляє завантажена модель.

Валідація

Для цього рівня немає валідатора, і val() спричиняє помилку. Для валідації з відкритим словником потрібен окремий валідатор, оскільки стандартний валідатор виявлення передає тензори зображень прямо моделі, тоді як цим сімействам потрібні одночасно створені входи з текстовими умовами.

Експорт

Експорт не підтримується на цьому рівні, і export() спричиняє помилку. Ці моделі працюють через predict() у PyTorch.

Перевірено з LibreYOLO v1.5.0.