Продолжаем разбирать подходы призеров Kaggle-соревнований от американской национальной футбольной лиги (NFL). Участники этого челленджа детектировали столкновения игроков в американском футболе, анализируя данные с видеокамер и датчиков, прикрепленных к форме футболистов. В продолжении первой части статьи расскажу про самые успешные подходы к этой задаче.
Задачи участников соревнования
Кратко напомню условия соревнования. Его цель — зафиксировать столкновения между игроками. В перспективе это поможет медикам лучше следить за здоровьем спортсменов.
Метрика оценки — корреляционная метрика MCC (Matthews Correlation Coefficient) для оценки качества классификации столкновений. Она учитывает все четыре возможных исхода классификации:
- TP (верно-положительные);
- TN (верно-отрицательные);
- FP (ложно-положительные);
- FN (ложно-отрицательные).
Можно сказать, что суть задачи в бинарной классификации.
С какими данными надо было работать
В наличии 15-секундные записи с трех камер, расположенных в разных частях поля: сбоку (SideLine), спереди (EndZone), поле полностью (All29). Первые два ракурса синхронизированы между собой. Сами игровые эпизоды начинаются спустя 5 секунд после старта видео.
All29, EndZone, SideLine
Кроме того, участникам соревнования выдали трекинг-данные с датчиков, которые есть у каждого игрока и которые фиксируют его местоположение и ориентацию на поле. Трекинг-данные помогают анализировать расстояние между игроками. Они позволяют отсеять ложные срабатывания и исключить возможность детекции столкновения между игроками, которые расположены слишком далеко друг от друга. Кроме того, участники предыдущего NFL Kaggle научились выделять на записях шлемы игроков. Их наработки также были включены в датасет. Подробнее обо всех этих данных можно прочитать в первой части статьи.
Решение, занявшее 2 место
Как и два из трех уже рассмотренных решений, этот подход делится на два этапа: CNN + градиентный бустинг.
Подготовка данных
Первоначально для работы модели определения столкновения из видео было извлечено 24 соседних фрейма. Как и другие участники соревнования, команда, занявшее второе место, кропала нужную область на фрейме, используя BBoxes игроков. В этом решении команда Hydrogen, как и другие команды, ресайзила полученные кропы для получения картинок одного размера.
Трекинг-данные кодировали и подавали в 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 показывают второй и пятый каналы соответственно.
Архитектура решения второго места + пример входного тензора
Подробно разберем все пять каналов:
Первый канал — пара черно-белых кропов размером 128x256, вырезанных во время потенциального столкновения игроков. Кроп был получен для каждого из видов (Sideline и Endzone) в качестве центра двух или одного BBox’ов в случае столкновения с землей. Затем кропы объединили до 256х256.
Первый канал входного тензора
Второй канал — маски Box’ов шлемов. Они понадобились, чтобы улучшить возможности модели по «выучиванию» тех игроков, для которых нужно предсказывать столкновение. У масок BBox’ов целевых игроков значение пикселей 255, у остальных BBox’ов, попавших в кроп, — 128.
Третий канал — прямое представление закодированной дистанции между игроками из трекинг-данных. Из них CNN может выучивать расстояние между игроками (а это самая важная фича в трекинг-данных). Такая информация помогает отсечь те потенциальные столкновения, где расстояние между игроками превышает два ярда (это около 180 см). Это средний рост игрока, и в реальной жизни столкновение на такой большой дистанции физически невозможно. Дистанцию умножали на 128. Это давало значения от 0 до 255 и кодировалось в канал.
Четвертый канал — важная информация о нахождении/отсутствии игроков в одной команде. Значения в канале — 255 и 128 соответственно.
Пятый канал — кодирование информации о пройденной дистанции с начала игрового момента. Эта фича давала прирост градиентному бустингу на втором этапе обучения.
Большое преимущество кодирования фич (дистанция между игроками и пройденная дистанция) — возможность CNN напрямую изучать всю пространственную и временную информацию из трекинг-данных.
Для третьего, четвертого и пятого каналов значения применялись только для BBox-шлемов (то есть для областей, как во втором канале). Авторы пробовали применять их ко всем пикселям, но не добились успеха: у модели все равно есть канал BBox-шлема (второй канал).
Модель
В виде 2D-бекбона использовали tf_efficientnetv2_s.in21k_ft_in1k и tf_efficientnetv2_b3 архитектуры в сочетании с предтренировочными весами из timm-библиотеки. Еще авторы тренировали все свои модели в течение четырех эпох с помощью cosine schedule decay и оптимизатора AdamS.
Аугментации
Участники соревнования отмечают, что mixup оказался особенно полезным при борьбе с быстрым переобучением. Еще он хорошо работает с кодированными каналами фичей (2,3,4,5 каналы) в качестве регуляризатора.
Во время обучения кадр изображения случайным образом сдвигался в диапазоне +-3 кадра до ближайшего совпадающего кадра (который был вычислен на основе текущего шага). Кроме того, использовался небольшой сдвиг +-1 для подмножества модели в качестве TTA в ансамбле.
Test Time Augmentation (TTA) — подход, при котором каждое изображение в тестовой выборке аугментируется путем применения различных преобразований (поворотов, масштабирования, кропа и других), и для каждой аугментированной версии изображения модель делает предсказание. Затем предсказания, полученные от всех аугментированных версий, агрегируются с помощью определенного метода (например, усреднением или голосованием) для получения окончательного предсказания каждого изображения. Это позволяет учитывать различные вариации и неопределенности данных тестовой выборки, улучшать качество и обобщающую способность модели.
Интерполяция трекинг-данных и BBox’ов шлемов
Команда, занявшая второе место в соревновании, применила еще одну интересную технику по добавлению данных.
Чтобы улучшить случайный сдвиг кадров, нужно интерполировать информацию трекинга от 10 Гц до 60 Гц. Авторы испробовали различные методы для решения этой задачи. Простая линейная интерполяция оказалась достаточной и устойчивой в сравнении с другими методами. С ее помощью авторы также дополнили недостающие Box'ы шлемов. Да, это добавило шума в данные и спровоцировало ложные срабатывания, зато помогло найти дополнительные столкновения игроков в очень многолюдных игровых сценах. Интерполяция использовалась и при инференсе.
Некоторые особенности решения
Как и в решениях, описанных в прошлой статье, все предсказания модели были усреднены и последовательно поданы на обучение GBM-модели.
Также авторы пытались обучить модель определению столкновений между игроками и столкновению игрока с землей в рамках одной модели, а затем сделать файн тюнинг на каждую из двух задач. Но это не сработало. Лучшее качество было у моделей с разделенными задачами. Почему так? Потому что столкновение между игроками и столкновение игрока с землей сильно отличаются, а одна модель хуже обобщается на комбинированной задаче.
Решение, занявшее 1 место
Победитель этого соревнования применил довольно интересный подход (код). Решение состоит из следующих трех основных частей:
- препроцессинг: небольшая модель XGB для исключения простых негативных семплов из данных;
- CNN для классификации контакта между игроками и CNN для классификации контакта между игроком и землей (как и в предыдущем рещении, здесь было решено разделить задачу детекции столкновения между игроками и столкновения между игроком и землей);
- еще один XGB в качестве постпроцессинга выходов сети.
3D CNN for Video Classification
Для подготовки данных для модели игрок-игрок автор извлек 18 соседних фреймов из видео: {frame[-44], -37, -30, -24, -18, -13, -8, -4, -2, 0, 2, 4, 8, 13, 18, 24, 30, frame[37]}. Кадр[-44] представляет собой 44 кадра, предшествующих расчетному кадру текущей выборки. Берутся кадры до и после столкновения с определенным шагом. Чем ближе к target-фрейму, тем чаще мы получаем фреймы. Таким образом, модель видит больше кадров, близких к target-фрейму.
Впрочем, не обошлось и без находчивости. Можно заметить отсутствие 44 фрейма. Он был удален, так как просто не помещался в память.
Далее автор отрисовал на головах игроков большие черные и белые точки, как бы акцентируя внимание модели на нужных игроках. Рисовал он их не в дополнительном канале, а сразу на изображении и сделал это для того, чтобы оставить трехканальный вход для предтренированной модели. Область с нужными игроками вырезалась в 10 раз больше среднего размера BBox’ов в последовательности.
А затем следует еще более странная, но одновременно крутая идея, улучшившая скор с 0.73 до 0.76 на кросс-валидации (CV). Заключается она в следующем: на черном фоне между изображениями игроков отрисовываются трекинг-данные для каждого игрока. Сталкивающиеся игроки отмечены более яркими точками с большим радиусом. Два разных цвета — две разные команды.
Ниже показан input в сеть. И нет, это не просто красивая визуализация. Это и есть данные, подающиеся на вход сетки.
Последовательность изображений, которая подавалась на вход resnet50-irCSN
Подготовка данных для модели игрок-земля такая же, только фреймов 23 и последовательность длиннее: [-54, -48, -42, -36, -30, -24, -18, -13, -8, -4, -2, 0, 2, 4, 8, 13, 18, 24, 30, 36, 42, 48, 54].
На изображении нет симуляции трекинг-данных, так как этот подход не улучшил скор. Именно поэтому последовательность длиннее. Теперь получается вместить больше данных на GPU.
Модель
Была выбрана resnet50-irCSN, поскольку это скорее задача action recognition, а не классическая 3D-классификация. Лучший скор на бенчмарках (Kinetics-400 dataset) показывала именно эта модель.
Для изображений с sideline и endzone использовались аугментации и рандомный swap (sideline, tracking, endzone → endzone, tracking, sideline). Что касается tracking данных, то здесь применялись только горизонтальные и вертикальные флипы.
При обучении использовался linear scheduler для learning rate. Модель обучалась одну эпоху.
XGBoost postprocessing
Автор применил ensemble probability из соседних временных шагов для повышения производительности модели. Ensemble probability — это вероятность, полученная путем объединения (ансамблирования) нескольких моделей или прогнозов в единую модель или прогноз.
Player-Player postprocessing
В данном случае постпроцессинг — это обучение еще одной модели, но на выходах нейронки и xgboost-предпроцессинга с определенной вероятностью. Ensemble probability для этого считался так: prob = 0.2pre_xgb_prob + 0.8cnn_prob.
Далее вероятности из двадцати соседних фреймов берутся как фичи для XGBoost модели: {prob(-10), prob(-9), …, prob(0), prob(1), …, prob(9)}, где prob(-10), что представляет собой вероятность появления одной и той же пары игроков на предыдущих 10 шагах.
Этот подход улучшил результат примерно на 0.005.
Player-Ground postprocessing
Для этой модели ensemble probability был таким:
prob = 0.15pre_xgb_prob + 0.85cnn_prob.
Для модели игрок-земля использовался примерно тот же подход, только ensemble probability был из тридцати соседних временных шагов: {prob(-15), prob(-14), …, prob(0), prob(1), …, prob(14)}.
Выход с предпроцессинга XGBoost (pre_xgb_prob) и нейронной сети cnn_prob из двадцати временных шагов. Этот подход улучшил предсказания игрок-земля на кросс-валидации (CV) и дал прирост к результату примерно на 0.04.
Выводы
Участие в подобных соревнованиях требует много времени и усилий, но это однозначно бесценный опыт. Однако, даже если вы не можете выделить время или пока не готовы побороться за призы на площадке Kaggle, всегда интересно посмотреть на решения других участников и взглянуть на решение одной и той же задачи под разным углом.
Так, анализируя методы детекции столкновения игроков в американском футболе мы узнали:
- какие существуют архитектуры и подходы для решения задачи с трекинг-данными и последовательностью изображений;
- что такое Метрика корреляции Мэтьюса и Forward Selection OOF Ensemble.
- как сдвиги кадров можно использовать в качестве метода аугментации данных;
- каким образом использование кодирования трекинг-данных в фиче мапы, позволяет конвертировать информацию о движении игроков в удобное представление для обучения CNN;
- о Test Time Augmentation (TTA) — подходе, повышающем качество распознавания модели при инференсе.
Ссылки
- Соревнование: 1st and Future — Player Contact Detection.
- Первое место (код).
- Второе место.
Интересный факт: хост соревнования Rob Mulla является kaggle grandmaster и ведет youtube канал по DS.
Разбор соревнования выполнен для DeepSchool. На Хабре публикуется в новой, отредактированной версии.