Несколько месяцев назад я работал над проектом Image2StyleGAN: как встраивать изображения в скрытое пространство StyleGAN? во время стажировки в King Abdullah University of Science and Technology (KAUST). Я помню, что вначале мне было трудно, потому что я не очень хорошо понимал некоторые термины и концепции.

Что я обычно делаю в таких ситуациях, так это исследую более широкую картину проблемы, просматривая некоторые объяснения высокого уровня в видео, блогах или обзорах. Однако в то время я не мог найти хорошего вводного материала. Хотелось бы доступный для понимания материал. По этим причинам я сделал этот пост, в котором я намерен кратко объяснить Image2StyleGAN (I2S) и предоставить некоторые дополнительные ссылки для дальнейшего понимания.

Короче говоря, Image2StyleGAN — это алгоритм оптимизации, целью которого является сопоставление изображения со скрытым пространством предварительно обученного StyleGAN. Эти отображения, известные как скрытые коды, полезны для выполнения приложений апостериорной обработки изображений.

Этот пост предназначен для объяснения основных концепций Image2StyleGAN. Однако вы также можете найти мою реализацию кода [здесь] и постерную статью [здесь].

Кто я? Всем привет! 👋

Я Оскар, молодой программист из Эквадора. На бакалавриате я получил нестандартное образование по направлениям Искусственный интеллект и Машинное обучение (AI/ML). С этого момента я самостоятельно изучаю AI/ML (в последнее время по более эффективному плану).

Мой путь до сих пор был очень плодотворным и позволил мне достичь нескольких вех. На данный момент мне удалось опубликовать более 4 научных статей. Я работал в отрасли над проектами по компьютерному зрению. Я проходил стажировку в KAUST, Саудовская Аравия, работая над проектами StyleGAN. Я был членом Scientific Computing Group еще в колледже. И последнее, но не менее важное: я недавно стал соучредителем DeepARC, некоммерческой исследовательской группы, которой я больше всего горжусь. Он был создан в сотрудничестве с выпускниками, профессорами и студентами, чтобы стимулировать исследования AI/ML среди студентов бакалавриата.

1. Принципы StyleGAN 📚

Прежде чем углубляться в Image2StyleGAN, важно понять, как работает архитектура StyleGAN.

Здесь я не собираюсь подробно объяснять StyleGAN 1 или 2; вместо этого я выделю только основные аспекты, необходимые для понимания I2S. Вы можете найти завершенный обзор [здесь] от Jonathan Hui. Также полезно заранее понять фундаментальный алгоритм ванильного GAN.

С моей точки зрения, StyleGAN направлен на создание высококачественных изображений с лучшим пониманием и контролем стиля/типа сгенерированного изображения. StyleGAN отличается от обычного GAN прежде всего своей архитектурой Generator, в которой авторы заменяют/добавляют компоненты для регулирования генерации изображений.

Обычно в ванильном генераторе вы сопоставляете скрытый код z с изображением I,из которого берется z равномерное или нормальное распределение. Как мы можем заметить, скрытый код играет существенную роль в создании изображения; действительно, мы можем сказать, что z содержит метаинформацию для создания изображения. Таким образом, мы можем задаться вопросом, как использовать этот скрытый код для обращения к метаинформации о стиле/типе сгенерированного изображения. Однако, в принципе, это действительно сложно; по крайней мере напрямую из скрытого кода z не слишком эффективно.

StyleGAN решает упомянутую выше проблему, вводя Mapping Network f, отображая скрытое пространство Z в скрытое пространство. В. Сеть f состоит из восьми полносвязных слоев. Исходный скрытый код z проходит через сеть сопоставления, чтобы получить новый скрытый код w, которыйявляется более репрезентативным и содержит больше независимых скрытых факторов ( незапутанные факторы). Это новое представление можно грубо понять как метаинформацию о стиле изображения (более эффективную и более распутанную, чем Z-пространство). На следующем изображении показана архитектура сопоставления.

Мы начинаем с 512-мерного скрытого кода zZ и получаем 512-мерный скрытый код wW. Затем wможно использовать для питания сети синтеза g,как показано ниже.

Сеть синтеза генерирует изображение в соответствии с подходом прогрессивного роста. Он начинается с тензора постоянного низкого разрешения 4x4x512 и увеличивает разрешение на вычислительный блок со стандартной скоростью от 4x4 до 1024x1024 (всего 9 разрешений).

В отличие от обычного GAN, wскрытый код передается на различные уровни и разрешения сети синтеза посредством аффинного преобразования (A) и адаптивной нормализации экземпляра (АдаИН). Всего сеть применяет эту процедуру к 18 различным слоям, что соответствует двум слоям на разрешение от 4x4 до 1024x1024. Это преобразование по слоям позволяет нам применять информацию о стиле к пространственным данным, в отличие от обычного скрытого кода, который применяет скрытый код только к первому слою, уменьшая роль стиля в сгенерированном изображении.

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

  • Архитектура состоит из двух скрытых пространств, Z и W, с соответствующими скрытыми кодами z и w( оба 512-мерных размера).
  • Скрытый код w является более репрезентативным и соответствует более независимым представлениям.
  • Аффинное преобразование (A) и блоки AdaIN передают заданный скрытый код w в разные слои с разным разрешением (всего 18 слоев).

2. Цель Image2Style 💡

Имея предварительно обученный StyleGAN, Image2StyleGAN намеревается отобразить заданное изображение I в скрытом пространстве StyleGAN.

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

Как мы видели ранее, в архитектуре StyleGAN есть разные скрытые пространства, и мы должны решить, в какое скрытое пространство встроить наше данное изображение. Два очевидных варианта — это скрытое пространство Z и W. Как мы видели ранее, W является более репрезентативным, чем Z. Однако авторы в этой статье предложили расширенную версию W+, которая соответствует скрытому коду размерности 18x512. Это изменение позволяет нам лучше контролировать сгенерированное изображение и последующие приложения.

Напомним, что StyleGAN передает w в сеть синтеза 18 раз (2 слоя на разрешение) для применения преобразований стиля. Итак, идея здесь в том, что у вас есть 512-мерный вектор для соединения слоев в исходной архитектуре, что позволяет вам управлять функциями генерации изображения для каждого разрешения, манипулируя этими векторами. Ниже вы можете проверить, как Synthesis Network G будет работать с нашим новым скрытым кодом.

3. Каркас оптимизации 📈

Как только мы узнаем нашу цель, мы ищем оптимальную процедуру, чтобы найти наш скрытый код w+. Авторы предложили основу оптимизации, основанную на градиентном спуске. Шаги следующие:

  1. Начните с начального скрытого кода w* (начальное предположение).
  2. Создайте изображение со скрытым кодом w*
  3. Сравните сгенерированное изображение I* с эталонным изображением I, используя функцию потерь.
  4. На основе функции потерь (ошибок) обновите скрытый код w* с помощью градиентного спуска.
  5. Повторите этот процесс заданным числом итераций.

Алгоритм оптимизирует скрытый код w* таким образом, чтобы уменьшить ошибку между сгенерированным изображением и эталонным (исходным) изображением; другими словами, поиск того, что оба изображения похожи.

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

На данный момент авторы указали на две проблемы: инициализация скрытого кода и функция потери.

Инициализация скрытого кода

Первоначальное предположение о скрытом коде могло быть другим. Поэтому авторы исследуют две инициализации: равномерно случайно U(-1,1) и средний скрытый код, соответствующий усредненному лицу.

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

Функция потерь

Функция потерь состоит из двух членов: функции потерь восприятия VGG-16 и средней квадратичной ошибки (MSE).

Потери MSE — это стандартная попиксельная ошибка между сгенерированным и эталонным изображениями.

Потери восприятия основаны на предварительно обученных нейронных связях. сеть (VGG-16, обученная с помощью ImageNet), которая помогает вычислить сходство между двумя изображениями с точки зрения скрытых функций. Идея вычислить это сходство состоит в том, чтобы отправить оба изображения через VGG-16 и захватить его выходные карты объектов (скрытые функции) из разных скрытых слоев.

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

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

На практике для карт объектов использовались слои VGG-16 conv1_1, conv1_2, conv3_2,и conv4_2. Ф. Затем мы получаем нормальную разницу между скрытыми функциями в одном и том же месте и вычисляем средневзвешенное значение. Таким образом, можно получить измерение подобия при характеристиках высокого и низкого уровня.

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

4. Приложения для семантического редактирования 💻

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

Морфинг

Морфинг — это метод обработки изображений, используемый для преобразования одного изображения в другое. Используя два встроенных изображения с их соответствующими скрытыми кодами w1 и w2, морфинг вычисляется следующим образом:

Следовательно, новый код w используется для генерации изображения с использованием предварительно обученной сети. Кроме того, вы можете настроить параметр морфинга, чтобы изучить процедуру морфинга с изображения 1 на изображение 2. Ниже вы можете увидеть влияние этого параметра.

Перенос выражений

Перенос выражения – это метод обработки изображений, используемый для переноса выражения лица с одного изображения (или нескольких) на другое. Используя три входных скрытых кода w1, w2, w3, передача выражения вычисляется как

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

Перенос стиля

Перенос стиля — это метод обработки изображений, используемый для переноса стиля (цвета, текстуры, теней, контента и т. д.) с одного изображения на другое. Используя два скрытых кода w1 и w2, передача стиля вычисляется с помощью перекрестной операции (аналогично тому, как это делает StyleGAN в статье).

При заданном эталонном изображении w1 операция кроссовера сохраняет скрытые коды первых 9 слоев (соответствующих разрешению от 4x4 до 64x64). Следовательно, он заменяет следующие скрытые коды кодами изображения стиля (с встраиванием w2) для последних 9 слоев. Ниже мы можем увидеть представление операции кроссовера.

И некоторые примеры передачи стиля следующие:

Заключительные мысли 🤔

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

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

Наконец, любые рекомендации будут оценены. Я постоянно стараюсь улучшать качество своих постов, поэтому ваши комментарии будут мне полезны. Хорошего дня! :D