Проект выполнен Вестоном Унгемахом, стажером по глубокому обучению в BinaryVR.

Подходы к компьютерному зрению, основанные на обучении, революционизируют эту область, предлагая легкие и точные модели для ответа на давние вопросы. Авторы исследований в этой области часто публикуют свои результаты только с частичными реализациями. В BinaryVR мы считаем, что устранение этого разрыва между академическими исследованиями и практической реализацией является неотъемлемой частью интеграции виртуальной и дополненной реальности в нашу повседневную жизнь. Вот пример всего одного проекта, над которым мы работаем, чтобы восполнить этот пробел.

Контур

(1) Описание проекта: излагает основные вопросы, которыми занимается PRNet.
(2) Сети и карты позиций: знакомит с основными концепциями для понимания наших сетевых прогнозов и используя их для моделирования лиц.
(3) Набор данных 300W-LP: описывает набор данных, который мы будем использовать для обучения нашей нейронной сети, и обратите внимание на его отличительные особенности.
(4 ) Сетевая архитектура. Обобщает структуру сети.
(5) Обучение: подробно описывает процесс обучения и выбор гиперпараметров.
(6) Results: Примеры результатов нашей сети.
(7) Направления на будущее: Предлагает естественные расширения этой работы.

Описание Проекта

В марте этого года Feng et al. выпустили свою статью Совместная трехмерная реконструкция лица и плотное выравнивание с помощью P карты позиционирования R egression Net work »или PRNet, в которой предлагается новое решение для трехмерной реконструкции лица в реальном времени, выравнивания позы и отслеживания плотных элементов на основе одного RGB-изображения (человеческого) лица. На изображении ниже представлены примеры входных и целевых выходных данных, а также некоторые приложения и короткая анимация выходных данных, демонстрирующая трехмерность маски. Обратите внимание, что ввод - это всего лишь один файл jpg.

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

Сетки и карты положений

В компьютерном зрении трехмерные объекты обычно представлены сеткой, которая представляет собой просто набор вершин, соединенных ребрами и гранями. Сетка моделирует объект, назначая пространственные координаты (x, y, z) для каждой из вершин. Затем мы заполняем ребра, соединяющие соответствующие пары вершин и граней через соответствующие наборы точек.

Для целей этого сообщения в блоге мы исправим конкретную сетку, которую мы назовем сеткой лица, чтобы использовать ее при моделировании лиц. Сетка лица имеет 53 215 вершин. Здесь изображено как моделирующее лицо, так и сплющенное.

Теперь мы знаем, что предсказанная модель лица - это выбор координат (x, y, z) для каждой вершины в сетке лица, но как нам организовать эти данные, чтобы их предсказывала нейронная сеть? Один из способов - просто перечислить все наши 53 215 * 3 предсказания (x, y, z) для каждой вершины в длинный вектор-столбец и сказать нашей сети, чтобы она предсказала это. Однако этот подход скрывает тот факт, что соседние вершины сопоставляются с соседними местоположениями, что затрудняет обучение. Конкретно, этот недостаток будет представлен в архитектуре нейронной сети некоторыми полностью связанными слоями, чтобы сгладить наше входное изображение. Мы бы предпочли подход, в котором используются только сверточные слои, которые запоминают, какие вершины находятся «рядом» друг с другом, и, следовательно, должны иметь аналогичные прогнозы.

Чтобы прийти к такому подходу, мы делаем следующее: Рассмотрим исходную плоскую сетку граней. Выходные данные нашей нейронной сети будут указывать для каждой вершины в этом плоском изображении координаты (x, y, z) этой точки в сетке. Давайте раскрасим плоское изображение этими координатами, где мы позволим цветовым каналам (r, g, b) удерживать наше предсказанное (x, y, z) местоположение для этой точки. Затем мы можем выполнить интерполяцию по краям и граням, чтобы заполнить цветом всю сглаженную сетку. Установив разрешение [256, 256] для этой нарисованной сетки, мы можем интерпретировать это предсказание как массив формы [256, 256, 3]. Этот объект, называемый картой положения подобранной сетки, будет необработанным выходом нашей нейронной сети.

Тот факт, что этот вывод имеет два пространственных измерения, позволит нам полагаться исключительно на сверточные уровни в сетевой архитектуре, описанной ниже.

Одно быстрое техническое замечание: до сих пор мы довольно бесцеремонно относились к этой сплющенной версии меша лица, но на самом деле здесь есть небольшая тонкость; сетка формально представляет собой просто комбинаторный объект, обозначающий вершины, ребра и грани без этой дополнительной информации о выравнивании. В документе выбрано конкретное выравнивание - или uv-map, как это называется в компьютерной графике. Есть много интересных способов построения uv-карт, но мы хотели бы выбрать наиболее симметричный, который в некотором смысле сохраняет структуру данных. Есть хороший математический способ сделать это, используя так называемое встраивание Тутте. Хороший объем работы по реализации этой статьи включает в себя понимание того, как использовать вложение Тутте для получения хорошей uv-карты, а оттуда выполнить процедуру интерполяции, описанную выше, для получения окончательных сглаженных карт положения.

Набор данных 300W-LP

Если мы хотим, чтобы наша нейронная сеть принимала изображения и предсказывала карты положения для лиц в них, нам, конечно, нужно обучать ее на парах (изображение, карта положения) этой формы. Мы работаем с набором данных 300W-LP, который содержит 61 225 изображений человеческих лиц в формате W - возможно, в L arge P ose (подробнее об этом позже) - вместе с подобранными моделями лица, использующими сетку лица, описанную выше. Мы можем выполнить описанную выше процедуру выравнивания и раскраски для каждой сетки в этом наборе данных, чтобы сгенерировать карту положения для каждого изображения, которую мы можем использовать для обучения сети, описанной в следующем разделе.

Прежде чем перейти к этому, мы хотим выделить две новые особенности набора данных 300W-LP:

(1) 300W-LP включает лица в различных позах, многие из которых находятся под большим углом относительно камеры. Эти большие изображения позы были синтезированы из маленьких / средние позы, создавая трехмерную модель всей сцены изображения и затем вращая этот трехмерный объект в пространстве. См. Пример на изображении ниже. Подробную информацию о процессе ротации можно найти здесь.

Обратите внимание, что на этих больших изображениях позы большая часть лица закрыта. Тот факт, что наши метки реконструируют все лицо, включая закрытую часть, означает, что мы сможем делать прогнозы о невидимых частях лица в дополнение к видимым частям. Это нетипично для отслеживания черт лица из-за проблем, связанных с точной и эффективной ручной маркировкой закрытых черт.

(2) Подогнанные сетки в 300W-LP не только моделируют лица на соответствующих изображениях, но и выравниваются с позой лица на изображении. Это связывает координаты нашего прогноза относительно исходного изображения, что позволяет использовать множество полезных приложений. На изображении ниже карта на изображении задается ортогональной проекцией (то есть без учета координаты z), что позволяет нам, например, отмечать характерные точки на изображении. Мы также можем использовать эту проекцию для извлечения данных из изображения обратно в сетку, например информации о цвете (см. Раздел «Описание проекта» для примера). На изображении ниже цвета маски заданы путем размещения пространственных (x, y, z) -координат в цветовых каналах (r, g, b).

(Примечание: лица на изображениях перевернуты, чтобы стандартизировать их для соглашения об индексировании массивов в Python. Мы оставили их таким образом, чтобы вы могли визуализировать соответствие между координатами (x, y, z) и (r , g, b) значения. Например, при перемещении вверх по зеленой оси Y пиксели становятся зеленее.)

Сетевая архитектура

До сих пор мы много говорили о подготовке данных, но ничего не говорили о самой нейронной сети, которую мы собираемся тренировать с данными. Сеть имеет элегантную архитектуру кодировщика / декодера, как показано на следующем изображении из оригинальной статьи.

Здесь зеленые прямоугольники представляют собой остаточные блоки, каждый из которых состоит из трех последовательных сверток с фильтрами 4x4, за которыми следует пропускаемое соединение. Синие прямоугольники представляют собой транспонированные свертки, опять же с фильтрами 4x4. Шаги этих извилин примерно чередуются между одним и двумя, что придает сети форму песочных часов. Подробнее см. Раздел 3.2 оригинальной статьи.

Функция потерь, которая измеряет, насколько наши прогнозы отклоняются от истинных меток, является взвешенной среднеквадратической ошибкой. То есть,

Здесь pos - это карта прогнозируемого положения, \ hat {pos} - это карта истинного положения земли, i и j в каждом диапазоне от 0 до 255, вертикальные полосы обозначают норму L² (применяемую по размеру канала), а W - маска веса, массив [256,256] целых чисел. Эта весовая маска передает в сеть попиксельное измерение того, насколько мы ценим изучение этого конкретного местоположения пикселей. Веса указаны ниже.

Яркие белые характерные точки здесь имеют наибольший вес 16, область глаза-нос-рот имеет вес 4, остальная часть лица имеет вес 3, а шее дается 0 вес, и, таким образом, не учится. .

Еще одно техническое замечание: проницательный читатель заметит, что сетка 300W-LP моделирует область шеи, но наша сеть не учится ее предсказывать. Таким образом, мы не можем научиться предсказывать модели лиц, построенные на основе сетки 300W-LP. На самом деле во время этого проекта было несколько разных сеток, некоторые из которых мы определили сами, и все они выполняют разные функции. Сетка 300W-LP моделирует настоящие метки. Прогнозы из сети строятся на основе карты предсказанного положения с использованием другой сетки. Эта новая сетка имеет 43 215 вершин (вместо 53 215 вершин 300W-LP) и использовалась в нашем первом изображении для получения образца выходного сигнала сети без шеи.

Связанный с этим вопрос: почему не мы учимся предсказывать область шеи? Мы немного поэкспериментировали с ненулевым весом области шеи, но получили плохие результаты; сеть не училась точным предсказаниям шеи, и конвергенция в других местах была медленнее. Сначала мы нашли это немного удивительным - разве не следует говорить сети, что нужно предсказать эту область, просто чтобы дать ей лучшую информацию, на основе которой можно делать прогнозы относительно остальной части лица? Как это могло быть больно? Ответ следующий: область шеи очень плохо представлена ​​в данных. Он часто скрыт или отсутствует на изображении, и процесс синтеза данных часто довольно сильно размывает эту область. Все это вместе только усложняет задачу прогнозирования для сети.

Еще одним ключевым шагом в форматировании данных для обучения было кадрирование. Изображения в разных частях 300W-LP содержат изображения разного разрешения, но сеть должна принимать изображение с пространственными размерами [256, 256]. Для этого мы обрезаем входные изображения, используя их целевую маску, чтобы построить ограничивающую рамку. Затем этот ограничивающий прямоугольник расширяется до [256, 256]. Затем нам нужно изменить координаты карты положения, чтобы сохранить выравнивание для проекции, подробно описанной в конце предыдущего раздела.

Мы отмечаем, что мы решили взять ограничительную рамку немного большего размера, чем у оригинальных авторов, так как это гарантировало, что все лицо будет в кадре, и предоставило немного больше места для перемещения лица по изображению.

Обучение сети

Сеть была обучена на одном графическом процессоре с размером пакета 20 и приблизительно 300 000 обновлений градиентного спуска, что составляет около 50 эпох. Скорость обучения начиналась с 0,001 и уменьшалась вдвое каждые 75 тыс. Шагов. Мы использовали увеличение данных, как в статье, включая смещение, вращение, расширение, масштабирование цвета и окклюзию, но с немного более укрощенными параметрами, чем те, которые описаны в статье. Это помогло ускорить сходимость и дать более разумные результаты.

Перед обучением мы удалили набор для проверки, содержащий 5% изображений в 300W-LP. Поскольку мы не изучали различные сетевые архитектуры, а просто настраивали эту, мы не извлекали набор тестов.

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

Полученные результаты

Здесь мы приводим образец наших результатов. Во всех случаях различные карты положения, характерные точки и маски были созданы из нашей обученной модели.

На приведенных ниже картах положения вы можете разглядеть глаза, нос и рот. Область шеи в нижней части карт прогнозируемого положения, кажется, отображает качественно разные модели в зависимости от того, обращено ли лицо вправо или влево (помните, что эта область не была изучена).

Ниже приведены некоторые примеры прогнозов характерных точек для изображений, синтезированных из 300W-LP. Обратите внимание, что незначительные окклюзии обрабатываются хорошо, за исключением одного случая, когда окклюзия соответствует цвету кожи.

Как вы можете видеть выше, сеть предсказывает точные и подробные маски для лиц в различных позах. Интересно, что в сети действительно больше всего трудностей с позами лицом к лицу, потому что большинство изображений в 300W-LP имеют среднюю или большую позу. Шаблон шахматной доски, который вы можете разглядеть в некоторых из наших прогнозов, является хорошо задокументированным следствием транспонированной свертки шаг-два в сетевой архитектуре.

Следующие короткие видеоролики демонстрируют разреженное и плотное отслеживание функций в реальном времени. Это необработанное видео было записано на мобильное устройство и покадрово запускалось через нашу сеть на одном графическом процессоре для вывода без какого-либо усреднения или сглаживания. Прямой проход по сети занимает около 20 мсек.

Будущие направления

Эта работа предлагает множество интересных приложений. Вот лишь некоторые из них, о которых мы планируем подумать:

  • Сжимайте модель нейронной сети с помощью побитового квантования, сжатия единственного значения или других методов, чтобы обеспечить вывод в реальном времени на мобильном устройстве.
  • Интегрируйте такие функции, как отслеживание взгляда и языка, используя инструменты и идеи из наших существующих приложений.
  • Соберите и синтезируйте больше данных, чтобы улучшить отслеживание во время поз с большим ртом.
  • Используйте плотное отслеживание для передачи функций в реальном времени от одного изображения к другому.

Последние мысли

PRNet предлагает мощный и легкий инструмент для трехмерной реконструкции лица в реальном времени. Хотя сама модель не особенно нова, новый метод регрессии карты положения может позволить перемещать все виды приложений с больших компьютеров на ноутбуки и смартфоны. В BinaryVR мы считаем, что это важный шаг на пути массового внедрения виртуальной и дополненной реальности, и с нетерпением ждем продолжения этого исследования и продвижения вперед.

Благодарности

Доверие исследовательского проекта такого масштаба и воздействия - особенно в качестве стажера - не может быть обычным делом. С самого начала BinaryVR дал мне свободу ставить собственные цели и искать собственные решения, имея при этом отличную команду, готовую работать со мной, преодолевая препятствия. Я не могу отблагодарить их за предоставленную возможность.

использованная литература

Ниже приведены некоторые соответствующие ссылки, если вы хотите вникнуть в подробности.

Изучите вакансии: https://angel.co/binaryvr/jobs
Отправьте свое резюме на стажировку: [email protected]
Научитесь работать в BinaryVR: ' Что заставило инженеров из технологических гигантов собраться в небольшом стартапе с ИИ? '

Мы BinaryVR; стремясь к беспрепятственному взаимодействию между ИИ и повседневной жизнью людей в области компьютерного зрения. Мы разрабатываем лучшие в мире решения для захвата движений лица, HyprFace и BinaryFace, поддерживая постоянную эволюцию нашей основной ценности.