Найти в Дзене

Нейросети и UE4. Распознаём шаги в VR. Часть 1 – идея и проверка гипотезы.

Одним из самых ярких впечатлений при первом использовании #VR для меня стало отсутствие в VR-пространстве ног. Возможно, вы тоже помните это странное ощущение. Позже, пробуя различные VR проекты я осознал, что невозможность отслеживать положение ног пользователя в VR приводит к тому, что движение пользователя в VR пространстве происходит совершенно бесшумно – в отличие от классических не-VR игр. После осознания этого факта я задался вопросом, можно ли как-то на основе одного лишь движения HMD-устройства в пространстве распознать тот самый момент, когда пользователь делает шаг в реальности? Я размышлял над этой задачей некоторое время и пришел к выводу, что сначала нужно собрать данные о скоростях и ускорениях шлема в пространстве и провести детальный анализ этих данных, чтобы понять, как составить правильный алгоритм распознавания шагов. Но так уж случилось, что я очень ленивый человек и мне не хотелось заниматься анализом всех этих данных. И я уже думал забросить эту идею, но… В то вр

Одним из самых ярких впечатлений при первом использовании #VR для меня стало отсутствие в VR-пространстве ног. Возможно, вы тоже помните это странное ощущение. Позже, пробуя различные VR проекты я осознал, что невозможность отслеживать положение ног пользователя в VR приводит к тому, что движение пользователя в VR пространстве происходит совершенно бесшумно – в отличие от классических не-VR игр.

После осознания этого факта я задался вопросом, можно ли как-то на основе одного лишь движения HMD-устройства в пространстве распознать тот самый момент, когда пользователь делает шаг в реальности? Я размышлял над этой задачей некоторое время и пришел к выводу, что сначала нужно собрать данные о скоростях и ускорениях шлема в пространстве и провести детальный анализ этих данных, чтобы понять, как составить правильный алгоритм распознавания шагов. Но так уж случилось, что я очень ленивый человек и мне не хотелось заниматься анализом всех этих данных. И я уже думал забросить эту идею, но…

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

Базовая идея работы будущего компонента
Базовая идея работы будущего компонента

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

Сразу же встал вопрос о том откуда взять данные для обучения нейросети. Решение было простым. Я использовал возможности логгирования в #UnrealEngine для того, чтобы при нажатии на одну из кнопок Моушн Контроллера выводить в лог строку с линейными и угловыми скоростями и ускорениями HMD-устройства в пространстве. Одновременно с этим в конце строки выводился дополнительный параметр, определяющий то, был ли в реальности совершен шаг или нет (в зависимости от того, какая кнопка Моушн Контроллера была нажата).

Скрипт для сбора данных в лог Unreal Engine
Скрипт для сбора данных в лог Unreal Engine

Как я собирал данные? Я запускал Unreal Engine в VR и производил разные действия – крутил головой, наклонялся, приседал (без шагов), либо делал то же самое, но с шагами. Одновременно с этими действиями я нажимал одну из кнопок на Моушн Контроллере, чтобы все данные записывались в лог.

В результате я получил множество данных, которые после простейшей обработки в Excel, я импортировал в Membrain. В документации приложения Membrain сразу говорилось о том, что входные данные нейросети должны быть нормализованы к 1. Это условие я учёл при обработке данных в Excel, подобрав под каждый параметр такой умножающий коэффициент, который бы гарантировал, что при самой максимальной величине каждого параметра он будет близок к 1. Иными словами, для каждого из параметров я нашел максимальное значение и разделил все значения этого параметра на это максимальное значение. Позже, я добавил соответствующие коэффициенты в Блупринт #UE4, чтобы больше не заниматься этим вручную

Собранные данные в Excel
Собранные данные в Excel

Следующим этапом стало построение нейросети, которая бы принимала на входе данные о движении HMD-устройства в пространстве, а на выходе выдавала бы лишь 2 возможных значения 0 (если шага не было) или 1 (если шаг был). Уже в тот момент я держал в голове мысль о том, что если эксперимент будет успешен, я перенесу эту нейросеть в UE в виде скрипта Блупринт. Я не являюсь специалистом по нейросетям, поэтому решил использовать нейросеть с простейшей структурой, которую чаще всего изображают на картинках в Интернет.

Нейросеть в Мембрейн
Нейросеть в Мембрейн

Итак, я создал простую нейросеть в приложении Membrain. Загрузил в приложение набор уроков (для этого пришлось использовать небольшой скрипт) и, затаив дыхание, нажал на кнопку начала обучения нейросети.

Что из этого вышло?

Читайте вторую часть статьи - тут!

Но перед этим, если вы работаете с UE4, можете воспользоваться рекламной паузой и присмотреться к моим товарам на площадке UE Marketplace...