# Янник Кильчер: «Запустить DETR от Facebook проще, чем нарисовать рамку в Python»

Источник: https://www.youtube.com/watch?v=LfUsGv-ESbc
Канал: Yannic Kilcher
Опубликовано: 30.05.2020

---

Янник Кильчер, известный ИИ-исследователь и автор популярного YouTube-канала, представил подробный видеоурок по работе с алгоритмом детектирования объектов DETR (Detection Transformer). Это решение, разработанное подразделением Facebook AI Research (FAIR), представляет собой радикально новый подход к компьютерному зрению, отказывающийся от традиционных сложных архитектур в пользу элегантности трансформеров.

## 🚀 Быстрый старт: от PyTorch Hub до первых результатов
[[JUMP:0:01]]

Главная ценность DETR, по мнению Янника, заключается в невероятной простоте его интеграции. В отличие от многих других алгоритмов, требующих сложной настройки окружения, DETR можно запустить буквально несколькими строками кода через Torch Hub [1:08]. Ведущий демонстрирует это в Google Colab, импортируя библиотеку `torch` и вызывая функцию `torch.hub.load`.

Процесс начала работы выглядит следующим образом:

*   Загрузка предобученной модели (магистральное решение Facebook).
*   Автоматическое скачивание весов.
*   Перевод модели в режим оценки (`eval`) для корректной работы слоев пакетной нормализации [6:54].

Янник подчеркивает, что модель включает в себя как классическую архитектуру ResNet в качестве «бэкбона» (для извлечения признаков), так и блок трансформера для предсказания объектов [1:22].

## 🛠️ Подготовка данных и «сураджинг» кода
[[JUMP:2:03]]

Для тестирования алгоритма автор использует изображения из интернета, загружая их с помощью библиотеки `requests`. В процессе написания скрипта Янник в шутку вводит термин «сураджинг» (Surajing), ссылаясь на известного блогера Сираджа Равала, — так он называет быстрое копирование кусков кода из готовых примеров в свой проект [3:45].

Критически важным этапом является предобработка изображения:

1.  **Формат:** Изображения часто приходят в формате RGBA, что вызывает ошибки в тензорах. Янник принудительно конвертирует их в RGB [21:00].
2.  **Трансформации:** Используется библиотека `torchvision` для изменения размера. Хотя датасет COCO обычно использует 640x480, архитектура DETR адаптирована под изменение размера до 800 пикселей по одной из сторон [3:33].
3.  **Нормализация:** Применяются стандартные коэффициенты ImageNet (среднее значение и стандартное отклонение), чтобы входные данные соответствовали тем, на которых обучалась нейросеть [4:50].

## 🧠 Анатомия предсказаний DETR
[[JUMP:8:16]]

После того как тензор изображения прогоняется через модель (автор рекомендует использовать GPU через `.cuda()` для ускорения [7:20]), на выходе получается словарь с двумя ключевыми компонентами:

*   **pred_logits:** Логиты классов. В оригинальной версии модель выдает 100 предсказаний, каждое из которых соотносится с 92 классами (91 класс из COCO + 1 специальный класс «ничего») [9:12].
*   **pred_boxes:** Координаты ограничивающих рамок (bounding boxes).

Важное техническое наблюдение от Янника: координаты рамок в DETR предсказываются не в виде угловых точек (X0, Y0, X1, Y1), а в формате (центр\_X, центр\_Y, ширина, высота) [13:47]. Кроме того, эти значения нормализованы от 0 до 1, поэтому для отрисовки на реальном фото их необходимо масштабировать обратно до размеров исходного изображения [14:28].

## 🐕 Детектирование собак и визуализация
[[JUMP:11:06]]

Применив функцию `argmax` к логитам, Янник фильтрует результаты. По умолчанию большинство из 100 предсказаний модели указывают на класс №91 — отсутствие объекта. Тестовое изображение с собаками прошло проверку успешно: алгоритм четко выделил два объекта [12:11].

Для визуализации автор использует библиотеку PIL (Pillow):

*   Рисование прямоугольников через `ImageDraw.rectangle`.
*   Добавление текстовых меток с помощью `ImageDraw.text`.
Янник признается, что «больше всего времени было потрачено на отрисовку рамок, а не на запуск самого ИИ», что лишний раз доказывает доступность современных моделей [19:45].

## 🎨 Адверсариальные тесты и «взлом» логики модели
[[JUMP:22:17]]

Самая экспериментальная часть видео — попытка заставить модель «увидеть» то, чего нет. Янник использует абстрактные пятна Роршаха и картины Джексона Поллока в качестве «состязательных примеров» (adversarial examples) [28:41].

Чтобы модель не выдавала пустые результаты, автор применяет «хак»:

1.  Он принудительно отсекает последний класс («ничего») из логитов [24:39].
2.  Затем выбирает 5 или 15 лучших предсказаний (`Top K`), заставляя нейросеть назвать наиболее вероятные объекты даже в хаосе красок [25:39].

Результаты получились любопытными:

*   В картинах Поллока DETR настойчиво видит «птиц» [30:14].
*   В других абстракциях модель находит «лошадей», «часы» и внезапно — «торт» (cake) [31:09].

Янник делает вывод, что хотя модель ограничена 90 классами датасета COCO, она демонстрирует поразительную устойчивость и простоту в обращении. В финале видео он подтверждает высокую эффективность DETR на классических задачах, загрузив фото слонов в национальном парке Крюгера, где алгоритм безошибочно выделил всех животных [32:21].