Автор: Герман Петров
Редактура: Дмитрий Раков
Пререквизиты
Что можно прочитать, чтобы лучше понять эту статью:
- Архитектура RT-DETR — продолжение идей DETR. Поэтому рекомендуем ознакомиться с нашим постом о нем.
- Часто в посте будут упоминаться модели из семейства YOLO. Вот они (
мои любимые слева направо): YOLOv1, YOLOv2, YOLOv3, YOLOv4, YOLOv5. Для понимания этой статьи достаточно ознакомиться только с последней версией.
Давайте разберём словосочетания на английском, которые тоже нам встретятся (автору так самому будет проще 🙂):
- Confidence threshold — порог вероятности для детекции;
- IoU threshold — порог IoU для NMS;
- Receptive field — рецептивное поле выходного пикселя, то есть контекст, который захватила свёртка.
Введение
В своё время авторы DETR полностью пересмотрели подход к построению архитектуры детектора:
- упростили пайплайн детекции, удалив вспомогательные техники — NMS или анкоры;
- применили Encoder-Decoder трансформер поверх CNN-фичей для учёта глобального контекста и формирования на его основе финального предсказания боксов.
К сожалению, у DETR'а есть недостатки (подробнее о них ниже), которые не позволяют использовать его на практике.
С другой стороны, модели семейства YOLO — наиболее популярные real-time детекторы. Они имеют хороший trade-off между скоростью и качеством. К их недостаткам можно отнести NMS, который требует дополнительных затрат на post-processing и вводит гиперпараметр threshold.
Авторы статьи оценили идею оригинального DETR'а, рассмотрели фишки YOLO-моделей и решили создать модель, которая не уступила бы по качеству и скорости моделям семейства YOLO (X-/ L-версиям) — то есть необходимо было сделать GPU real-time.
Недостатки DETR и их решения
- Сходимость обучения. На практике очень тяжело обучать большие трансформерные архитектуры: нужно много данных, критически важен learning rate и scheduling, чтобы лосс не улетел в NaN и так далее.
- Решение: использовать multi-scale фичи (Deformable-DETR).
- Инициализация decoder queries. В оригинальном DETR'е decoder queries (обучаемые якоря) инициализировались нулевыми векторами, что существенно увеличивало время обучения — они должны были научиться улавливать визуальную информацию об объектах без предварительных знаний.
- Решение: инициализировать их в виде сетки на картах признаков и отбирать top k наиболее вероятных. Подробнее об этом расскажем в блоке о Query Selection.
- Одно разрешение. DETR использует только один scale из бэкбона, который может иметь слишком маленькое разрешение для точной детекции небольших объектов. Введение в архитектуру multi-scale фич решает эту проблему. Да и attention будет спокойно работать с более длинной последовательностью. Но операции self-attention в энкодере и cross-attention в декодере очень чувствительны к размерности фичей, потому что attention имеет квадратичную зависимость от них 😞. Что делать?
- Решение: надо полностью переработать DETR vanilla энкодер 😎, чтобы эффективно посчитать attention внутри каждой фичи и затем агрегировать полученные результаты.