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, Apache-2.0 code; academic-research-only weights. Статья, исходный код
- Лицензии
- Код: Apache-2.0, веса: Apache-2.0 code; academic-research-only weights. Коммерческое использование
Установка
Dome-DETR не нужен дополнительный extra. Всё, что он импортирует, входит в базовую установку.
pip install libreyoloПредсказание
Шесть конвертированных чекпойнтов скачиваются автоматически с зеркал LibreYOLO. Условия исходного проекта разрешают использование только в академических исследованиях.
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Предобученные веса разрешены только для академических исследований.model = LibreYOLO("LibreDOMEDETRs-visdrone.pt", device="cpu")print(model(SAMPLE_IMAGE).boxes)Возвращаемый объект Results — тот же, что возвращает любое семейство, поэтому
замена одного детектора на другой сводится к одной строке. conf и max_det
фильтруют отбор запросов; iou принимается ради совместимости API, но ни на
что не влияет, потому что декодер предсказывает набор целиком и шага NMS в нём
нет. Про источники, стриминг и обработку результатов см.
предсказание.
Две возможности для этого семейства выключены. Захват CUDA-графов отключён, потому что число запросов в PAQI зависит от данных и прямой проход поэтому меняет форму от изображения к изображению — а это ровно то, что захват графа переварить не может. Аугментация во время инференса (TTA) работает на одном фиксированном квадратном размере, поэтому запрос многомасштабного 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. Выигрыш сосредоточен там, где объекты самые мелкие, и сходит на нет по мере их роста: в собственном ablation-исследовании авторов AP на очень мелких объектах поднимается с 14.0 до 17.8, тогда как AP на средних объектах — лишь с 45.4 до 46.4. Стоит воспринимать его как дополнение к D-FINE для аэроснимков, съёмки с дронов и дистанционного зондирования, а не как замену.
Для этого семейства нет записей бенчмарков Vision Analysis.
Обучение
Dome-DETR обучается. Обучение идёт по полной целевой функции оригинала: функции потерь D-FINE плюс супервизия плотности и количества из DeFE, с маскированием дополняющих запросов в классификационных слагаемых и с масками внимания для denoising, отдельными на каждое изображение, чтобы дополнение одного изображения не протекало в другое.
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), тогда как эти значения по
умолчанию гоняют расписание flat-cosine из D-FINE те же 160 эпох. Это
расписание здесь не воспроизводили, и числа AP из статьи тоже не
воспроизводили, так что читайте их как результаты авторов оригинальной работы,
а не как обещание, что этот рецепт до них дотянет. Если цель — совпасть со
статьёй, задайте оригинальное расписание.
Про датасеты, аугментацию, multi-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.
Чекпойнты
| Файл | Лицензия весов |
|---|---|
| Detection | |
| LibreDOMEDETRs-aitod.pt | other |
| LibreDOMEDETRm-aitod.pt | other |
| LibreDOMEDETRl-aitod.pt | other |
| LibreDOMEDETRs-visdrone.pt | other |
| LibreDOMEDETRm-visdrone.pt | other |
| LibreDOMEDETRl-visdrone.pt | other |
Все перечисленные выше файлы уже доступны в организации LibreYOLO и скачиваются при первом использовании.
Лицензирование
Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.
Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.
- Оригинальная работа
- Dome-DETR, The Dome-DETR Authors
- Лицензия исходного проекта
- Apache-2.0 code; academic-research-only weights
- Исходный код проекта
- github.com/RicePasteM/Dome-DETR
- Код LibreYOLO
- MIT
- Веса
- Apache-2.0 code; academic-research-only weights, повторно опубликованы на huggingface.co/LibreYOLO
- Толкование
- The upstream source is Apache-2.0. Six mirrored checkpoints retain the publisher academic-research-only restriction.
Шесть зеркал сохраняют ограничение исходного проекта на использование только в академических исследованиях. Код лицензируется отдельно. Исходный репозиторий использует Apache-2.0, порт LibreYOLO использует MIT, а веса, которые вы обучаете на собственных данных, принадлежат вам.