Перейти к содержанию

Отрасли· Давид Празян, CTO· 8 мин

Как мы учили нейросеть видеть удары в тхэквондо

Помощник судьи на обычных камерах: почему две модели вместо одной, как система разводит встречные удары в клинче и что пришлось делать с железом в зале.

Как мы учили нейросеть видеть удары в тхэквондо

С чего началось

С этого проекта у нас началось компьютерное зрение вообще. Это помощник судьи по тхэквондо: система смотрит поединок с нескольких камер и в реальном времени фиксирует, кто, чем и куда ударил.

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

Зачем судье помощник

Удар в тхэквондо длится доли секунды. Судья видит поединок под одним углом, решение принимает в моменте, а спортсмены постоянно перемещаются и закрывают друг друга. Отсюда спорные эпизоды, которые потом разбирают по видео, и претензии тренеров, уверенных, что их спортсмен попал, а балл не засчитали.

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

Начали с камер

Камеры поставили на штативы по углам зала, каждая смотрит на площадку со своей стороны. Если бойцы закрыли друг друга для одной камеры, с противоположного угла удар, скорее всего, виден.

Объективы широкоугольные, иначе всю площадку в кадр не уместить, поэтому по краям заметна бочкообразная дисторсия. Исправлять её перед подачей в модель не стали: бойцы большую часть времени находятся в центре кадра, где искажения минимальны, а лишнее преобразование каждого кадра съедает время, которого в реальном времени и так немного.

Зрителей и всех, кто попадает в кадр за пределами площадки, система размывает. Для задачи они бесполезны, а публиковать узнаваемые лица детей и родителей мы не хотим.

Кадр поединка с камеры в углу зала: рамки бойцов и подписи распознанных ударов

Что именно распознаём

Правила начисляют баллы по-разному в зависимости от того, чем нанесён удар и куда он пришёлся. Поэтому системе мало сказать «был удар». Ей нужно ответить на три вопроса: какой боец атаковал, какой частью тела и в какую зону соперника.

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

Одна модель или две

Можно обучить один детектор, который сразу находит удар и приписывает его бойцу. А можно разделить работу: одна модель ищет и ведёт бойцов, вторая ищет сам удар, после чего удар сопоставляется с ближайшим бойцом.

Одна модель быстрее и проще в эксплуатации, но ей приходится решать две задачи разного масштаба. Боец занимает большую часть кадра и виден постоянно, а удар - короткое событие в небольшой области: кулак у шлема, стопа у корпуса. Когда задачи смешаны, модель тянется к крупному и частому объекту и теряет как раз короткие события. Поэтому мы выбрали связку из двух моделей YOLO: отдельный детектор бойцов и отдельный детектор ударов. Каждая учится на своей задаче, и ошибки одной легче отлаживать, не трогая другую.

Самые неудобные кадры

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

Синий бьёт ногой в голову, красный в тот же момент отвечает рукой в голову. Нога синего перекрывает корпус красного, рамки ударов наполовину накладываются, и система всё равно разводит два события и приписывает каждое своему бойцу. Уверенность по удару ногой здесь ниже, около 89%: часть движения закрыта.

В клинче оба бойца наклонились и обмениваются ударами рукой в голову. Шлемы опущены почти до пояса, силуэты слились, и человеку со стороны трудно сразу сказать, кто кого ударил. Модель фиксирует оба удара с уверенностью около 95-96%.

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

Клинч: оба бойца наклонились, система фиксирует два встречных удара рукой в голову

Железо

Компьютер и камеры стоят у заказчика в зале, управляем ими удалённо. Чтобы две модели успевали обрабатывать несколько потоков в реальном времени, используем TensorRT: он оптимизирует модели под конкретную видеокарту и заметно ускоряет инференс. Работает он на Linux, и это сразу определило выбор системы. На Windows связка тоже запускается, но медленнее.

В какой-то момент на машине оказалась свежая Ubuntu 26, и всё, что работало, перестало работать: камеры держали связь около двух минут и отваливались, компьютер начал зависать. Часть пакетов, на которых стоит стек, новую версию системы ещё не поддерживала. Решение - откат на Ubuntu 24.

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

Итог

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

Связка «детектор объекта плюс детектор короткого события» переносится на производственную линию один в один: вместо бойца там оператор, вместо удара операция, которую нужно засечь и сопоставить с регламентом. Приписывание события участнику по экипировке работает так же, как проверка, в каске человек или без неё. А опыт с оптимизацией инференса и капризным железом пригодился в первом же промышленном пилоте.

Опыт наших клиентов

Мой проект - тематический сайт знакомств. Я оцениваю его как проект высокого уровня сложности: очень непросто найти разработчиков, которые могли бы его реализовать. Я работал с командой Глеба в течение более двух лет с перерывами, которые были связаны исключительно с моим финансовым состоянием. По итогу могу сказать, что вполне доволен проделанной работой. Ребята знают своё дело, с хорошей коммуникабельностью, и всегда помогут советом. В данный момент вся основная работа сделана, сайт находится в рабочем состоянии и набирает пользователей. Есть идеи по добавлению новых функций, и если я решусь на это, то буду реализовывать их и дальше с этой командой.

Роман
Владелец проекта,
проект под NDA

Команда Глеба была профессиональной, оперативно реагировали на любые возникающие вопросы и шли навстречу в рабочих моментах. В ходе работы с командой были реализованы части и компоненты масштабного сервиса AI LMS платформы.

ООО «ИОК «Интеллект+»
Заказчик,
AI LMS платформа

Мы разрабатывали несколько сервисов, часть из них запускалась в формате MVP: в частности, автоматизировали обработку запросов корпоративных заказчиков на аренду спортивных площадок. Команда проекта была на связи, и мы активно двигались по нашим требованиям. Достаточно оперативно реализовали и запустили продукт. Спасибо команде!

Александр Меркулов
Заказчик,
сервисы аренды спортивных площадок

Обращались в YAVVI за доработками нашего сайта pakpakych.ru. Стек у нас не самый простой: Django, GarpixCMS и React SPA. До этого несколько подрядчиков ограничивались общими рекомендациями «в вакууме». Ребята зашли иначе: сначала провели полноценный технический аудит, разобрали каждый из 26 пунктов нашего ТЗ и по каждому написали, что уже реализовано, чего нет и почему. Отдельно ценно, что не стали продавать нам лишние работы, а честно указали, где функционал в проекте уже есть и где два пункта дублируют друг друга. По ходу аудита нашли критичную проблему, о которой мы не подозревали, и одна эта находка окупила всю работу. По каждой задаче была вилка часов и тип работ, никаких «примерно месяц», всё проверялось руками и подтверждалось инструментами. Каждая доработка выведена в админку, это принципиально: мы получили не разовый результат, а инструмент, плюс обучение нашей команды. Рекомендую тем, у кого нетиповой стек и нужен подрядчик, который сначала разберётся, а потом делает. Продолжаем сотрудничество.

Никита
Заказчик,
pakpakych.ru

Обсудим вашузадачу

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

Связаться с нами

  • Свяжемся в течение дня
  • Подпишем NDA до обсуждения данных
  • Удобнее в мессенджере? Напишите в Telegram