Comments 27
Рад, что было интересно! С точки зрения моделей хотим задействовать подходы, более полно использующие то, что мы всё-таки работаем с видео. Текущие системы опираются на изображения, а видео используют уже для пост-обработки или трекинга. При этом сама модель ничего о видео не знает.
С точки зрения “интеграций” — улучшение работы моделек для Android и Web — бесконечный потенциал для роста :)
С точки зрения бизнеса мы начинаем гораздо больше смотреть и развивать аналитику того, как пользователи взаимодействуют с приложением внутри занятий. А т.к у нас серьёзный акцент на privacy, это не всегда просто.
Ну и активно расширяем команду. Если интересно поработать с нами, пишите :)
Для обучения мы используем pytorch. Для деплоя модельки конвертируются в нужные форматы для каждой из платформ — на iOS это CoreML, на Android tflite, в вебе — tfjs.
На следующем уровне (который и отвечает за все пре- и пост- процессинги) на iOS самописный мини-фреймворк на Swift, на Android — MediaPipe + Kotlin. Части пайплайна переиспользуются с помощью Kotlin Multiplatform (Kotlin Native + Kotlin JS).
Конвертация часто бывает связана с определёнными приключениями, поэтому после неё мы проверяем, что результаты, которые выдаёт моделька до и после конвертации, совпадают, а также тестируем полные пайплайны.
Различия платформ — отдельная очень интересная тема, думаю о ней ещё расскажем.
Занимаюсь йогой 5 лет.
Тоже думал что поза «Собака мордой вниз» это просто встать горкой. Хрен там.
Немногие умеют делать ее правильно.
Как вы можете отследить положение лопаток, прокручивание мышц бедра внутрь или локтя наружу? Да и положение таза сбоку не отследить.
Ваше приложение может помочь встать «примерно как надо», но с точной отстройкой оно не поможет.
Так вот, наш тренер 99% времени не закрывает рот, и проговаривает все телодвижения вслух, которые ОЧЕНЬ помогают выстроить позу. Типа — встать на тыльную сторону стопы, ТБС развернуть наружу, седалищные к спине, подтянуть диафрагму, вытянуть затылок к горизонту. Это очень помогает.
Если в вашей программе к каждой позе добавить такие рекомендации, то может получится что-то очень интересное.
Типа — научим макушечному усилию за 5 занятий
А реально — что делать с 30 летним искривлением позвоночника?
Или как почувствовать ци? Как меня учил хирург с 20 летним стажем — книги — это общие руководства и воспринимать их как истину — большая глупость
Увы, все как один уверяют, что при кривой спине прохождение ци (праны и пр.) затруднительно. Если искривлена спина, то и энергетические каналы тоже.
А в случае большой раскачки ци можно вообще нанести себе вред.
Тогда уж лучше не энергиями заниматься, а накапливать благие заслуги для будущей жизни.
1) У вас есть свой датасет
2) Вы берете из него подмножество для тестирования
3) Сравниваете модель которая не видела вашего датасета с моделью которая обучалась на нем на вашем же подмножестве?
4) + на конвертации наверное тоже вы себе очков добираете
Или все-таки вы прогнали модельку используемую mediapipe через ваш датасет?
Дообучить модель из MediaPipe (BlazePose) на наших данных, к сожалению, невозможно, т.к авторы не предоставили код обучения.
Проблема неоднозначности разметки очень интересная, как со стороны того, что это не очень хорошо и для обучения модели, и для подсчёта метрик качества. Используемая в COCO метрика OKS справляется тем, что для разных точек использует разные допустимые погрешности — они самые маленькие для глаз, носа, и самые большие для плеч, коленей и т.д — это скорее иллюстрация того, что да, проблема есть :)
С точки зрения обучения мне вспомнилась работа LAB — в ней авторы предложили переразмечать неоднозначно размеченные точки с помощью знаний об «устройстве» лица.
К сожалению, найти документы для разметчиков открытых баз мне не удалось. У нас процесс разработки правил разметки шёл итеративно, и, честно говоря, подхода «поставить на глазок в центр плеча» было достаточно при большом количестве данных. Способ «на глазок» можно улучшить с помощью инструментов — например, производить разметку не установкой точки, а рисовать окружность, которая своими краями касается границ конечности. Подобный подход используется в разметке MPII-TRB. В целом для того, чтобы разметка была более консистентной, мы ведём документ, в котором указаны общие правила и особые спорные случаи. Если хотите более подробно изучить то, какие схемы разметки существуют, рекомендую посмотреть на список датасетов в mmpose.
Ну не только нейросетями скелет можно распознать, не упомянут, например, http://ipisoft.com
А как модель реагирует на разную одежду? Помимо обтягивающих лосин (а ля лулулемон) и открытых рук, шеи и т.д. в йоговской среде относительно распространены всякие мешковатые вещи типа этнических дроп-кротч штанов и прочего такого. Или вы выдаёте рекомендации что носить для корректной работы?
Модель реагирует так, как реагировал бы человек, который размечает такую картинку :) Если говорить именно о нашем случае — то особых проблем в работе с такой одеждой мы не замечали, т.к в данных такая одежда встречается.
В целом насчёт одежды очень хорошо выполняется правильно — что легко человеку, легко и машине. Например, часто встречающаяся проблема с чёрными леггинсами: из-за того, что человеку при разметке бывает тяжело определить, какая нога правая, а какая левая, эта неуверенность переносится и на модель (последняя гифка в статье как раз об этом)
Эта тема мне очень интересна, но буду краток. Когда мы выбирали между хорошо изученным и работающим 2D и более «исследовательским» 3D, то решили за 3D не браться по таким соображениям:
- Для «точного» 3D необходимо дополнительное оборудование, а нашей целью были минимальные ограничения по оборудованию. Для живого примера использования depth-камеры можно посмотреть на www.onyx.fit (которых не так давно купили)
- Без дополнительного оборудования получить 3D estimation — крайне нетривиальная задача, которую сложно назвать решённой. Здесь думаю самым успешным можно назвать www.arielai.com — авторов DensePose, которых купил Snap. Такие решения связаны с на порядки более сложной разметкой данных, либо непростыми попытками оценить положение тела человека с помощью «лифтинга» из 2D в 3D. Думаю такие решения неплохо сработают для «обычного» фитнеса или развлекательных приложений, но для йоги, которая практически целиком состоит из особых случаев, вряд ли будет выдавать что-то более полезное, чем 2D.
В недавнем обновлении MediaPipe добавили 3ю координату для поз, здесь можно посмотреть, как это работает (глубина подсвечивается цветом)
Йога глазами дата-сайентиста: как мы строили computer vision в мобильном приложении