Выполнил Бухаров В.Г.
Бизнес цель: В последние годы мы наблюдаем интересную тенденцию: люди всё чаще тренируются у себя дома. Занятия с тренером в спортзале уходят в прошлое, и на смену им приходит новая реальность, в которой люди занимаются спортом, глядя в монитор.
Но если рядом нет тренера, кто же подскажет, правильно ли выполняется то или иное упражнение?
Специально для таких случаев мы хотим создать виртуального коуча, который поможет людям выполнять физические упражнения без вреда здоровью.
С помощью нашего приложения пользователь сможет удостовериться в правильности и эффективности действий, просто загрузив видео со своей тренировкой. Приложение сравнит его движения с движениями тренера и даст рекомендации.
Техническая цель: Разработать модель машинного обучения способную распознавать позу человека на видео и сравнивать ее сходство с эталонной, для последующего сипользования в приложении виртуального тренера
Задачи:
- Построение каркаса позы через ключевые точки.
- Оценка сходства поз по фотографии.
- Валидация оценки позы на видео.
- Создание готовой к использованию в продакшене модели
Проект выполнен в 3-х ноутбуках:
- Ноутбук №1 содержит выполнение 1 и 2-й задачи
- Ноутбук №2 содержит выполнение 3-й задачи
- Ноутбук №3 содержит выполнение 4й задачи
Репозиторий содержит следующие катологи:
- Result_images - содержит изображения, отражающие результаты на разных этапах работы
- Sample_images - содержит изображения использованные в процессе работы
- Modules - содержит файлы с кодом созданных модулей и скрипт main.py
- Notebooks - содержит ноутбуки с ходом выполнения работы
К сожалению в ноутбуках в гитхабе не отображаются видео, для просмотра можно открыть их в колабе:
ноутбук 1
ноутбук 2
ноутбук 3
В качестве основы взятапредобученная модель KeypointRCNN на базе ResNet50 из пакета torchvision Подготовлено преобразование изображений Отрисованы ключевые точки и каркас тела человека по ключевым точкам
Результат выполнения задачи №1
Были произведены преобразования поз в 3 этапа:
Фигуры смещены в начало координат с центром на пересечении диагоналей туловища,
Совершены поворот и масштабирование. Для того чтобы разные вектора разнести в разные четверти системы координат. Кроме того масштабирование поворот и перенос также необходимы для сравнения методом евклидова расстояния.
Матрицы использованные для поворота:
и масштабирования:
где scale - коэффициент масштабирования
Было проведено преобразование векторов конечностей с транспонированием вектора каждой части конечности в начало координат. Также для оценки тела и головы были возведены в степень коэффициента для придания веса даже небольшим изменениям, и усреднены по точкам, чтобы при анализе было представлено только две оценки – одна для головы и одна для тела
Была произведена оценка схожести поз методами косинусной близости и взвешеного расстояния. Обе метриуи показали достаточные различия между оценками похожих и не похожих поз (коминусная близость - после дополнительного преобразования). В качестве основной метрики для дальнейшей работы была взята косинусная близость т.к. отличие от взвешенного расстояния - ее легко интерпретировать - так оценка в 1 - означает совпадение, оценка в 0 - вектора перпендикулярны друг другу, а оценка в -1 означает, что вектора ровно противоположны друг другу.
Для выполнения этой задачи был разработан класс модели, который загружает все кадры видео, детектирует на них ключевые точки, производит их трансформацию, и затем может производит покадровое сравнение поз, с выводом числовых метрик и видео с показанными на нем ключевыми точками разных цветов и размеров в зависимости от значения косинусной близости.
Пример работы модели по сравнению видео:
На 4 этапе создан модуль с моделью для продакшена, и протестирована его работа.
Удалось реализовать все задачи и подготовить модель сравнения движений человека с референсным видео и отображение результатов на видео, для демонстрации тренирующемуся человеку того, какие именно части тела в какой момент времени он поставил не так как на референсном видео.
В качестве дальнейших улучшений, можно произвести оценку скорости движений и выровнять ее, а также автоматически определять момент начала движений на видео, для лучшей синхронизации оценки.