Машинное обучение в горнолыжном спорте +18




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

Изначально гипотеза об указанных возможностях свелась к следующему набору требований:

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

Для начальной проверки этой гипотезы мы решили обучить искусственную нейронную сеть (далее ИНС) для распознавания простейших фаз траектории движения спортсмена-горнолыжника.

Этапы работ определили так:

1. Сбор данных.
2. Подготовка данных для обучения.
3. Тренировка сети по распознаванию целых поворотов.
4. Тренировка сети по распознаванию фаз поворотов.
5. Разработка сервиса для пользователей по работе с получившейся системой.

Сбор данных. Motion Capture


Какие данные собирать? Как их получить?

Показателей, которые характеризуют активность спортсмена во время спуска и которые можно измерить, достаточно много, начиная от профиля давления стопы на горнолыжный ботинок (именно с этих незаметных движений и начинается всё управление движением), и заканчивая направлением взгляда (чем на более далекие от спортсмена ворота он смотрит, тем выше шанс построения оптимальной траектории). Для начала, мы решили остановиться исключительно на захвате движений (Motion Capture – MoCap), то есть получить скелетную модель движения сегментов тела, так как данный подход наиболее широко описывает физику процесса.

Захват движений производили с помощью решения (MVN Biomech ) компании Xsens,
которое представляет из себя нейлоновый комбинезон с устанавливаемыми инерционными датчиками (IMU). По своим характеристикам костюм отдаленно напоминает стандартную спортивную экипировку — «спусковой костюм», что позволяет спортсмену, с некоторыми ограничениями, просто одеть его под обычную экипировку.

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

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


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

Система MoCap записывает движение фреймами, проще говоря кадрами, в каждом из которых мы имеем описание положения тела по 23 сегментам, каждый из которых, в свою очередь, определен своим кватернионом (объект линейной алгебры, с помощью которого описываются твердотельные вращения; является аналогом углов Эйлера, но проще с точки зрения операций). Каждый кватернион описывает вращение сегмента тела относительно исходного положения в глобальном пространстве. Фреймы пишутся с частотой 240Hz, что позволяет ловить достаточно быстрые движения, например, отбивку кисти в момент укола палкой.

Теперь, непосредственно, что касается подготовки.

Для начала берем и оставляем только сами проезды, выкидывая всё, что происходит между (подъемы на бугеле, ожидание и т.д.). Как итог — из десяти тренировок, пригодных для работы (было много брака из-за установки датчиков и их последующего смещения), оказались пять. В среднем на каждой тренировке записывалось двадцать проездов, полезное время каждого из которых составляет тридцать секунд. Итого получаем 5 тренировок * 20 проездов * 30 секунд * 240 Hz = 720 000 фреймов; ну или если идти дальше 720 000 фреймов * 23 сегмента * 4 вещественных числа в кватернионе = около 66 миллионов вещественных чисел. Звучит, как будто этого достаточно.

Далее, необходимо вручную разметить данные для обучения — объяснить нейросети что конкретно она должна узнавать. А целью было научить её узнавать сначала полные повороты, а затем их фазы. Для этого просматривалась визуализация движений и показатели ключевых сегментов (в нашем случае стопы, голень) и на временной шкале ставились метки начала и окончания соответствующих элементов. Таким образом, по совокупности всех записей мы получили порядка 3 500 поворотов, или 10 500 фаз.

Последним, что предстояло сделать при подготовке — привести углы поворотов сегментов из глобальных в локальные углы соединений сегментов. У биомеханической модели есть четкая иерархия сочленений сегментов, по которой и идет все построение из сырых данных. Необходимо было для каждого сегмента, кроме корневого, получить кватернион угла соединения для этого элемента. Корневым сегментом в этой иерархии является таз. Очевидно, что, зная по цепочке повороты сегментов и их длины (а эти данные есть, так как для каждого спортсмена записывается антропометрический профиль), можно восстановить всю биомеханическую модель. Оставалось выполнить для таза нормализация по азимуту в глобальном пространстве, и были получили данные, не зависящие от ориентации спортсмена в пространстве.

Качество данных


Анализ качества первичных данных проводился с помощью пакетов Python: Jupyter, NumPy, MatPlotLib и TensorFlow.

Тут стоит остановиться на двух существенных моментах.

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

1. Графики изменений кватернионов углов соединений сегментов при выполнении правого поворот

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

Второй существенный момент — знаковая неустойчивости компонент кватерниона. Что это такое? Один и тот же поворот на их языке может быть описан двумя разными наборами из четырех чисел. Например, один и тот же поворот вокруг оси X на 180 и вокруг оси Y на 90 может быть одинаково точно представлен следующими кватернионами: (0,0.7,0,0.7) и (0,-0.7,0,-0.7).


2. Различное представление вращение кватернионами

Почему это важно? Дело в том, что без отдельных массивов данных по разным проездам одни и те же повороты могут иметь знаковую инверсию по отдельным компонентам. Забегая вперед, отметим, что и нейронная сеть будет изначально воспринимать их как разные ситуации. А в пространстве и времени эта инверсия происходит абсолютно спонтанно.


3. Пример знаковой неустойчивости входных данных

Для одного из заездов на этом рисунке графики изменения кватерниона таза спортсмена в правом повороте выделены желтым, для другого — белым. Значения эквивалентны и отображают одинаковые углы, но в силу свойств кватернионов могут иметь противоположные знаки компонент. То, как удалось справиться с этой особенностью, расскажем чуть ниже.

Тренировка сети на определение целых поворотов


Немного матчасти по горнолыжной дисциплине:записывались данные слаломных поворотов (слалом — наименее скоростная из горнолыжных дисциплин, для которой характерны повороты малого радиуса, близко расставленные ворота и, как следствие, большая частота поворотов), средняя продолжительность которых составляла от 0.9 до +- 0.1 секунды. Для начала очень кстати пришелся тот факт, что самый медленный и самый быстрый повороты в наших данных по продолжительности отличались менее чем в два раза.

Для создания прототипа системы распознавания целых поворотов мы, используя пакет TensorFlow, создали и обучили сеть MLP (многослойный персептрон) с двумя скрытыми слоями в 256 нейронов (граф сети — на рисунке 3). Выборка данных для обучения и распознавания поворота выполнялась методом скользящего окна с размером, превышающим наибольшую известную продолжительность целого поворота. Сеть обучалась узнавать попадание целого поворота в окно данных. Скольжение окна обеспечивало распознавание начала и конца поворота.


4. Граф обученной сети MLPс двумя скрытыми слоями в 256 нейронов.

Стоит немного остановиться на том, как на этом этапе мы решали проблемы подготовки данных, описанные выше. Для этой достаточно тривиальной задачи подход и к проблемам «шумных сегментов», и знаковой неустойчивости кватернионов был единый — просто выкидываем. Объемов данных было достаточно, чтобы просто не обучать сеть не только на шумных сегментах, но и на данных, где кватернионы были инвертированными.

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

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


5. Обучаемость сети.

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

Тренируем сеть на фазы поворотов


Теперь настало время перейти к фазам поворотов. И опять немного матчасти.

В простейшем случае можно выделить три фазы:

1. Вход в поворот (характеризуется быстрым ростом угла закантовки лыж и в целом высокими первыми и вторыми производными практически по всем относительным положениям сегментов. Проще говоря, лыжник очень быстро из относительно прямого положения переходит в состояние «заложился в поворот»: колени согнуты, таз сильно вынесен в сторону поворота, ярко выражена разножка). Средняя протяженность — 0,25 секунды.

2. Удержание в повороте (фаза в которой лыжник удерживает сформированное в первой фазе положение тела, естественно с некоторыми флуктуациями. То есть сперва мы изготовились, а теперь совершаем основную дугу. Это соответствует промежутку между флагами. На языке биомеханических показателей это выглядит как колебания около нулевых отметок относительных ускорений и скоростей). Средняя протяженность — 0,4 секунды.

3. Выход из поворота (Эта фаза зеркала первой, в ней происходит стремительный возврат из “глубоко заложенного” в прямое состояние, так же, как и первой фазе мы видим взрывной рост относительных скоростей и ускорений, естественно с противоположными данными). Средняя протяженность — 0,25 секунды.

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


6. Оценка разброса длины фаз.

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

Соответственно, было решено перейти от MLP-сети к сети типа RNN/LSTM.


7. Граф «натренированной» RNN/LSTM-сети

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

При загрузке оригинальных наборов данных создавались искусственные наборы, повторяющие данные оригинальных, но имеющие знаковую инверсию параметров кватернионов в случайно выбранном сегменте, которые и «скармливались» сети, доучивая ее искусственными аномалиями. Объем данных вырос, и ИНС научилась понимать, что данные могут иногда врать, но при этом говорят о том же самом. В итоге она научилась распознавать фазы движений независимо от знака компонент кватерниона.

А дальше — дело техники, и в результате была получена качественно натренированная сеть, то есть дающая на новых данных хорошую точность распознавания. Ниже приведен ее граф и результаты распознавания фаз.



8. Результат распознавания фаз в заезде №6. Ступеньками показаны известные типы фаз: вход, максимальная загрузка и выход из поворота. Насыщенными цветами обозначена контрольная разметка, бледными — результаты распознавания. Зеленым выделены левые повороты, синим — правые. Результат распознавания не подвергался дополнительной фильтрации или постобработке.

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

Интерфейс для пользователя


Для того, чтобы придать решению пользовательский вид решили создать сервис, который позволит делать следующее:

1. Отправить на сервис биомеханическую запись слаломного проезда, в том числе в виде потока данных реального времени
2. Получить в ответ разметку (аннотированную запись)
3. Просмотреть проезд в рендере горнолыжника с визуализацией разметки фазами

Ниже приведена схема сервиса:

9. Сервисы системы для потоковой разметки фаз

Его главные компоненты — сеть RNN/LSTM, сетевой сервис потоковой разметки, сервер воспроизведения и рабочее место анализа фаз, выполненное в виде веб-приложения.

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

Что дальше?


Цель текущего года — система способная классифицировать и оценивать, начиная с поведения отдельного сегмента тела в контексте фазы (возможно более детального чем в описании выше), и далее с повышением степени обобщения: поворот, связка, трасса, уровень катания в целом. Главное же, мы планирует построить на всех указанных элементах метрики качества.

Заключение


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

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

Ждём ваших отзывов!
-->


К сожалению, не доступен сервер mySQL