Посмотреть как Markdown

API открытого словаря

LibreOpenVocab — фабрика детекторов, обусловленных текстом. Список классов здесь — это промпт, а не фиксированная голова, поэтому словарь задаётся через set_classes, а модель возвращает по нему обычные Results детекции.

Установка

Этому уровню нужен extra openvocab.

bash
pip install 'libreyolo[openvocab]'

Фабрика

python
LibreOpenVocab(model: str = "grounding-dino-tiny", **kwargs) -> LibreOpenVocabDetector

model — это алиас, а не путь. Перед поиском подчёркивания сворачиваются в дефисы, поэтому имена с указанием семейства вроде omdet_turbo-t и grounding_dino-t, которые печатает инвентарь CLI, загружаются как есть. Неизвестный алиас вызывает ValueError со списком всех известных алиасов.

Конструктор принимает size, nb_classes=80, names=None, device="auto", task=None и text_threshold=None. Передать names — то же самое, что вызвать set_classes сразу после загрузки. Передача text_threshold семейству, которое его не поддерживает, вызывает TypeError.

Python
from libreyolo import LibreOpenVocab, SAMPLE_IMAGE model = LibreOpenVocab("grounding-dino-tiny")model.set_classes(["person", "skateboard", "handrail"]) result = model.predict(SAMPLE_IMAGE)for box, cls in zip(result.boxes.xyxy, result.boxes.cls):    print(result.names[int(cls)], box.tolist())

Семейства и алиасы

СемействоАлиасыРазмерыВеса
Grounding DINOgrounding-dino, groundingdino, grounding-dino-tiny, groundingdino-tiny, grounding-dino-t, groundingdino-t, grounding-dino-base, groundingdino-base, grounding-dino-b, groundingdino-bt, bLibreYOLO/LibreGroundingDINOt, LibreYOLO/LibreGroundingDINOb
OWLv2owlv2, owl-v2, owlv2-base, owl-v2-base, owlv2-b16, owl-v2-b16, owlv2-large, owl-v2-large, owlv2-l14, owl-v2-l14b16, l14LibreYOLO/LibreOWLv2b16, LibreYOLO/LibreOWLv2l14
OMDet-Turboomdet-turbo, omdet, omdetturbo, omdet-turbo-tiny, omdet-turbo-swin-tiny, omdet-turbo-ttLibreYOLO/LibreOMDetTurbot
OV-DEIMov-deim, ovdeim, ov-deim-s, ovdeim-s, ov-deim-m, ovdeim-m, ov-deim-l, ovdeim-ls, m, lLibreYOLO/LibreOVDEIMs, LibreYOLO/LibreOVDEIMm, LibreYOLO/LibreOVDEIMl

Алиас по умолчанию — grounding-dino-tiny.

LibreGroundingDINO, LibreOWLv2 и LibreOMDetTurbo экспортируются на уровне пакета, и их можно создать напрямую с size=. OV-DEIM доступен через алиасы фабрики выше.

set_classes

python
model.set_classes(classes: list[str]) -> LibreOpenVocabDetector

Задаёт словарь для всех последующих вызовов predict() и возвращает модель, чтобы вызовы можно было соединять в цепочку. Список должен быть непустым, содержать только строки, а его элементы должны быть уникальными при сравнении без учёта регистра; пустые метки отклоняются. Передача голой строки вызывает TypeError, потому что она развернулась бы в набор односимвольных классов.

После вызова model.names сопоставляет 0..N-1 с метками в заданном порядке, а model.nb_classes равно N.

Аргументы вызова

Этот уровень переиспользует стандартный набор аргументов predict с тремя отличиями.

conf по умолчанию берёт собственное значение семейства, а не общее 0.25:

Семействоconf по умолчаниюПодавление
Grounding DINO0.25
OWLv20.1
OMDet-Turbo0.3Собственная постобработка, порог 0.5, учитывает iou=
OV-DEIM0.25Взаимно-однозначное сопоставление с отбором top-K, без подавления

iou= имеет смысл только для семейства, которое выполняет подавление. OMDet-Turbo принимает порог как аргумент и, если iou= не задан, берёт 0.5 по умолчанию. Остальные три семейства ничего не подавляют, поэтому переданный им iou= выдаёт предупреждение и игнорируется.

text_threshold= есть только у Grounding DINO, где по умолчанию равен 0.25. Его можно передать в конструктор, чтобы значение сохранялось, или задавать при каждом вызове. Значение, переданное при вызове, нельзя сочетать с stream=True, потому что результаты потока генерируются лениво; в этом случае задайте его в конструкторе. Для всех остальных семейств он вызывает TypeError.

imgsz= вызывает ValueError: изменением размера на этом уровне занимается пайплайн предобработки. augment=True тоже вызывает ошибку, потому что аугментация на этапе теста сюда не входит. Размеры входа для каждого семейства приводятся только для справки: Grounding DINO 800, OWLv2 960 и 1008, OMDet-Turbo 640, OV-DEIM 640.

Что не поддерживается

train(), val(), track() и export() вызывают NotImplementedError. Дообучайте модель в апстриме и загружайте полученные веса; вместо трекинга запускайте predict() для каждого кадра. Для валидации нужен отдельный валидатор, потому что общий валидатор детекции вызывает модель с тензорами изображений, а этому уровню нужны входы, обусловленные текстом.

Алиасы прочитаны из libreyolo/models/openvocab/__init__.py; репозитории, размеры и пороги — из grounding_dino.py, owlv2.py, omdet_turbo.py и ov_deim.py; правила вызова — из libreyolo/models/openvocab/base.py, всё на версии 1.5.0. Замысел архитектуры — из docs/adr/0008-open-vocab-detector-contract.md.