Я сказал, что у нее нет лица; но это означало, что у нее тысяча лиц…

- К.С. Льюис , Пока у нас не будет лиц

Сегодня мы представляем вам еще один выпуск, в котором мы подробно рассмотрим несколько статей с конференции CVPR 2018 (компьютерное зрение и распознавание образов). У нас уже было четыре: о GAN для компьютерного зрения, о оценке и отслеживании позы для человека, о синтетических данных и, наконец, об адаптации предметной области. В частности, в четвертой части мы представили три статьи на одну и ту же тему, которые имели фактически численно сопоставимые результаты.

Сегодня мы обратимся к другой проблеме, которая также заслуживает подробного сравнения. Мы поговорим о генерации лица, то есть о синтезировании реалистичного изображения человеческого лица либо с нуля, либо путем изменения некоторых характеристик реальной фотографии. Собственно, эту проблему мы уже затрагивали некоторое время назад, в нашем первом посте о GAN. Но с тех пор генеративные состязательные сети (GAN) стали одной из самых горячих тем в машинном обучении, и неудивительно, что сегодня нас ждут новые достижения. И снова я с большим удовольствием представляю Анастасию Гайдашенко, с которой мы написали этот текст в соавторстве.

GAN для синтеза лица и важность функций потерь

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

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

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

К бумагам!

На пути к открытому синтезу лиц с сохранением идентичности

Авторы первой статьи, совместной работы исследователей из Китайского университета науки и технологий и Microsoft Research (полный pdf), стремятся отделить идентичность и атрибуты от одного изображения лица. Идея состоит в том, чтобы разложить репрезентацию лица на идентичность и атрибуты таким образом, чтобы идентичность соответствовала человеку, а атрибуты соответствовали практически всему, что можно изменить, при этом сохраняя идентичность. Затем, используя эту извлеченную личность, мы можем добавить атрибуты, извлеченные из другого лица. Нравится:

Очаровательно, правда? Давайте разберемся, как они это делают. В статье есть несколько новых интересных приемов, но главный вклад этой работы - новая архитектура на основе GAN:

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

Основные компоненты этой архитектуры включают в себя:

  • кодировщик идентификаторов I, который производит скрытое представление (встраивание) входных данных идентификаторов x ˢ;
  • кодировщик атрибутов A, который делает то же самое для входных атрибутов x ᵃ;
  • генератор смешанных изображений G, который принимает в качестве входных данных оба вложения (сцепленные) и создает изображение x ', которое должно смешивать идентичность x ˢ и атрибуты x ᵃ;
  • классификатор личности C проверяет, действительно ли человек на созданном изображении x ’такой же, как в x ˢ;
  • дискриминатор D, который пытается различать реальные и сгенерированные примеры для повышения производительности генератора обычным способом GAN.

Это структура модели, используемой для обучения; когда все компоненты обучены, для самой генерации достаточно использовать только часть внутри пунктирной линии, поэтому сети C и D включаются только в фазу обучения.

Основная проблема, конечно, заключается в том, как отделить идентичность от атрибутов. Как мы можем сказать сети, что она должна принимать от x ˢ, а что от x ᵃ? Описанная выше архитектура сама по себе не дает ответа на этот вопрос, основная работа здесь выполняется путем тщательного выбора функций потерь. Их довольно много; давайте рассмотрим их один за другим. Формат NeuroNugget не позволяет использовать слишком много формул, поэтому мы постараемся уловить значение каждой части функции потерь:

  • Самая простая часть - это потеря классификации softmax Lᵢ, которая обучает кодировщик идентификационных данных I распознавать личности людей, изображенных на фотографиях; в основном, мы обучаем I служить классификатором лиц, а затем используем последний уровень этой сети как признаки fᵢ (x s);
  • потеря реконструкции Lᵣ более интересна; мы бы хотели, чтобы результат x ’в любом случае реконструировал исходное изображение x ᵃ, но здесь есть два разных случая:
  • если человек на изображении x ᵃ такой же, как на изображении идентичности x s, нет никаких сомнений в том, что мы должны делать: мы должны реконструировать x ᵃ как можно точнее;
  • и если x ᵃ и x ˢ показывают двух разных людей (мы знаем все личности на этапе контролируемого обучения), мы также хотим восстановить x а, но с меньшим штрафом за «ошибки» (в авторских экспериментах в 10 раз меньше); на самом деле мы не хотим точно сейчас восстанавливать x ᵃ, но все же хотим, чтобы x ’был похож на x ᵃ;
  • потеря расхождения KL L kl предназначена для того, чтобы помочь кодировщику атрибутов A сконцентрироваться на атрибутах и ​​«потерять» идентичность в максимально возможной степени; он служит регуляризатором, чтобы сделать распределение векторов атрибутов похожим на заранее определенное (стандартное гауссово);
  • потеря дискриминатора Lᵈ является стандартным делом GAN: она показывает, насколько хорошо D может различать настоящие и поддельные изображения; однако здесь есть одна хитрость: вместо того, чтобы просто включать потерю дискриминатора Lᵈ, сеть начинает с использования Lᵍᵈ, потери соответствия признаков, которая измеряет, насколько похожи признаки, извлеченные D на некотором промежуточном уровне из xx a являются; это связано с тем, что мы не можем сразу же обмануть D, дискриминатор всегда будет почти идеальным в начале обучения, и мы должны сначала согласиться на более слабую функцию потерь (см. Бумага CVAE-GAN для подробностей);
  • и, опять же, тот же трюк работает с классификатором идентичности C; мы используем базовую потерю классификации Lᶜ, но также увеличиваем ее с помощью расстояния Lᵍᶜ между представлениями объектов xx ˢ на некотором промежуточном уровне C .

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

Это было довольно сложно, не так ли? Что ж, вот как обычно работают современные архитектуры на основе GAN: их функция окончательных потерь обычно представляет собой сумму множества различных терминов, каждый со своей мотивацией и смыслом. Но получившаяся архитектура работает очень хорошо; Теперь мы можем обучить его несколькими способами:

  • во-первых, сети Я и C делают в основном одно и то же, идентифицируя людей; следовательно, они могут совместно использовать как архитектуру, так и веса (что упрощает обучение), и мы даже можем использовать стандартную сеть идентификации предварительно обученного человека в качестве очень хорошей инициализации для I и C ;
  • затем мы обучаем все это на наборе данных изображений людей с известной идентичностью; как мы уже упоминали, мы можем выбрать пары x ˢ и x ᵃ как разные изображения одного и того же человека, и сеть попытается точно восстановить xa, или выбрать x ˢ и x ᵃ с разными людьми и тренироваться с меньшим весом потери реконструкции;
  • но и это еще не все; общедоступные помеченные наборы данных о людях недостаточно разнообразны, чтобы обучать всю архитектуру от начала до конца, но, к счастью, это позволяет даже неконтролируемое обучение; если мы не знаем идентичности, мы не можем обучать I и C, поэтому мы должны игнорировать их функции потерь, но мы все равно можем обучить остальных! И мы уже видели, что I и C легче всего обучать, поэтому мы можем предположить, что они достаточно хорошо обучены в контролируемой части. Таким образом, мы можем просто взять несколько случайных лиц из Интернета и добавить их в обучающий набор, не зная личности.

Благодаря осознанному и точному выбору архитектуры, функций потерь и тренировочного процесса результаты просто фантастические! Вот два отрывка из бумаги. В первом мы видим трансформации лиц, случайно выбранных из обучающей выборки, со случайными лицами для атрибутов:

А во втором тождества ни разу в тренировочной выборке не появились! Это люди, совершенно неизвестные сети («безошибочные личности», как их называет газета)… и все еще отлично работает:

PairedCycleGAN: передача асимметричного стиля для нанесения и снятия макияжа

Это сотрудничество исследователей из Принстона, Беркли и Adobe (полный pdf) работает в том же ключе, что и предыдущий документ, но решает гораздо более точную проблему: можем ли мы добавить / изменить макияж на фотографировать, а не все атрибуты сразу, сохраняя при этом лицо как можно более узнаваемым. Основная проблема здесь, как это часто случается в машинном обучении, с данными: относительно прямой подход был бы вполне возможен, если бы у нас был большой набор данных выровненных фотографий лиц с макияжем и без макияжа ... но, конечно, мы этого не делаем. Так как же решить эту проблему?

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

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

На рисунке показаны две связанные сети, предназначенные для реализации этих функций: одна передает стиль макияжа (G), а другая - удаляет макияж (F); идея состоит в том, чтобы совместить выходные данные их последовательного применения с входной фотографией с входной.

Давайте еще раз поговорим о потерях, потому что они определяют подход и улавливают основные новые идеи в этой работе. Единственное обозначение, которое нам нужно для этого, - это то, что X - это область «без макияжа», а Y - это область изображений с макияжем. Теперь:

  • дискриминатор DY пытается различить реальные выборки из домена Y (с составлением) и сгенерированные выборки, а генератор G пытается обмануть его; поэтому здесь мы используем состязательную потерю, чтобы ограничить результаты G, чтобы они были похожи на лица макияжа из домена Y;
  • та же функция потерь используется для F по той же причине: чтобы стимулировать создание изображений, неотличимых от лиц без макияжа, взятых из домена X;
  • но этих функций потерь недостаточно; они просто позволили бы генератору воспроизводить то же изображение, что и эталон, без каких-либо ограничений, налагаемых источником; чтобы предотвратить это, мы используем потерю идентичности для композиции G и F: если мы наносим макияж на лицо x из X, а затем немедленно удалите его, мы должны точно вернуть входное изображение x;
  • теперь мы сделали вывод G принадлежащим Y (лица с макияжем) и сохранили идентичность, но мы по-прежнему никоим образом не используем эталонный стиль макияжа ; чтобы передать стиль, мы используем две разные стилевые потери:
  • потеря реконструкции стиля L s говорит, что если мы перенесем макияж с лица y на лицо x с помощью G ( x, y), затем удалите макияж с y с помощью F (y). , а затем примените стиль от G (x, y) к F (y ), мы должны вернуть y, т. е. G (F (y), G ( x, y)) должны быть похожи на y;
  • а затем поверх всего этого мы добавляем еще один дискриминатор D S, который определяет, имеет ли данная пара лиц одинаковый состав; потеря дискриминатора стиля LP является последним элементом целевой функции.

В статье есть нечто большее, чем просто функции потерь. Например, еще одна проблема заключалась в том, как получить набор данных фотографий для обучающего набора. Авторы нашли интересное решение: пользуйтесь бьюти-блогерами с YouTube! Они собрали набор данных из обучающих видеороликов по макияжу (проверенных вручную на Amazon Mechanical Turk), тем самым гарантируя, что он будет содержать большое количество стилей макияжа в высоком разрешении.

Результаты снова впечатляют:

Результаты станут особенно впечатляющими, если сравнить их с предыдущими современными моделями переноса макияжа:

У нас есть ощущение, что следующая Призма вполне может прятаться где-то поблизости ...

Распознавание мимики с помощью обучения остаткам выражения

В последней статье на сегодня (полный pdf) мы переходим от макияжа к другому типу очень специфических черт лица: эмоциям. Как мы можем отделить идентичность от эмоций?

В этой работе предлагаемая архитектура содержит два процесса обучения: первый - это обучение генерации стандартных нейтральных лиц с помощью условных GAN (cGAN), а второй - обучение на промежуточных уровнях результирующего генератора. Для обучения cGAN мы используем пары изображений лиц, которые показывают некоторое выражение (ввод), и нейтральное изображение лица того же объекта (вывод):

CGAN изучается как обычно: генератор реконструирует вывод на основе изображения input, а затем кортежи (input, target , yes) и (input, output, no) передаются дискриминатору. Дискриминатор пытается отличить сгенерированные выборки от наземной истины, в то время как генератор пытается не только сбить с толку дискриминатор, но и сгенерировать изображение как можно ближе к целевому изображению (снова функции составных потерь, но на этот раз относительно просто).

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

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

На следующем рисунке показаны некоторые образцы остатков де-выражения, которые являются выразительными компонентами гнева, отвращения, страха, счастья, печали и удивления соответственно; на рисунках показана соответствующая гистограмма для каждого выразительного компонента. Как видим, и выразительные компоненты, и соответствующие гистограммы вполне различимы:

А вот несколько примеров результатов для разных наборов данных. На всех изображениях первый столбец - это входное изображение, третий столбец - это абсолютно нейтральное изображение лица того же объекта, а средний - результат генеративной модели:

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

Заключительные слова

Спасибо за чтение! На этом мы, наконец, закончили с CVPR 2018. Трудно отдать должное конференции такого размера; естественно, были сотни очень интересных работ, которые мы не смогли охватить. Но все же мы надеемся, что это была интересная и полезная подборка. Мы скоро увидимся снова в следующих выпусках NeuroNugget. Удачи!

Сергей Николенко
Главный научный сотрудник, Neuromation

Анастасия Гайдашенко
бывший стажер-исследователь в Neuromation, в настоящее время стажер по машинному обучению в Cisco