Dome-DETR
Спеціалізована модель для крихітних об'єктів на основі D-FINE: голова щільності визначає розташування об'єктів, увага кодера обмежується вікнами, що їх містять, а кількість запитів визначається за цією щільністю, а не фіксується. LibreYOLO підтримує її для виявлення.
- Задачі
- detection
- Розміри
- s, m, l at 800 px
- Встановлення
pip install libreyolo- Рівень підтримки
- Підтримуваний, починаючи з v1.5.0. Додаткові придатні до навчання моделі: тести CI підтримують справними, а функції додають за нагоди.
- Першоджерело
- Dome-DETR, автори: The Dome-DETR Authors, ліцензія unclear, not redistributed. Стаття, джерело
- Ліцензії
- Код: Apache-2.0, ваги: unclear, not redistributed. Комерційне використання
Встановлення
Dome-DETR не потребує додаткових пакетів. Усі його імпорти входять до базового встановлення.
pip install libreyoloПередбачення
Автоматично завантажувати нічого. LibreYOLO не розміщує ці ваги, тому процес такий: отримайте контрольну точку з першоджерела, один раз перетворіть її, а потім завантажте перетворений файл за шляхом. Причину пояснено в розділі Ліцензування.
# LibreYOLO не розміщує ваги Dome-DETR, тому контрольна точка# завантажується з репозиторію першоджерела й перетворюється один раз.hf download RicePasteM/Dome-DETR --include 'best_ckpts_dome_2026/*' \ --local-dir dome-ckpts python weights/convert_domedetr_weights.py \ dome-ckpts/best_ckpts_dome_2026/dome-s-visdrone_converted.pth \ LibreDOMEDETRs-visdrone.pt --size s --variant visdronefrom libreyolo import LibreYOLO # Локальний шлях, а не сама назва: для цього сімейства нічого не завантажується.model = LibreYOLO("LibreDOMEDETRs-visdrone.pt")result = model("drone-frame.jpg", save=True) for box in result.boxes: print(result.names[int(box.cls)], box.conf, box.xyxy)libreyolo predict model=LibreDOMEDETRs-visdrone.pt source=drone-frame.jpg save=Truefrom libreyolo import LibreYOLO # Контрольної точки COCO немає, тому класи походять із датасету, на якому# навчено ваги, і читаються з метаданих контрольної точки.aitod = LibreYOLO("LibreDOMEDETRs-aitod.pt")print(aitod.model.names) # 9 класів AI-TOD-V2 visdrone = LibreYOLO("LibreDOMEDETRs-visdrone.pt")print(visdrone.model.names) # 12 класів VisDroneПовертається той самий об'єкт Results, що й для кожного сімейства, тому для
заміни детектора достатньо змінити один рядок. Параметри conf і max_det
фільтрують вибір запитів; iou приймається для сумісності API, але не впливає
на результат, оскільки декодер є множинним предиктором без етапу NMS. Джерела,
потокове оброблення та роботу з результатами описано на сторінці
передбачення.
Для цього сімейства вимкнено дві можливості. Захоплення графа CUDA вимкнено, оскільки кількість запитів PAQI залежить від даних, а отже, форма прямого проходу змінюється від зображення до зображення, чого захоплення графа саме й не може підтримати. Аугментація під час тестування працює з одним фіксованим квадратним розміром, тому запит багатомасштабної TTA нічого не змінює.
Варіанти
Доступні три розміри, s, m та l, усі для 800 на 800. Розмір вибирає бекбон, а датасет походження ваг визначає глибину декодера й бюджет запитів, тому самого коду розміру недостатньо для ідентифікації графа. Ваги AI-TOD-V2 вибирають від 300 до 1500 запитів на зображення, ваги VisDrone від 250 до 500, а велика модель виконує чотири шари декодера на AI-TOD-V2 і шість на VisDrone.
Dome-DETR є моделлю D-FINE із трьома доповненнями. DeFE передбачає карту щільності. MWAS використовує цю карту, щоб обмежити увагу кодера вікнами, які справді містять об'єкти, замість уваги до всього. PAQI визначає розмір набору запитів за тією самою щільністю замість декодування фіксованих 300. Перевага зосереджується на найменших об'єктах і звужується зі збільшенням їхнього розміру: у власній абляції першоджерела AP для дуже крихітних об'єктів зростає з 14.0 до 17.8, тоді як AP для середніх об'єктів лише з 45.4 до 46.4. Розглядайте її як доповнення до D-FINE для аерофотознімків, зображень із дронів і даних дистанційного зондування, а не як заміну.
LibreYOLO не публікує рядків бенчмарків для цього сімейства, оскільки не публікує контрольних точок для бенчмарків.
Навчання
Dome-DETR можна навчати. Навчання виконує повну цільову функцію першоджерела: функції втрат D-FINE разом із наглядом за щільністю та кількістю DeFE, причому доповнені запити вилучаються з членів класифікації за допомогою маски, а окремі для кожного зображення маски уваги знешумлення не дають доповненню одного зображення впливати на інше.
from libreyolo import LibreYOLO model = LibreYOLO("LibreDOMEDETRs-visdrone.pt")model.train(data="my-dataset.yaml", epochs=160, imgsz=800, batch=4, lr0=2e-4)libreyolo train model=LibreDOMEDETRs-visdrone.pt data=my-dataset.yaml \ epochs=160 imgsz=800 batch=4 lr0=2e-4libreyolo train model=LibreDOMEDETRs-visdrone.pt data=my-dataset.yaml \ epochs=160 device=0,1 batch=4Конфігурація успадковує рецепт D-FINE і змінює те, що потрібно MWAS. imgsz
дорівнює 800, lr0 дорівнює 2e-4, група параметрів бекбона масштабується через
backbone_lr_mult=0.1, а multi_scale примусово вимкнено, оскільки вікна MWAS
потребують, щоб розмір вхідних даних залишався кратним кроку 8. Типове значення
batch дорівнює 4 замість 16 у D-FINE: PAQI доповнює кожен батч до його
найширшого елемента, тому споживання пам'яті визначається найбільш насиченим
зображенням батча, а не середнім.
Є одне важливе застереження щодо правильності. Першоджерело навчає протягом 160
епох із MultiStepLR(milestones=[80, 120], gamma=0.8), а ці типові налаштування
виконують плаский косинусний розклад D-FINE протягом тих самих 160 епох. Цей
розклад тут не відтворено, як і значення AP зі статті, тому сприймайте їх як
результати авторів першоджерела, а не обіцянку, що цей рецепт їх досягне. Якщо
метою є відтворення статті, задайте розклад із першоджерела.
Датасети, аугментацію, кілька GPU та системи журналювання описано на сторінці навчання.
Валідація
Метод val() повертає словник із ключами за назвами метрик і виводить результати
для кожного класу, якщо verbose залишається ввімкненим.
from libreyolo import LibreYOLO model = LibreYOLO("LibreDOMEDETRs-visdrone.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreDOMEDETRs-visdrone.pt data=my-dataset.yamlВалідація виконується на вашому датасеті у форматі, який використовувався для навчання. Шлюз валідації COCO у бібліотеці тут не застосовується, оскільки для цього сімейства немає контрольної точки COCO, з якою можна виконати вимірювання.
Експорт
Експорт не підтримується в жодному форматі, а його запит спричиняє помилку замість створення файлу.
Причина полягає в PAQI. Він визначає кількість запитів для кожного зображення за відфільтрованими за щільністю пропозиціями та жадібним циклом адаптивного до щільності пригнічення, тому довжина виходу декодера визначається вхідними даними, а не графом. Трасування фіксує кількість, яку випадково створило зображення для трасування, внаслідок чого артефакт непомітно повертає неправильні результати для кожного іншого зображення. Статичне формулювання мало б розгорнути це пригнічення для всіх 250-1500 кандидатів, а зведення до фіксованого top-k усунуло б саме ту повноту крихітних об'єктів, заради якої існує сімейство. Якщо потрібен придатний до експорту трансформер виявлення, використовуйте D-FINE.
Контрольні точки
Перелічувати нічого. LibreYOLO не публікує ваг Dome-DETR, а жодна назва у формі
LibreDOMEDETR<size>-<dataset>.pt не відповідає завантаженню.
Першоджерело публікує шість контрольних точок, s, m і l для кожного з двох
датасетів: AI-TOD-V2 з 9 класами та VisDrone з 12. Контрольної точки COCO немає,
тому канонічна назва файлу завжди містить суфікс датасету, а назви класів
зберігаються в метаданих контрольної точки, а не походять зі сталої сімейства.
Запит самої назви LibreDOMEDETRs.pt одразу спричиняє помилку з повідомленням
про дві справжні назви файлів і команду перетворення замість спроби завантаження,
яка повернула б 404.
Перетворення виконує weights/convert_domedetr_weights.py. Він відтворює граф
LibreYOLO, завантажує в нього тензори першоджерела й відмовляється щось записувати,
якщо хоча б один ключ відсутній, неочікуваний або має неправильну форму. Отже,
перетворений файл або точно збігається, або не існує. Передайте йому файл .pth
із першоджерела, розмір і варіант:
python weights/convert_domedetr_weights.py \
dome-ckpts/best_ckpts_dome_2026/aitod-s-best.pth \
LibreDOMEDETRs-aitod.pt --size s --variant aitodЩодо числової еквівалентності, weights/parity_domedetr.py порівнює цей порт із
реалізацією першоджерела для всіх шести контрольних точок і повідомляє
max_abs_diff == 0.0 і для pred_logits, і для pred_boxes, попередньо
перевіривши маску вікна MWAS біт у біт, а також окремо порівнює кожен член функції
втрат із критерієм першоджерела. Важливо точно розуміти цю перевірку: це ручний
скрипт, якому потрібні локальна копія першоджерела й опубліковані контрольні точки
на диску та який запускається вручну. Він не входить до безперервної інтеграції,
і жодне завдання CI його не відтворює.
Ліцензування
Перевіряйте ліцензію в репозиторії Hugging Face конкретних ваг, які завантажуєте. Кожна контрольна точка в організації LibreYOLO має ліцензію, і вона не завжди однакова для всього сімейства. Цей репозиторій є авторитетним джерелом, а наведене нижче резюме описує умови на момент останньої перевірки сторінки.
Це опис відповідних ліцензій, а не юридична консультація. Якщо відповідь має комерційне значення, самостійно прочитайте ліцензії та зверніться по юридичну консультацію.
- Оригінальна робота
- Dome-DETR, The Dome-DETR Authors
- Ліцензія першоджерела
- unclear, not redistributed
- Джерело першоджерела
- github.com/RicePasteM/Dome-DETR
- Код LibreYOLO
- MIT
- Ваги
- unclear, not redistributed, поширюється авторами. LibreYOLO не розміщує й не дублює ці ваги.
- Тлумачення
- The code and the weights part company here. The upstream repository is Apache-2.0, permissive and safe for commercial and closed-source use, and LibreYOLO's own port is MIT, so nothing restricts the architecture or the training code. The weights are the unresolved part: the upstream model card carries no license field in its metadata, and its prose states that the project is Apache-2.0 while also restricting the material to academic research purposes only. Those two readings do not agree, and the stricter one is not a grant to redistribute, so LibreYOLO mirrors nothing for this family and hosts no checkpoint. Download the six upstream checkpoints yourself and convert them with weights/convert_domedetr_weights.py, and read the upstream terms before using them for anything commercial. Weights you train yourself on your own data derive from no upstream checkpoint and are yours.
Саме через ваги це сімейство не дзеркалюється. Картка моделі першоджерела не містить поля ліцензії у метаданих, а в її тексті одночасно зазначено ліцензію Apache-2.0 для проєкту та обмеження матеріалів лише академічними дослідженнями. Ці два тлумачення не узгоджуються, а суворіше з них не надає дозволу на повторне розповсюдження, тому до отримання роз'яснень LibreYOLO посилається на репозиторій першоджерела замість копіювання файлів. Те саме обґрунтування застосовується тут до YOLO-NAS.
Код є окремим і зрозумілішим питанням. Репозиторій першоджерела має ліцензію Apache-2.0, порт LibreYOLO має ліцензію MIT, а ваги, які ви навчили самостійно на власних даних, належать вам.
Цитування
Dome-DETR опубліковано на ACM Multimedia 2025 під назвою «Dome-DETR: DETR with Density-Oriented Feature-Query Manipulation for Efficient Tiny Object Detection». Препринт доступний на arxiv.org/abs/2505.05741. Автори не публікують блок BibTeX у своєму репозиторії, тому тут його не відтворено й не складено вручну.