DEIM

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

Задачі
detection
Розміри
deim: n, s, m, l, x at 640 px
Встановлення
pip install libreyolo
Рівень підтримки
Основний, починаючи з v1.2.0. Основні придатні до навчання детектори: функції з'являються після флагманських моделей у тій самій хвилі випуску.
Першоджерело
DEIM and DEIMv2, автори: Intellindust AI Lab, ліцензія Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License. Стаття, джерело
Ліцензії
Код: Apache-2.0, ваги: Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License. Комерційне використання

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

Жодна версія не потребує додаткових пакетів. Усі їхні імпорти входять до базового встановлення.

bash
pip install libreyolo

Винятком є донавчання адаптерів із lora=True, для якого потрібен додатковий пакет lora.

bash
pip install "libreyolo[lora]"

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

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

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreDEIMn.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreDEIMn.pt save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
Відео
from libreyolo import LibreYOLO # Версія є частиною назви файлу, а фабрика виконує маршрутизацію за# контрольною точкою, тому обидві завантажуються однаково.model = LibreYOLO("LibreDEIMv2pico.pt") # Будь-яке джерело, яке приймає бібліотека: файл, каталог, URL-адреса,# індекс вебкамери, потік RTSP або список .streamsfor result in model.predict("clip.mp4", stream=True, save=True):    print(len(result.boxes))

Повертається той самий об'єкт Results, що й для кожного сімейства, тому для заміни детектора достатньо змінити один рядок. Параметри conf і max_det фільтрують декодування top-k за запитами та класами; етапу NMS для налаштування немає, а iou приймається, але не використовується. Джерела, потокове оброблення та роботу з результатами описано на сторінці передбачення.

Варіанти

Версія 1 має п'ять розмірів з однаковим розміром вхідних даних. Версія 2 зберігає ці п'ять назв і додає три менші, atto, femto та pico, причому перші дві нативно працюють із меншим розміром вхідних даних, ніж решта. Отже, п'ять кодів розміру існують в обох версіях і позначають різні моделі; версію записано в назві файлу контрольної точки.

Контрольна точкаВхід (пікс.)mAP 50-95Параметри (млн)
LibreDEIMl64057.831.24
LibreDEIMm64055.419.59
LibreDEIMn64046.83.78
LibreDEIMs64052.110.32
LibreDEIMx64059.662.62
LibreDEIMv2atto32027.50.51
LibreDEIMv2femto41634.50.98
LibreDEIMv2l64058.632.55
LibreDEIMv2m64056.018.36
LibreDEIMv2n64046.73.6
LibreDEIMv2pico64042.21.54
LibreDEIMv2s64053.09.78
LibreDEIMv2x64061.351.21

COCO val2017, 500 images. Виміряно засобами бенчмарку LibreYOLO й опубліковано на сторінці Vision Analysis, де порівнюють затримку на різному обладнанні та в різних середовищах виконання, а також зберігають повні записи запусків.

Версія 1 зберігає архітектуру D-FINE та замінює її цільову функцію класифікації на функцію втрат з урахуванням можливості зіставлення зі щільного взаємно однозначного рецепта. Тому два сімейства мають майже всі однакові ключі словника стану й розрізняються за метаданими контрольної точки. Версія 2 зберігає цей контракт навчання та поєднує бекбони: HGNetv2 для розмірів нижче s і візуальний трансформер DINOv3 з адаптером просторового налаштування для s і вище. Саме цей бекбон додає другу ліцензію до чотирьох контрольних точок, тому перед розповсюдженням однієї з них прочитайте розділ ліцензування.

Навчання

Навчання починається з опублікованої контрольної точки. pretrained ніколи не потрапляє до тренера: версія 1 попереджає про невідомий ключ та ігнорує його, а версія 2 вилучає. Жодна з них не надає випадково ініціалізовану модель.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt") # coco128.yaml завантажує вибірку зі 128 зображень під час першого використання. Для справжнього# запуску вкажіть у `data` YAML-файл власного датасету.model.train(data="coco128.yaml", epochs=50, batch=8, lr0=1e-4)
CLI
libreyolo train model=LibreDEIMn.pt data=coco128.yaml \  epochs=50 batch=8 lr0=1e-4
DEIMv2
from libreyolo import LibreYOLO # Якщо не задавати epochs, batch, imgsz та lr0, їхні значення беруться з опублікованого# рецепта для завантаженого розміру.model = LibreYOLO("LibreDEIMv2pico.pt")model.train(data="coco128.yaml", epochs=50)
LoRA
# Потрібен додатковий пакет lora: pip install "libreyolo[lora]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")model.train(data="coco128.yaml", epochs=50, lora=True)
Кілька GPU
libreyolo train model=LibreDEIMn.pt data=coco128.yaml \  epochs=50 device=0,1

Для версії 1 передавайте lr0 самостійно. Сигнатура її методу train() у Python має типове значення 4e-4, взяте з опублікованого рецепта COCO, а навчальна конфігурація сімейства містить 1e-4 як типове значення донавчання. Саме це нижче значення вибирає CLI, коли аргумент відсутній. У конфігурації зафіксовано відповідне вимірювання: для розмірів батча, які реально використовуються під час донавчання на малих датасетах, швидкість COCO помітно погіршувала перенесення.

Версія 2 самостійно визначає ці типові значення. Якщо не задавати epochs, batch, imgsz та lr0, кожне з них читається з опублікованого рецепта для завантаженого розміру, тому малі розміри навчаються з власною роздільною здатністю вхідних даних без явної вказівки, а передане значення перевизначає рецепт. Обмеження стосується аргументу imgsz: він має бути додатним числом, кратним 32, інакше версія 2 спричиняє помилку до початку запуску.

Датасети, аугментацію, кілька GPU та системи журналювання описано на сторінці навчання.

Валідація

Метод val() повертає словник ключів metrics/ із точністю, повнотою, mAP 50 і mAP 50-95, виміряними для будь-якого датасету у форматі, на якому виконувалося навчання.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt") # val() повертає звичайний словник, а не об'єктmetrics = model.val(data="coco128.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])print(metrics["metrics/precision"], metrics["metrics/recall"])
CLI
libreyolo val model=LibreDEIMn.pt data=coco128.yaml
На COCO
# coco-val-only.yaml отримує 5000 зображень val2017 і пропускає# навчальну вибірку. Він містить вбудований скрипт завантаження, тому потребує# явного дозволу, якщо датасету ще немає локально.libreyolo val model=LibreDEIMn.pt data=coco-val-only.yaml \  allow_download_scripts=True

Рядки наведеної вище таблиці бенчмарків отримано за допомогою системи бенчмарків LibreYOLO; у примітці під таблицею зазначено датасет і наведено посилання на записи запусків.

Експорт

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

Матриця охоплює обидві версії на одній сторінці: якщо їхня підтримка формату відрізняється, у клітинці показано слабшу з двох, щоб можливості жодної завантаженої версії не були перебільшені.

Експортований артефакт повторно завантажується через LibreYOLO() за суфіксом файлу, тому файл .onnx або .engine поводиться як контрольна точка й повертає той самий Results.

Python
# Потрібен додатковий пакет onnx: pip install "libreyolo[onnx]"from libreyolo import LibreYOLO model = LibreYOLO("LibreDEIMn.pt")path = model.export(format="onnx")print(path)
CLI
libreyolo export model=LibreDEIMn.pt format=onnx
Використати експортований файл
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика виконує маршрутизацію за суфіксом файлу, тому експортований артефакт# завантажується як будь-яка контрольна точка й повертає той самий об'єкт Results.model = LibreYOLO("LibreDEIMn.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

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

Усі опубліковані файли ваг для цього сімейства.

ФайлВхід (пікс.)Ліцензія ваг
Detection
LibreDEIMn.pt640apache-2.0
LibreDEIMs.pt640apache-2.0
LibreDEIMm.pt640apache-2.0
LibreDEIMl.pt640apache-2.0
LibreDEIMx.pt640apache-2.0
LibreDEIMv2n.pt640apache-2.0
LibreDEIMv2s.pt640other
LibreDEIMv2m.pt640other
LibreDEIMv2l.pt640other
LibreDEIMv2x.pt640other
LibreDEIMv2atto.ptapache-2.0
LibreDEIMv2femto.ptapache-2.0
LibreDEIMv2pico.ptapache-2.0

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

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

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

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

Оригінальна робота
DEIM and DEIMv2, Intellindust AI Lab
Ліцензія першоджерела
Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License
Джерело першоджерела
github.com/Intellindust-AI-Lab/DEIM
Код LibreYOLO
MIT
Ваги
Apache-2.0; the DEIMv2 DINOv3 backbone adds Meta's DINOv3 License, повторно опубліковано на huggingface.co/LibreYOLO
Тлумачення
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours. DEIM is Apache-2.0 throughout, and so are the DEIMv2 sizes below S, which use an HGNetv2 backbone. The DEIMv2 S, M, L and X sizes take their backbone from DINOv3, so both their weights and the backbone source vendored in LibreYOLO are additionally governed by Meta's DINOv3 License Agreement, which is not an OSI license: redistribution has to carry the agreement with it, and it forbids use for military or warfare purposes, weapons development, espionage, nuclear industries and anything subject to ITAR. Their Hugging Face repositories declare both licenses, and DEIMv2 is also cited separately (arXiv 2509.20787).
Чотири розміри DEIMv2 від S і вище використовують бекбон DINOv3, тому їхні репозиторії ваг мають одночасно ліцензію Apache-2.0 та ліцензію DINOv3 компанії Meta, а LibreYOLO розповсюджує початковий код бекбона DINOv3 за тією самою угодою. Решта сімейства, зокрема всі розміри DEIMv2 нижче S, має лише Apache-2.0.

Цитування

@misc{huang2024deim,
      title={DEIM: DETR with Improved Matching for Fast Convergence},
      author={Shihua, Huang and Zhichao, Lu and Xiaodong, Cun and Yongjun, Yu and Xiao, Zhou and Xi, Shen},
      booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
      year={2025},
}

Скопійовано з блоку цитування авторів на сторінці github.com/Intellindust-AI-Lab/DEIM#5-citation.

DEIMv2 описано в окремій статті з власним блоком цитування на сторінці github.com/Intellindust-AI-Lab/DEIMv2; цитуйте його, якщо використовували контрольну точку версії 2.

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