В этой статье мы собираемся обучить StyleGAN2-ADA от NVIDIA на пользовательском наборе данных в Google Colab с использованием TensorFlow 1.14.

Оглавление

  1. Ускоренный курс по GAN
  2. СтильGAN
  3. Как обучить StyleGAN2-ADA в Google Colab
  4. ТензорФлоу 1.x
  5. Установка Google Диска
  6. Создание набора данных TFRecords
  7. Обучение
  8. Рекомендации

Генеративно-состязательные сети (GAN) — одна из самых горячих тем в компьютерных науках в последнее время. Это умный способ обучения генеративной модели (обучение без учителя) путем формулирования проблемы как задачи обучения с учителем.

Ускоренный курс по GAN

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

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

Первая модель называется Генератор и учится генерировать достоверные данные.

Генератор никогда не видит реальных данных, он только получает случайный вектор фиксированной длины (случайно взятый из распределения Гаусса) в качестве входных данных и генерирует выборку в области.

Второй — Дискриминатор,онпринимает в качестве входных данных примеры (реальные или сгенерированные) и учится отличать поддельные данные генератора от реальных данных. Он наказывает генератор за получение неправдоподобных результатов.

После обучения модель дискриминатора отбрасывается (устанавливается как необучаемая), поскольку нас интересует обучение только генератора.

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

СтильGAN

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

Благодаря StyleGAN (NVIDIA), архитектуре генератора на основе стилей, генератор автоматически учится разделять различные аспекты изображений без какого-либо контроля со стороны человека. После обучения вы можете комбинировать эти аспекты как угодно.

Генератор рассматривает изображение как набор «стилей», где каждый стиль управляет эффектами в определенном масштабе.

С этим типом архитектуры вы можете выбрать силу, с которой применяется каждый стиль, по отношению к «среднему лицу» (в случае набора данных лица).

Чтобы узнать больше о StyleGAN, ознакомьтесь с этой статьей:



StyleGAN — одна из самых популярных генеративных моделей NVIDIA. Было выпущено несколько версий StyleGAN. Мы будем использовать последнюю версию, StyleGAN2-ADA, которая больше подходит для небольших наборов данных.

Как обучить StyleGAN2-ADA в Google Colab

Colaboratory, или сокращенно Colab, — это продукт Google Research. Colab позволяет любому писать и выполнять произвольный код Python через браузер и особенно хорошо подходит для машинного обучения, анализа данных и обучения.

Google Colab бесплатен, но я настоятельно рекомендую платить дополнительные 10 долларов в месяц за версию Pro, которая предлагает более быстрые графические процессоры, больше ОЗУ и диска и более длительное время работы. что критично для обучения GAN, которые могут работать несколько часов/дней.

Чтобы запустить модель записной книжки в Google Colab, вам необходимо таким образом подключить ее к размещенной среде выполнения.

Если вы используете версию Pro, то для использования дополнительного графического процессора Google вам нужно нажать Изменить тип среды выполнения в разделе Ресурсы иустановить с аппаратного ускорителя на GPU

ТензорФлоу 1.x

StyleGAN2-ADA использует TensorFlow 1.14 и не поддерживает TensorFlow 2.x.

Однако Google Colab удалил поддержку TensorFlow 1 в своем последнем выпуске, поэтому вы больше не можете использовать %tensorflow_version 1.x.

По-прежнему можно вручную установить TensorFlow 1.x через pip. Просто напишите следующий код в первой ячейке Google Colab.

Затем просто импортируйте его с помощью команды import tensorflow

Чтобы проверить, какой графический процессор вы используете, вы можете ввести !nvidia-smi

Установка Google Диска

Для обучения StyleGAN2-ADA мы используем пользовательский набор данных, состоящий из .jpg, хранящихся в папке на Google Диске, поэтому нам нужно подключить Colab к Google Диску.

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

Введите следующие строки кода в ячейку Google Colab.

Сначала монтируем Google Диск, затем создаем каталог с именем colab-sg2-ada и в этом каталоге создаем еще один stylegan2-ada

После этого мы клонируем из Github репозиторий StyleGAN2-ADA от NVIDIA и создаем другой каталог для datasets и один для results.

Создание набора данных TFRecords

StyleGAN2-ADA и все остальные StyleGAN принимают в качестве входных данных наборы данных TFRecords.

Если вы хотите использовать пользовательский набор данных, вам необходимо сначала преобразовать его в набор данных TFRecords.

Чтобы преобразовать изображения в TFRecords с несколькими разрешениями, мы должны использовать код, предоставленный в документации NVIDIA:

Обучение

После создания набора данных мы можем начать обучение.

В ходе обучения будут экспортироваться сетевые огурцы (network-snapshot-<KIMG>.pkl) и примеры изображений (fakes<KIMG>.png) через равные промежутки времени (управляемые --snap). Для каждого рассола он также оценивает FID по умолчанию (управляется --metrics) и регистрирует полученные оценки в metric-fid50k_full.txt.

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

Это чрезвычайно важно, потому что Google Colab может отключить среду выполнения в зависимости от использования сети, поэтому вам необходимо время от времени сохранять ход выполнения модели, иначе вы потеряете всю проделанную работу.

По истечении времени ожидания Colab вы можете взять последний сохраненный файл .pkl и использовать его для возобновления обучения с этой модели. Просто скопируйте путь к последнему файлу .pkl и вставьте его в строку resume_from =.

Есть и другие показатели, которые вы можете изменить, чтобы персонализировать обучение. Здесь, в примере, я поставил также mirror и metrics, но вы можете найти полный список в файле train.py в репозитории NVIDIA StyleGAN2-ADA на Github.

Как только вы начнете обучение, вы увидите, что снимки сохраняются в папке results на Google Диске.

Здесь вы увидите как поддельные изображения, так и файлы .pkl, сгенерированные из модели на разных снимках.

Рекомендации

[1] Иан Гудфеллоу, Йошуа Бенджио и Аарон Курвиль, Глубокое обучение (2016), The MIT Press

[2] Джейсон Браунли, Нежное введение в генеративно-состязательные сети (GAN) (2019)

[3] Глубокая сверточная генеративно-состязательная сеть (2022 г.), учебные пособия по TensorFlow.

[4] Обзор структуры GAN (2022 г.), разработчики Google.

[5] Теро Каррас FI, Архитектура генератора на основе стилей для генеративно-состязательных сетей (2019), видео на YouTube

[6] Джонатан Хуи, GAN — StyleGAN & StyleGAN2 (2020), Medium

[7] Теро Каррас, Миика Айттала, Янне Хеллстен, Самули Лайне, Яакко Лехтинен и Тимо Айла, StyleGAN2-ADA (2020)