Автор: Антон Броиловский Редактура: Александр Гончаренко

А вы думали в детстве об оживлении своих рисунков? Наш автор Антон - да! Но мог разве что рисовать много-много похожих изображений в углу листа, а потом быстро пролистывать тетрадку. А недавно исследователи воплотили мысль в реальность и нашли другой способ оживления рисунков — метод анимации детских персонажей. В статье мы расскажем:

Оживляем детские рисунки

Анимировать персонажа по фотографии не так уж и просто, поэтому авторы разделили весь процесс на отдельные этапы:

  1. Детекция персонажа;
  2. Сегментация персонажа;
  3. Определение положения тела персонажа в пространстве;
  4. Анимирование движений персонажа.

Общий пайплайн выглядит примерно так:

Рисунок 1. Общий пайплайн от фотографии рисунка до анимации персонажа.

Рисунок 1. Общий пайплайн от фотографии рисунка до анимации персонажа.

На каждом этапе реализации анимации авторы брали за основу предобученные модели. Однако все модели из коробки не работали и их нужно было “дообучить”. Но как это сделать, если никто раньше не решал такую задачу и подходящих данных нигде нет? Создать демо — сайт с возможностью для каждого человека загружать свои рисунки. Так и поступают авторы, а еще они сообщают об этой новости в твиттере. Им удается собрать 6.7 миллионов фоток! Правда, после очистки и ручной обработки их остается 178 тысяч. О датасете мы еще скажем подробней чуть позже, а пока давайте перейдем к самим этапам метода анимации детских персонажей.

Детекция персонажа

На этом этапе мы находим границы персонажа, то есть определяем bounding box вокруг нарисованной фигурки. Так мы упрощаем работу следующим моделям: на рисунках часто есть посторонние элементы (типа деревьев, домиков и других), которые мы не будем оживлять (нас интересует только персонаж). Отметим также, что иногда на исходной фотографии в кадр может попасть что-то кроме самого рисунка, например, волосы девочки на рисунке 1.

Для поиска персонажа авторы использовали Mask R-CNN, предобученный на датасете MS-COCO с ResNet-50+FPN в качестве бекбона. А для “дообучения” модели авторы заморозили все веса у ResNet-50 и добавили один бинарный выходной слой, показывающий наличие персонажа в конкретном пикселе. На рисунке 2 мы видим разницу между тем, что у нас есть до и после обучения:

Рисунок 2. Примеры предсказаний модели до (слева) и после (справа) ее “дообучения”

Рисунок 2. Примеры предсказаний модели до (слева) и после (справа) ее “дообучения”

Для определения качества моделей авторы используют следующую формулировку: “процент предсказаний модели, которые могут быть успешно использованы для анимации”. Именно это мы будем подразумевать под “качеством” во всей статье.

Качество модели определения границ, после “дообучения” на 2000 картинках составило 92.5% (против 0.4% до “дообучения”).

Сегментация персонажа

Мы нашли персонажа, и теперь его нужно отделить от фона (мы же хотим, чтобы двигался только персонаж). Но модели это сделать трудно. Авторы долго пытались обучить Mask R-CNN, однако у них не получилось добиться хорошего результата. Причина: детские рисунки содержат очень мало текстур и цветов и часто состоят только из линий, которые бывает сложно отличить от окружения, а вариативное освещение и плохое качество снимков еще больше ухудшают ситуацию. В итоге для получения маски персонажа, покрывающей его тело и не включающей элементы заднего фона, решили использовать классическое компьютерное зрение. Авторы предложили такой пайплайн:

  1. Ресайз персонажа до 400 пикселей с сохранением соотношения сторон;