Назад
29

Kaggle NFL — Player Contact Detection (Часть 2)

29

Введение

Итак, мы продолжаем изучать решения некоторых команд. Первые десять мест получили золото, а первые пять — золото и денежный приз (про них мы и рассказываем в статьях). Результаты последних отличаются только в четвертом знаке после запятой. В этой части статьи мы проанализируем и представим решения команд, не разобранные нами в первой части 🙂

Сначала немного напомним о самом соревновании. Его цель — определить столкновения между игроками в конкретный момент времени в игре для анализа здоровья игрока.

Метрика оценки — корреляционная метрика MCC (Matthews Correlation Coefficient) для оценки качества классификации столкновений. Она учитывает все четыре возможных исхода классификации:

  • TP (верно-положительные);
  • TN (верно-отрицательные);
  • FP (ложно-положительные);
  • FN (ложно-отрицательные).

Можно сказать, что суть задачи в бинарной классификации.

Данные

Теперь тезисно вспомним, что там было с данными (подробнее можно почитать в предыдущей статье).

Записи игр идут по 15 секунд, сам игровой эпизод начинается спустя 5 секунд от начала. У видео три ракурса: сбоку (SideLine), спереди (EndZone), поле полностью (All29). Первые два синхронизируются только между собой.

All29, EndZone, SideLine

Еще были даны трекинг данные: у каждого игрока есть датчик, фиксирующий его местоположение и ориентацию на поле. Они помогают анализировать расстояние между игроками. С ним можно избавиться от невозможных меток столкновений. Чем больше расстояние, тем меньше вероятность столкновения. 2 ярда (180 см) — порог, благодаря которому можно отбросить ненужные данные (расстояние в 180 см между игроками еще возможно, это как средний рост человека, но расстояние в 5 метров уже невозможно при метке как столкновение). Получается, столкновение при расстоянии между игроками более 2-х ярдов маловероятно, хотя в данных присутствовали метки между игроками с расстоянием 5 метров.

Кроме того, в предыдущем соревновании NFL Kaggle были добавлены предсказанные ббоксы шлемов игроков — это дает дополнительную информацию о положении игроков на видео и используется в соревновании для получения области со столкнувшимися игроками.

Решение 4

Решение состоит из двух этапов:

  1. обучение CNN;
  2. обучение градиентных бустингов.

Градиентный бустинг — метод машинного обучения для построения предсказательных моделей. Чаще всего используются библиотеки XGBoost, LGBM, CatBoost.

На 1-м этапе авторы прогнозируют контакт при помощи разных подходов CNN. На 2-м этапе в градиентный бустинг подаются агрегированные предикты CNN, трекинг данные и ббоксы шлемов. Затем вычисляется усредненное значение по 5 моделям, оптимизируется порог для контакта игрока с игроком, плюс для контакта игрока с землей.

Общая схема решения. Camaro 2 — Public 0.780

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

Теперь подробнее разберем первый этап решения на примере участников K_mat и Camaro. Им занималось два человека из команды (всего в ней их было четверо).

А) Решение от участника K_mat (больше деталей в комментариях к его решению)

Сначала пред-обрабатывается полное изображение игроков для определения каждого из них на этом изображении. Рисунок вокруг рамок шлемов расширяется, изменяя размер шлемов до нужного значения. Так получается кроп игрока в полный рост.

Далее предсказываются 3 маски для каждого игрока по отдельности с использованием модели UNet.

  • маски 0_a, 1_a, 2_a — контакт игрока с игроком;
  • маски 0_b, 1_b, 2_b — маска игрока;
  • маски 0_c, 1_c, 2_c — контакт игрока с землей;

Уточняется место контакта с масками контакт игрока с игроком и масками игроков, 0_a, 1_a, 2_a и 0_b, 1_b, 2_b соответственно. Получается следующий результат:

  • маски 0_ab, 1_ab, 2_ab — пересечение масок столкновений с масками самих игроков;
  • маски 0_ab, 1_ab, 2_ab — пересечение масок игроков с землей.

Затем области пересечения масок каждой пары умножаются, и ее максимальное значение выводится в качестве прогноза столкновения между двумя игроками (как это показано на рисунке ниже):

Области пересечения масок каждой пары

В конце вычисляется функция потерь для каждого контакта. Результаты сравниваются с соответствующими истинными значениями. Для этого используется функция потерь LogLoss.

Получается, результат работы модели — предсказание столкновения между игроками. Выглядит это так:

Б) Решение от участника Camaro

Это решение предсказывает столкновение всех комбинированных пар и контакт игрока с землей одновременно.

Часть решения на общей схеме (Camaro 1)

Первый этап — получение фичемапов (RoIAlign) с помощью YoloxFPN из полных изображений с маской ббоксов шлемов + уточнение RoIAlign игроков с помощью координат ббокса шлемов. Причем это не кроп, а фичемапа полного изображения.

После линейного преобразования трекинг данных конкатенируем их с фичемапой игроков из предыдущего шага.

  1. Для предсказания столкновения игрока с игроком создается попарная матрица игроков и конкатенация фичей игроков. Затем расстояния между игроками умножаются на фичи матрицы и прогоняются через линейный слой. И в результате получаются попарные предсказания столкновений между игроками.
  2. Для предсказания столкновения игроков с землей полученный после объединения фичимапы с трекинг данными результат прогоняется через линейный слой. В итоге мы имеем попарное предсказание столкновения игроков.
  3. Дополнительно предсказывается наличие/отсутствие контакта игрока с другим игроком (игроком из любой команды).

Часть с LightGBM и XGBoost в этой статье нами подробно затрагиваться не будет, но мы коротко представим несколько деталей:

  • предсказанные значения из CNN — фичи для последующего обучения множества комбинаций LightGBM и XGBoost;
  • было создано множество фичей (feature extraction), их полный список можно посмотреть по этой ссылке;
  • а еще у команды не получилось завести CatBoost.

Решение 3

Это решение, в отличие от других, является end-to-end. Модель обучается для каждого игрока и интервала шагов (вместо попарного предсказания). Контакт с землей для текущего игрока и контакт с семью ближайшими игроками прогнозируется для всех входных шагов. Модель состоит из видео энкодера для обработки входных видеокадров и трансформер декодера для объединения трекинг и видео фичей.

Архитектура решения, занявшего третье место

Видео энкодеры

Видео энкодеры использовали несколько входных видеокадров в соответствии с необходимым количеством шагов. Они производили активацию на соответствующих шагах с уменьшенным разрешением (обычно для 16 шагов с соответствующими 96 кадрами), применяя каждый второй кадр для входа.

В качестве видео энкодеров использовалось несколько разных моделей:

  • предтренированные модели 2D imagenet + 3D Conv слой (идея команды, занявшей второе место); черно-белая последовательность из +- 3 фреймов от кадра со столкновением, которая используется как вход для 2D модели (convnext large backbone) и объединяется с помощью 3D Conv;
  • обученные модели 2D imagenet + TSM с вводом цвета для каждого 2-го или 3-го кадра и обменом активациями (как TSM) между кадрами перед сверткой;

TSM улучшает способность сети моделировать временную информацию в видео фреймах (здесь можно почитать оригинал статьи)

  • 3D / видеомодели, такие как Video Swin Transformer или CLIP-X (X-CLIP-B/16 — вторая по производительности модель).

Подготовка данных: фреймы были кропнуты до разрешения 224×224. При этом шлем текущего игрока помещался в центральную/верхнюю часть кадра и масштабировался таким образом, чтобы средний размер шлемов в окружающих кадрах был масштабирован до 34 пикселей.

Аугментации: random shift, scale, rotate images, shift HUV, добавленые blur и noise.

Transformer player features / video activations decoder

Основная идея: механизмы внимания используются в модели-трансформере для обработки и объединения различных признаков. Эти фичи содержат информацию о местоположении, видимости, принадлежности к команде, роли игроков, скорости, ускорении, расстоянии до других игроков, относительной ориентации и активации видео с позиций шлема. Модель учитывает несколько последовательностей соседних фреймов -7…+8 и семи соседних игроков на фреймах с определенного расстояния. За счет этого создается полное представление для каждого игрока на каждом шаге.

Обучение модели:

  • Выбор данных — все игроки и их шаги с распознанным шлемом включаются в трейн (хотя бы на одном видео). Это гарантирует доступ модели к трекинг фичам за несколько шагов до и после становления игрока видимым/невидимым.
  • Оптимизация и шедулер — оптимизатор AdamW используется с относительно небольшим размером батча от 1 до 4. В процессе обучения применяется шедулер CosineAnnealingWarmRestarts с размером эпохи в 1024-2048 семплов.
  • Функция потерь — потери бинарной перекрестной энтропии (BCE) используются с небольшим сглаживанием таргетов (label smoothing) в диапазоне от 0,001 до 0,999. Параметр сглаживания подобран интуитивно.
  • Было обучено множество моделей. В toggle представлены почти все модели и ансамбли с их качеством на приватном лидерборде. Video model type, backbone Notes Private LB score Convnext large, 2D + 3D conv 16 steps/96 frames, skip 1 frame. 0.7915 Convnext base, 2D + 3D conv 16 steps/96 frames, skip 1 frame. 0.786 DPN92, 2D + 3D conv 16 steps/96 frames, skip 1 frame. 0.784 X-CLIP-B/16 11 steps/64 frames, skip 1 frame. 0.791 X-CLIP-B/32 11 steps/64 frames, skip 1 frame. 0.784 Convnext pico, TSM 63 steps/384 frames, skip 2 frames. 0.788 2 best models ensemble Convnext large and X-CLIP-B/16, 0.7925 6 models ensemble Without DPN92, re-trained on full data with original helmets 0.7932 6 models ensemble Without DPN92, re-trained on full data with fixed helmets 0.7934 7 models ensemble Convnext large added with weight 3 and X-CLIP-B/16 with weight 2. Models trained on different folds. 0.7956

Решение 2

Это решение двухэтапное: CNN + градиентный бустинг.

Подготовка данных

Для модели определения столкновения было извлечено 24 соседних фрейма из видео (до и после столкновения).

Как и другие участники соревнования, команда, занявшее второе место, кропала нужную область на фрейме, используя bboxes игроков. У большинства моделей ресайзили полученные кропы для создания у них одного размера.

Трекинг данные кодировали и подавали в CNN. Как утверждают сами авторы, плюс такого подхода — возможность в основном полагаться на одноэтапное решение и быть менее подверженным к переобучению при двухэтапном подходе с out-of-fold CNN предсказаниями.

Forward Selection OOF (Out-of-Fold) — метод ансамбля, который включает в себя обучение нескольких моделей на разных подмножествах данных, плюс усреднение прогнозов каждой модели Out-of-Fold для создания окончательного прогноза. Познакомиться с Forward Selection OOF Ensemble можно тут.

Основная идея архитектуры модели выглядела следующим образом:

Архитектура решения второго места + пример входного тензора

Для входных данных есть 5 каналов. На схеме выше авторами отображено только 3 канала. Фреймы 552, 600 и 648 показывают первый канал. Фреймы 576 и 624 показывают второй и пятый каналы соответственно.

Теперь давайте разберем каждый из этих каналов подробнее.

Первый канал — пара черно-белых кропов размером 128×256, вырезанных во время потенциального столкновения игроков. Кроп был получен для каждого из видов (Sideline и Endzone) в качестве центра двух или одного ббоксов в случае столкновения с землей. Затем кропы объединили до 256х256 (как это показано на рисунке выше).

Первый канал входного тензора

Второй канал — маски ббоксов шлемов для улучшенной возможности модели выучивать тех игроков, для которых нужно предсказывать столкновение. У масок ббоксов целевых игроков значение пикселей 255, у остальных ббоксов, попавших в кроп, — 128.

Третий канал — прямое представление декодированной дистанции между игроками из трекинг данных. Из них CNN может выучивать расстояние между игроками (а это самая важная фича в трекинг данных). Такая информация помогала отсекать те потенциальные столкновения, для которых расстояние равнялось более 2-м ярдам (это около 180 см). Затем дистанцию умножали на 128. Это давало значения от 0 до 255 и кодировалось в канал.

Четвертый канал — важная информация о нахождении/отсутствии игроков в одной команде. Значения в канале — 255 и 128 соответственно.

Пятый канал — кодирование информации о пройденной дистанции с начала игрового момента. Эта фича давала прирост градиентному бустингу на втором этапе обучения. Большое преимущество кодирования фич (дистанция между игроками и пройденная дистанция) — возможность CNN напрямую изучать всю пространственную и временную информацию из трекинг данных.

Для третьего, четвертого и пятого каналов значения применялись только для ббокс шлемов (то есть для областей как во втором канале). Авторы пробовали применять их ко всем пикселям, но это оказалось безуспешным: у модели все равно есть канал ббокс шлема (второй канал).

Модель

В виде 2D бекбона использовали tf_efficientnetv2_s.in21k_ft_in1k и tf_efficientnetv2_b3 архитектуры + предтренерованные веса из timm-библиотеки. Еще авторы тренировали все свои модели в течение четырех эпох с помощью cosine schedule decay и AdamW оптимизатора.

Аугментации

Участники соревнования отмечают особенно полезным mixup при борьбе с быстрым переобучением. Он еще хорошо работает с кодированными каналами фичей (2,3,4,5 каналы) в качестве регуляризатора.

Во время обучения случайным образом сдвигался кадр изображения в диапазоне +-3 кадра до ближайшего совпадающего кадра (который был вычислен на основе текущего шага). Кроме того, использовался небольшой сдвиг +-1 для подмножества модели в качестве TTA в ансамбле.

Test Time Augmentation (TTA) — подход, при котором каждое изображение в тестовой выборке аугментируется путем применения различных преобразований (поворотов, масштабирования, кропа и других), и для каждой аугментированной версии изображения модель делает предсказание. Затем предсказания, полученные от всех аугментированных версий, агрегируются с помощью определенного метода (например, усреднением или голосованием) для получения окончательного предсказания каждого изображения. Это позволяет учитывать различные вариации и неопределенности данных тестовой выборки, улучшать качество и обобщающую способность модели.

Интерполяция трекинг данных и ббоксов шлемов

Еще одна интересная техника по добавлению данных. С целью улучшения случайного сдвига кадров нужно интерполировать информацию трекинга от 10 Гц до 60 Гц. Авторы испробовали различные методы для решения этой задачи. Простая линейная интерполяция оказалась достаточной и устойчивой в сравнении с другими методами. С ее помощью авторы также дополнили недостающие ббоксы шлемов. Да, это добавило шума в данные и ложные срабатывания, зато помогло найти дополнительные столкновения игроков в очень многолюдных игровых сценах. Интерполяция использовалась и при инференсе.

Некоторые особенности решения 2

Как и в решениях, описанных в прошлой статье, все предсказания модели были усреднены и последовательно поданы на обучение GBM-модели.

Также авторы пытались обучить определению столкновений между игроками и столкновению игрока с землей в рамках одной модели, а затем сделать файнтюнинг на каждую из двух задач. Но это не сработало. Напомним, что лучшее качество было у моделей с разделенными задачами. Почему так? Потому что столкновение между игроками и столкновение игрока с землей абсолютно разные, и одна модель хуже обобщается на комбинированной задаче.

Выводы

В статье мы рассмотрели разные решения, представленные командами в рамках соревнования по определению столкновения между игроками. С каждым из этих решений интересно познакомиться — команды достигли результатов, отличающихся только в четвертом знаке после запятой. Полезным может оказаться не только участие в соревнованиях, но и анализ решений участников, занявших призовые места 🙂

В качестве итогов нашего обзора мы можем выделить:

  • новые подходы участников соревнования для обнаружения контакта между игроками;
  • использование кодирования трекинг данных в фичемапы, что позволяет конвертировать трекинговую информацию о движении игроков в удобное представление для обучения CNN;
  • сдвиги кадров как метод аугментации;
  • знакомство с Test Time Augmentation (TTA) — подходом, повышающим качество распознавания модели при инференсе.

Ссылки

  • Kaggle NFL — Player Contact Detection (Часть 1):

https://deepschool-pro.notion.site/Kaggle-NFL-Player-Contact-Detection-1-c88d8e50dc89408b8fe83fe776a65d2b

  • Второе место:

https://www.kaggle.com/competitions/nfl-player-contact-detection/discussion/391740

  • Третье место:

https://www.kaggle.com/competitions/nfl-player-contact-detection/discussion/392182

  • Четвертое место:

https://www.kaggle.com/competitions/nfl-player-contact-detection/discussion/391761

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!