В новом разборе популярный блогер и исследователь Янник Килхер (Yannic Kilcher) детально анализирует архитектуру CornerNet — инновационной нейросети для детектирования объектов в рамках задач компьютерного зрения. Вместо привычного предсказания центра и размеров рамки, этот подход предлагает находить объекты по парам ключевых точек: верхнему левому и нижнему правому углам. Рассматриваемая технология решает фундаментальные проблемы сверточных сетей с помощью уникального метода пулинга углов и лаконичной, но удивительно эффективной системы одномерных эмбеддингов.
🧩 Смена парадигмы: от центра к углам 0:00
Традиционный подход к задаче детектирования объектов на изображениях, который использовался во многих классических архитектурах и недавних проектах (например, в модели DETR от Facebook), строится вокруг поиска центральной точки объекта с последующим расчетом его высоты и ширины. Идея разобрать альтернативный подход возникла у Янника Килхера после предложения одного из подписчиков в комментариях к прошлому видео. Исследователь признает, что CornerNet является относительно неновой моделью, однако заложенные в нее принципы до сих пор выглядят крайне изящно.
Главная сложность в обработке стандартных датасетов заключается в том, что на одном кадре может находиться неизвестное количество объектов. Они могут частично перекрывать друг друга, иметь разные масштабы и пропорции. Архитектура CornerNet предлагает решать эту проблему оригинальным способом: прогнозировать координаты верхнего левого и нижнего правого углов независимо друг от друга с помощью раздельных ветвей нейросети, а затем объединять и уточнять полученные результаты.
🏗️ Архитектура системы: «песочные часы» и три выхода 2:14
В качестве базового извлекателя признаков (backbone) в CornerNet применяется сверточная нейросеть с архитектурой Hourglass («песочные часы»). Процесс обработки изображения строится по следующим шагам:
- Входное изображение пропускается через серию сверточных слоев, которые последовательно уменьшают его пространственное разрешение.
- На этапе сжатия сеть принудительно увеличивает количество каналов, что заставляет ее формировать глобальное семантическое представление о сцене.
- Затем сеть производит обратный апсемплинг (увеличение разрешения). Этот цикл сжатия и расширения может повторяться волнообразно.
- Для предотвращения потери точной пространственной информации между симметричными слоями сжатия и расширения проложены сквозные связи (skip connections), позволяющие признакам перемещаться напрямую.
После выхода из сети Hourglass данные попадают в два модуля предсказания: один отвечает за верхние левые углы, второй — за нижние правые. Каждый из этих модулей генерирует три типа выходных данных: тепловые карты (heatmaps), эмбеддинги (embeddings) и смещения (offsets). Последние необходимы для компенсации погрешностей округления координат, возникающих при понижении разрешения (downsampling) в сверточных слоях.
🗺️ Тепловые карты и «умное» сглаживание при обучении 4:00
Выходные тепловые карты имеют размерность $H \times W \times C$, где $H$ и $W$ — высота и ширина карты признаков, а $C$ — количество предсказываемых классов объектов. Пиковые значения в определенных каналах соответствуют местам, где сеть «видит» угол конкретного класса.
При обучении такой структуры логично было бы жестко требовать от сети единицу в точной координате угла и нули во всех остальных пикселях. Однако авторы CornerNet пошли по более эффективному пути, заложив в функцию потерь определенное послабление (slack).
Поскольку даже слегка смещенная рамка все равно будет иметь высокий коэффициент пересечения (IoU) с реальным объектом, целевая матрица размывается с помощью многомерного распределения Гаусса. В истинной точке пиксель получает значение 1, а вокруг нее плотность плавно спадает (например, до 0.9 и ниже). Масштаб этого размытия динамически рассчитывается под каждый конкретный объект в зависимости от его геометрических размеров.
🔗 Магия одномерных эмбеддингов: Push и Pull функции потерь 4:56
Поскольку сеть предсказывает углы независимо, на изображении с несколькими однотипными объектами (например, тремя людьми) модель выдаст три левых и три правых угла. Для того чтобы понять, какие из них образуют единую рамку, разработчики внедрили механизм эмбеддингов. По сути, это векторные дескрипторы, которые должны иметь большое скалярное произведение, если углы принадлежат одному объекту, и малое — если разным. После получения этих векторов финальное сопоставление углов можно производить с помощью венгерского алгоритма (Hungarian matching).
Для настройки этих векторов используется комбинация двух функций потерь (push и pull losses):
- Pull loss (притяжение): минимизирует расстояние между эмбеддингами левого ($e_{tk}$) и правого ($e_{bk}$) углов одного и того же объекта и их средним значением ($e_k = \frac{e_{tk} + e_{bk}}{2}$). Привязка к среднему значению, как подчеркивает Янник Килхер, спасает алгоритм обратного распространения ошибки от проблем «перелета» (overshooting), которые возникают, если оптимизировать две движущиеся точки напрямую друг к другу.
- Push loss (отталкивание): берет средний эмбеддинг одного объекта и заставляет его держаться как можно дальше от средних эмбеддингов других объектов на картинке. При этом используется пороговая функция потерь (margin loss) с ограничением в единицу: если маркеры объектов разошлись достаточно далеко, сеть перестает получать штрафы или бонусы за их дальнейшее отдаление.
Янник Килхер выражает искреннее удивление тем фактом, что в оригинальной работе авторы использовали эмбеддинги размерностью всего 1. По мнению ведущего, поразительно, что обычное одиночное число способно успешно кодировать уникальные визуальные характеристики объектов, учитывая, что каналы предсказания углов работают изолированно друг от друга.
📐 Corner Pooling: как увидеть объект из пустого угла 14:28
Ключевым новшеством статьи стал специализированный слой пулинга (Corner Pooling). Янник Килхер подробно объясняет, почему стандартные сверточные слои пасуют перед задачей поиска углов bounding box. Сверточные сети сильны в извлечении локальных признаков из ближайшего окружения. Но если мы посмотрим на угол рамки, ограничивающей круглую луну или летящий самолет, то в самой точке угла не будет никакой визуальной информации об объекте — там находится пустой фон.
Чтобы собрать контекст, слой Corner Pooling принудительно транслирует сигналы от краев объекта вдоль горизонтальной и вертикальной осей. Для верхнего левого угла алгоритм делает следующее:
- Сканирует карту признаков вправо от текущей точки и берет максимальное значение (находит верхнюю грань объекта).
- Сканирует карту признаков вниз от текущей точки и берет максимальное значение (находит левую грань объекта).
- Складывает полученные результаты, формируя выходной признак.
С технической точки зрения этот процесс реализуется очень эффективно через вычисление кумулятивного максимума по осям матрицы. Подобная операция выполняется перед финальным предсказанием, поэтому базовая сеть Hourglass не нагружается специфическими вычислениями.
Поскольку чистая агрегация длинных линий может приводить к ложным срабатываниям (например, если два объекта выстроены по одной линии), авторы добавили внутрь модуля пулинга сквозную связь (skip connection). По мнению Килхера, это позволяет сохранить необходимый баланс между глобальным контекстом осей и локальными особенностями текстуры в конкретной точке.
📊 Результаты, сбои и альтернативные идеи 20:08
Модель CornerNet обучается на суммарную функцию потерь, объединяющую детекцию углов, притяжение/отталкивание эмбеддингов и корректировку смещений пикселей. В категории одноэтапных детекторов (one-stage predictors), которые находят объекты за один проход по сети без генерации предварительных регионов, CornerNet на момент публикации показал значительный прирост точности, обусловленный именно интеграцией Corner Pooling. Визуальные тесты подтверждают: без этого слоя сеть часто промахивается мимо истинных границ объектов из-за слишком размытых признаков на глубоких слоях.
Тем не менее, алгоритм не лишен изъянов. Среди примеров брака авторы демонстрируют случаи, когда система ошибочно связывает верхний левый угол одного объекта с нижним правым углом совершенно другого из-за случайного совпадения их одномерных эмбеддингов.
В финале видео Янник Килхер делится собственной гипотезой, которую он обдумывал ранее: заставить сеть предсказывать для каждого пикселя его расстояние до правого нижнего угла объекта (или нормализованную площадь), а затем использовать разницу значений между точками как оценку для рамок. Ведущий предполагает, что с такой задачей отлично справились бы трансформеры благодаря механизму внимания между парами точек, однако тут же с самоиронией добавляет, что его идея «может оказаться полной ерундой». В целом Килхер называет CornerNet красивой, чистой работой без избыточного нагромождения инженерных трюков.