Мы уже рассказывали о нашем инструменте автопозинга в программе Cascadeur, но есть еще несколько интересных деталей, которыми мы хотели бы поделиться. В частности мы не говорили о том, как именно комбинируем работу нескольких нейросетей в одном инструменте.
В этой статье будет рассмотрен подход, позволивший нам реализовать достаточно продвинутый функционал, используя лишь стандартные deep learning методы.
Постановка задачи
Мы хотим дать пользователю возможность ставить позы быстро. Он может управлять позициями интересующих его точек, а инструмент будет выставлять по ним позиции остальных точек, сохраняя позу реалистичной.
Использование полносвязных нейросетей предполагает фиксированные вход и выход, поэтому мы сделали несколько нейросетей с разным количеством входных точек: 6, 15, 20, 28 точек из всех 43 точек персонажа. На картинке ниже в зеленый окрашены те точки, которые подаются на вход нейросети соответствующего уровня детализации.
В чем же проблема использования уровней детализации? Если мы хотим подвинуть точку из 4-го уровня, то нам нужно подать на вход все 28 точек. Но мы не хотим заставлять пользователя ставить их все. Наша цель — дать ему возможность подвинуть только несколько из них. Как в таком случае добиться хорошего результата? Наше решение предполагает вложенность входных данных, комбинирование результатов и использование физической модели.
Вложенность входных данных
Мы выбрали такие уровни детализации, которые имеют особое свойство иерархической вложенности.
Множество входных точек нейросети каждого уровня содержит в себе все точки с предыдущего уровня и добавляет к ним несколько новых. Это позволяет нам использовать выходные данные с одной сети как входные для следующей.
Комбинирование результатов
Давайте рассмотрим работу инструмента на примере: пользователь расставил все 6 основных точек и решил отредактировать ориентацию левой кисти за счет дополнительных точек кисти со второго уровня детализации.
Как только вы меняете еще одну точку, кроме основных 6, инструмент запоминает ее и начинает использовать в вычислении позиции других точек. Работа инструмента происходит в несколько этапов в зависимости от отредактированных точек. В данном случае весь процесс схематично изображен на картинке ниже.
Сперва используется сеть первого уровня — она выставляет все 43 точки персонажа по 6 основным. Затем по очереди вызываются сети более детальных уровней. Каждая последующая принимает на вход все более детальные входные данные — либо уточненные пользователем, либо из результата работы предыдущего уровня. Таким образом мы получаем возможность использовать нескольких нейросетей с разной детализацией одновременно.
Физическая корректность
Поскольку модели машинного обучения несовершенны, а наша нейросеть предсказывает глобальные позиции точек, итоговая поза будет иметь ошибку в длине ребер. Это исправляется с помощью итеративного физического процесса, который и восстанавливает длину ребер. Если снизить количество итераций в настройках программы, то можно сразу увидеть, как это влияет на финальный результат.
Этот процесс вызывается после работы каждого из уровней, чтобы не допустить ситуации, когда на вход нейросети подаются точки из некорректной позы.
Заключение и планы
Итак, созданный нами инструмент доказал свою пользу на практике. Он помогает нам при создании анимации уже на самом первом этапе, когда необходимо видеть приблизительные позы. В будущем мы планируем добавить поддержку пользовательских гуманоидных скелетов, а также сделать инструмент более точным и устойчивым.
Также мы исследуем возможности, которые дарят нам более универсальные deep learning подходы. Например, уже сегодня можно восстанавливать части фотографий с заданными характеристиками, а также переносить стиль и другие характеристики между изображениями. В будущем мы могли бы использовать этот метод и при создании анимации, например, чтобы добавить в нее или же в позу желаемые характеристики.
Мы продолжаем развивать наш инструмент автопозинга. Уже в ближайшее время Cascadeur войдет в стадию открытого бета-теста. Обязательно следите за новостями на cascadeur.com и в социальных сетях проекта.
Узнать больше о Cascadeur и других проектах студии Banzai Games:
Почему 12 принципов Диснея недостаточно
Cascadeur: задача о падающей кошке
Физика в Unity-проекте на примере мобильного файтинга
Cascadeur: будущее игровой анимации
Искусственный интеллект в файтинге Shadow Fight 3
В команду Banzai Games требуется Qt GUI программист. Подробнее о вакансии можно прочитать здесь.