Предыдущая часть статьи - тут
В следующие несколько дней я провёл множество экспериментов, варьируя количество слоёв нейросети, изменяя её структуру, набирая всё новые и новые данные для обучения. Я шагал, крутил головой туда-сюда (одновременно кликая на нужные кнопки Моушн Контроллера), обучал нейросеть, переносил данные сети в #UE4 (копировать / вставить / копировать / вставить – ох!). Я тестировал сеть, определял, на каких именно движениях нейросеть ошибается, набирал обучающие данные именно на этих движениях, дополнял обучающую выборку и опять обучал нейросеть. Это был действительно кропотливый и долгий процесс. Однако, с каждым разом нейросеть работала всё лучше и лучше.
Трудно сказать, как много раз я переобучал нейросеть и как много раз вносил изменения в её структуру. В какой-то момент, однако, я понял, что нейросеть практически перестала ошибаться, по крайней мере до тех пор, пока я двигался естественно и не пытался намеренно её «обмануть». Компонент был готов. Протестировав работу Компонента на своих коллегах по работе, я понял, что людям нравится то, как он работает.
Уже после добавления компонента в Unreal Marketplace ко мне обратился один из покупателей, указавший мне на то, что нейросеть постоянно ошибается, если сделать головой чётко определённое движение. Интересно то, что это было практически единственное движение на котором нейросеть постоянно ошибалась. Мне захотелось решить эту проблему. Однако, я очень боялся испортить уже готовый проект. И я подумал – хэй, а может быть добавить специальную (совсем-совсем простую!) нейросеть, которая будет распознавать именно те случаи, когда базовая нейросеть ошибается, и вносить корректировки в результат?
По началу идея показалась мне странной. Но чем больше я думал, тем больше идея мне нравилась. Напоминаю вам, я ленивый человек и не люблю много думать и выполнять лишнюю работу! Поэтому, я решил попробовать.
Я переработал Блупринт в #UnrealEngine так, чтобы можно было выводить в лог параметры движения шлема уже постфактум. Иными словами, я мог тестировать основную нейросеть, и если я замечал, что базовая нейросеть ошиблась, я нажимал на кнопку контроллера, и в лог попадали именно те параметры на которых произошла ошибка. Сделав простую дополнительную нейросеть, обучив её и заставив работать параллельно с первой сетью, я смог добиться существенного уменьшения частоты ложных срабатываний компонента.
Как видите, #нейросети – это просто (даже, если вы никогда профессионально не занимались этим) и весело. Особенно в сочетании с Unreal Engine.
Надеюсь, прочтение данной статьи разожгло вашу фантазию и вдохновило на эксперименты с нейросетями. Как минимум, помните о том, что в вашем арсенале всегда может появится подобный инструмент.
Компонент, описанный мною в данной статье, а также некоторые другие мои проекты, вы можете найти в магазине Анрил Маркетплейс.
Если вы увлекаетесь UE4 - подписывайтесь на мой канал Дзен. У меня есть бесплатный контент, информацию о нём я буду выкладывать здесь.