Как использовать GAN для улучшения индустрии моды?

ВВЕДЕНИЕ

Всем привет! Если вы открыли эту статью, возможно, вас интересуют такие темы, как: мода, машинное обучение, глубокое обучение, искусственный интеллект и настройка.

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

Итак, приступим!

СОДЕРЖАНИЕ

  1. Введение
  2. Понимание GAN
  3. GAN для моды
  4. Вывод

Понимание GAN

На картинке выше представлена ​​структура такого типа GAN, как DCGAN или глубокая сверточная генеративная состязательная сеть.

Как это работает ?

Прежде всего, нам нужно определить задачу. Наша задача - генерировать изображения по текстовым описаниям. Это означает, что у нас будет некоторый закодированный входной текст и мы будем ожидать изображения. Вы можете подумать, почему бы нам не использовать просто транспонированную свертку или какой-нибудь автоэнкодер с измененной формой ввода? Конечно можем, фантазии нет предела. Но наша задача будет намного сложнее, потому что нам нужно будет вычислить потери для выходного изображения и реального изображения (например, MSE). Сложнее понять принцип GAN, чем понять его.

Давайте сделаем это просто. Как понять архитектуру GAN и идею обучения?

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

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

План действий для первоначального взаимодействия:

  1. Фальшивомонетчик прочитал некоторый материал (входной шум генератора / закодированная инструкция)
  2. Фальшивомонетчик сделал фальшивую купюру (вывод генератора)
  3. Полицейский получил этот счет и образец реального (дискриминатор 2 входа)
  4. Полицейский решает, что это подделка (выход дискриминатора = 0)

Это был просто пас вперед. Как сделать генератор и дискриминатор поумнее?

Прежде всего нам нужно оценить дискриминатор (полицейского). Офицер должен сделать две вещи: знать, как выглядят настоящие деньги (настоящая потеря), и уметь отличать фальшивые деньги (поддельная потеря). В нашем случае оценка сотрудника полиции (или может быть какой-то ежедневный бонус за выявление преступления) будет рассчитываться следующим образом: (Потеря (Реальные деньги | Решение сотрудника) + Потеря (Фальшивые деньги | Решение сотрудника)) * 1/2.

А теперь немного математики, и мы продолжим наш рассказ.

Мы будем использовать BCE Loss (двоичную кросс-энтропию) с общей формулой на рисунке ниже.

Представим, что полицейский может сказать нам, с какой вероятностью это настоящее или фальшивое (0–100% или от 0 до 1). И офицер сообщает нам: настоящие деньги: 0,9 настоящих и 0,1 фальшивых (с фактической истиной 1 реальное и 0 фальшивых) и фальшивых денег 0,2 реальных и 0,8 фальшивых (с достоверной информацией 0 настоящих и 1 фальшивых). Теперь посчитаем убыток.

Потери полицейского = 1/2 * ((-log 0,9 * 1-log 0,1 * 0) + (- log 0,2 * 0— log 0,8 * 1)) = 1/2 * (0,04 + 0,09) = 0,065.

И это неплохая потеря! Отлично, офицер!

Но что делать с фальшивомонетчиком? Он / она также должен уметь делать фальшивые деньги (в реальной жизни, конечно, нет, но мы математики и можем проводить любые аналогии для лучшего понимания). В нашем случае мы даже хотим, чтобы фальшивомонетчик действительно хорошо зарабатывал фальшивые деньги! Поможем ему / ей!

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

Теперь научимся фальшивомонетчику (генератору). Мы переворачиваем ярлыки и делаем генератор фальшивых данных реальными, и мы будем использовать замороженный дискриминатор для работы с генератором! Вид уловки.

Итак, теперь мы обучаем фальшивомонетчиков, чтобы лучше зарабатывать деньги. Например результат фальшивомонетчика показан на картинке ниже.

Потери генератора = -log 0,1 * 1-log 0,9 * 0 = 1 (это огромные потери, мы сообщаем об этом генератору и обновляем его веса). И следующие действия повторяются с прямым проходом, как описано ранее.

План действий для тренировки (метафорический):

  1. Оценить способность полицейского знать реальные деньги (реальная потеря с реальными данными)
  2. Оценить способность полицейского отличить фальшивые деньги (фальшивая потеря с фальшивыми данными)
  3. Вычислить среднюю погрешность оценки для офицера (общий убыток как половину суммы реальных и ложных убытков)
  4. Улучшение знаний офицеров и фальшивомонетчиков с новым общим результатом оценки (обратное распространение для всей модели)
  5. Закройте глаза офицеру (модель дискриминатора стоп-кадра)
  6. Заставьте фальшивомонетчика подумать, что он / она зарабатывает реальные деньги, используя «слепой» опыт офицера (переверните этикетки и рассчитайте потери генератора BCE и генератор обновлений)
  7. Открой глаза, офицер! Фальшивомонетчик теперь может лучше делать фальшивые купюры! (разморозить дискриминатор и снова выполнить прямой проход)

Возвращаясь к машинному обучению. Мы заинтересованы в том, чтобы генератор был классным, да? Нам не нужен крутой дискриминатор в качестве результата нашей работы (в большинстве случаев). Нам нужно делать фальшивые данные!

Теперь поработаем с модным примером.

GAN для моды

Как выглядят результаты?

На изображениях выше показаны примеры, когда обученный GAN имеет ввод в виде текста, а результатом является изображение. Это своего рода прототип с изображениями 128х128х3 низкого качества.

Для воплощения этого проекта в реальность было взято 15 ГБ изображений с соответствующим текстовым описанием для каждого (пол, стиль, цвет, описание и т. Д.)

Данные изображений были обрезаны до изображений 128x128x3 (RGB), а текстовые данные преобразованы с помощью метода TFIDF в векторы с 256 значениями.

В некоторых случаях модель угадывает основную идею вроде цвета или типа мужчины / женщины / унисекс. А какие новые данные (текстовое описание)?

Какой-то фильм ужасов. Мы видим черный и красный цвета, какое-то человеческое положение (может быть, человек) и все.

Сети GAN очень нуждаются в данных и медленно обучаются. Exactly generator медленно учится, и для создания этой модели потребовалось 72 часа с GeForce GTX 1070 Ti для 300000 эпох и 12000 изображений с соответствующими текстовыми захватами.

Что делать дальше ? У DCGAN есть свой предел. Нет лучшего результата, чем с картинками 128х128х3. Модель должна быть более сложной.

В этом случае лучше использовать ProGAN или прогрессивно растущую генеративную состязательную сеть. Об этом - в следующей статье.

ВЫВОД

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

Но для получения изображений с хорошим разрешением архитектура должна быть действительно сложной. Например, в ProGAN сети обучаются шаг за шагом от изображений 4x4x3 без смысла к изображениям 1024x1024x3 (RGB) с изображениями хорошего качества и глубоким смыслом.

Спасибо за чтение! Надеюсь, вы нашли что-то интересное в этой статье и, возможно, улучшили свои знания в GAN и нашли новые идеи для развития.

С наилучшими пожеланиями,

Бондаренко К., инженер машинного обучения.