Ultralytics YOLO27:

RT-DETR от Baidu: детектор объектов реального времени на основе Vision Transformer#

Обзор#

Real-Time Detection Transformer (RT-DETR), разработанный Baidu, — это современный сквозной детектор объектов, обеспечивающий работу в реальном времени при сохранении высокой точности. Он основан на идее DETR (фреймворка без NMS), но дополнительно использует свёрточный backbone и эффективный гибридный энкодер для достижения скорости реального времени. RT-DETR эффективно обрабатывает многомасштабные признаки, разделяя взаимодействие внутри масштаба и слияние между масштабами. Модель отличается высокой адаптивностью: скорость инференса можно гибко настраивать с помощью разных слоёв декодера без повторного обучения. RT-DETR особенно хорошо работает на ускоренных бэкендах, таких как CUDA с TensorRT, превосходя многие другие детекторы объектов реального времени.



Watch: How to Use Baidu's RT-DETR for Object Detection | Inference and Benchmarking with Ultralytics 🚀

Обзор архитектуры модели Baidu RT-DETR Обзор RT-DETR от Baidu. На диаграмме архитектуры модели RT-DETR показаны последние три этапа backbone — {S3, S4, S5}, которые служат входом для энкодера. Эффективный гибридный энкодер преобразует многомасштабные признаки в последовательность признаков изображения с помощью взаимодействия признаков внутри масштаба (AIFI) и модуля слияния признаков между масштабами (CCFM). Выборка запросов с учётом IoU используется для отбора фиксированного числа признаков изображения, которые служат начальными запросами объектов для декодера. Наконец, декодер со вспомогательными головами предсказания итеративно оптимизирует запросы объектов для формирования рамок и оценок уверенности (источник).

Ключевые особенности#

  • Эффективный гибридный энкодер: RT-DETR от Baidu использует эффективный гибридный энкодер, который обрабатывает многомасштабные признаки, разделяя взаимодействие внутри масштаба и слияние между масштабами. Эта уникальная архитектура на основе Vision Transformer снижает вычислительные затраты и обеспечивает обнаружение объектов в реальном времени.
  • Выбор запросов с учётом IoU: RT-DETR от Baidu улучшает инициализацию запросов объектов благодаря выбору с учётом IoU. Это позволяет модели сосредоточиться на наиболее важных объектах в сцене и повысить точность обнаружения.
  • Адаптивная скорость инференса: RT-DETR от Baidu поддерживает гибкую настройку скорости инференса с помощью разных слоёв декодера без необходимости повторного обучения. Такая адаптивность упрощает практическое применение в различных сценариях обнаружения объектов в реальном времени.
  • Фреймворк без NMS: RT-DETR, основанный на DETR, устраняет необходимость в постобработке с подавлением немаксимумов, упрощая конвейер обнаружения и потенциально повышая эффективность.
  • Обнаружение без anchor: RT-DETR как детектор без anchor упрощает процесс обнаружения и может улучшить обобщающую способность на разных наборах данных.

Предварительно обученные модели#

Python API Ultralytics предоставляет предварительно обученные модели RT-DETR на базе PaddlePaddle разных масштабов:

  • RT-DETR-L: 53,0 % AP на COCO val2017, 114 FPS на GPU T4
  • RT-DETR-X: 54,8 % AP на COCO val2017, 74 FPS на GPU T4

Кроме того, в июле 2024 года Baidu выпустила RTDETRv2, которая дополнительно улучшает исходную архитектуру и показатели производительности.

Примеры использования#

В этом примере показаны простые примеры обучения и инференса RT-DETR. Полную документацию по этим и другим режимам смотри на страницах документации Predict, Train, Val и Export. Модели также можно обучать на облачных GPU через Ultralytics Platform.

Пример
from ultralytics import RTDETR

# Load a COCO-pretrained RT-DETR-l model
model = RTDETR("rtdetr-l.pt")

# Display model information (optional)
model.info()

# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

# Run inference with the RT-DETR-l model on the 'bus.jpg' image
results = model("path/to/bus.jpg")
Детерминированное обучение

Установи deterministic=False при обучении RT-DETR на CUDA с PyTorch 2.0 или более поздней версией. В деформируемом attention используется F.grid_sample, для которого отсутствует детерминированный обратный проход CUDA, поэтому deterministic=True не может сделать запуск воспроизводимым и может снизить пропускную способность обучения. seed по-прежнему управляет инициализацией весов, порядком данных и выборкой аугментаций.

Компромиссы при ускорении инференса

Предварительно обученные веса RT-DETR поддерживают две настройки во время инференса для снижения задержки без повторного обучения:

  • eval_idx: остановка декодирования раньше. Для декодера по умолчанию с 6 слоями используй индекс с отсчётом от нуля (05). eval_idx=5 использует все слои, а eval_idx=3 — 4 слоя. На GPU T4 с TensorRT v10.11 RT-DETR-L улучшается с 8,0 мс / 52,7 mAP до 7,4 мс / 52,5 mAP при использовании 4 слоёв.
  • num_queries: уменьшение числа запросов объектов (по умолчанию: 300). Снижение этого значения до 100 позволяет достичь 7,4 мс / 51,7 mAP на COCO в той же конфигурации. На наборах данных с меньшим числом объектов на изображение падение mAP обычно меньше, но значение должно быть выше максимального ожидаемого числа объектов на изображение.

Обе настройки могут снизить mAP — перед развёртыванием проверь этот компромисс на своём наборе данных.

from ultralytics import RTDETR

rtdetr = RTDETR("rtdetr-l.pt")
head = rtdetr.model.model[-1]

# Choose one or both settings after validating the speed/accuracy trade-off.
head.decoder.eval_idx = 3  # Use 4 of 6 decoder layers.
head.num_queries = 100  # Use fewer object queries.

results = rtdetr("path/to/image.jpg")

# Export uses the same decoder and query settings, including TensorRT exports.
rtdetr.export(format="engine", device=0, quantize=16)

Поддерживаемые задачи и режимы#

В этой таблице представлены типы моделей, конкретные предварительно обученные веса, задачи, поддерживаемые каждой моделью, и различные режимы (Train, Val, Predict, Export), которые поддерживаются, что отмечено смайликами ✅.

Тип моделиПредварительно обученные весаПоддерживаемые задачиОбучениеВалидацияВыводЭкспорт
RT-DETR Largertdetr-l.ptОбнаружение объектов
RT-DETR Extra-Largertdetr-x.ptОбнаружение объектов
Варианты только с архитектурой

rtdetr-resnet50.yaml и rtdetr-resnet101.yaml поставляются только как архитектуры YAML. Ultralytics выпускает предварительно обученные веса только для rtdetr-l и rtdetr-x. Создавай варианты ResNet из YAML (например, RTDETR("rtdetr-resnet50.yaml")) и при необходимости обучай их или выполняй их дообучение.

Идеальные сценарии использования#

RT-DETR особенно хорошо подходит для приложений, которым нужны одновременно высокая точность и работа в реальном времени:

Цитирование и благодарности#

Если ты используешь RT-DETR от Baidu в исследовательской или практической работе, укажи оригинальную статью:

Цитата
@misc{lv2023detrs,
      title={DETRs Beat YOLOs on Real-time Object Detection},
      author={Wenyu Lv and Shangliang Xu and Yian Zhao and Guanzhong Wang and Jinman Wei and Cheng Cui and Yuning Du and Qingqing Dang and Yi Liu},
      year={2023},
      eprint={2304.08069},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Для RTDETRv2 можно сослаться на статью 2024 года:

Цитата
@misc{lv2024rtdetrv2,
      title={RTDETRv2: All-in-One Detection Transformer Beats YOLO and DINO},
      author={Wenyu Lv and Yian Zhao and Qinyao Chang and Kui Huang and Guanzhong Wang and Yi Liu},
      year={2024},
      eprint={2407.17140},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Мы хотели бы поблагодарить Baidu и команду PaddlePaddle за создание и поддержку этого ценного ресурса для сообщества, занимающегося компьютерным зрением. Мы высоко ценим их вклад в эту область и разработку детектора объектов реального времени на основе Vision Transformer — RT-DETR.

Часто задаваемые вопросы#

  • RT-DETR от Baidu (Real-Time Detection Transformer) — это современный детектор объектов реального времени, построенный на архитектуре Vision Transformer. Он эффективно обрабатывает многомасштабные признаки, разделяя взаимодействие внутри масштаба и слияние между масштабами с помощью эффективного гибридного энкодера. Благодаря выбору запросов с учётом IoU модель сосредотачивается на наиболее важных объектах, повышая точность обнаружения. Адаптивная скорость инференса, достигаемая настройкой слоёв декодера без повторного обучения, делает RT-DETR подходящим для различных сценариев обнаружения объектов в реальном времени. Подробнее о возможностях RT-DETR читай в статье RT-DETR на Arxiv.

  • Ты можешь использовать Python API Ultralytics для работы с предварительно обученными моделями RT-DETR на базе PaddlePaddle. Например, чтобы загрузить модель RT-DETR-l, предварительно обученную на COCO val2017, и добиться высокого FPS на GPU T4, воспользуйся следующим примером:

    Пример
    from ultralytics import RTDETR
    
    # Load a COCO-pretrained RT-DETR-l model
    model = RTDETR("rtdetr-l.pt")
    
    # Display model information (optional)
    model.info()
    
    # Train the model on the COCO8 example dataset for 100 epochs
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
    
    # Run inference with the RT-DETR-l model on the 'bus.jpg' image
    results = model("path/to/bus.jpg")
  • RT-DETR от Baidu выделяется эффективным гибридным энкодером и выбором запросов с учётом IoU, которые значительно снижают вычислительные затраты при сохранении высокой точности. Уникальная возможность настраивать скорость инференса с помощью разных слоёв декодера без повторного обучения обеспечивает значительную гибкость. Это особенно выгодно для приложений, требующих работы в реальном времени на ускоренных бэкендах, таких как CUDA с TensorRT, где RT-DETR превосходит многие другие детекторы объектов реального времени. Архитектура Transformer также обеспечивает лучшее понимание глобального контекста по сравнению с традиционными детекторами на основе CNN.

  • RT-DETR от Baidu позволяет гибко настраивать скорость инференса с помощью разных слоёв декодера без повторного обучения. Такая адаптивность важна для масштабирования производительности в различных задачах обнаружения объектов в реальном времени. Нужна ли тебе более быстрая обработка при невысоких требованиях к точности или более медленные, но точные обнаружения — RT-DETR можно настроить под конкретные требования. Эта возможность особенно ценна при развёртывании моделей на устройствах с разными вычислительными возможностями.

  • Нет. Для RT-DETR max_det ограничивает количество предсказаний, возвращаемых после инференса, но не увеличивает число запросов объектов, создаваемых декодером. В предварительно обученных контрольных точках RT-DETR от Ultralytics используется 300 запросов объектов, поэтому они не могут возвращать более 300 обнаружений на изображение, даже если задать для max_det большее значение.

    Используй max_det, чтобы уменьшить число возвращаемых обнаружений, например до max_det=100, если тебе нужно меньше предсказаний с высокой уверенностью. Если в твоём наборе данных может быть более 300 объектов на изображение, обучи собственную модель RT-DETR с увеличенным числом запросов декодера (nq) в YAML модели; изменение этого значения в предварительно обученной контрольной точке после обучения не является эквивалентным и требует повторного обучения для освоения дополнительных запросов.

  • Да, модели RT-DETR совместимы с различными режимами Ultralytics, включая обучение, валидацию, предсказание и экспорт. Подробные инструкции по использованию этих режимов приведены в соответствующей документации: Train, Val, Predict и Export. Это обеспечивает полный рабочий процесс разработки и развёртывания решений для обнаружения объектов. Фреймворк Ultralytics предоставляет единый API для разных архитектур моделей, упрощая работу с моделями RT-DETR.

Комментарии