Как использовать GAN для улучшения индустрии моды?
ВВЕДЕНИЕ
Всем привет! Если вы открыли эту статью, возможно, вас интересуют такие темы, как: мода, машинное обучение, глубокое обучение, искусственный интеллект и настройка.
В настоящее время каждый интернет-пользователь или реальный пользователь хочет получить продукт, специально разработанный для его нужд и желаний. Как улучшить модную индустрию и перевести ее в состояние «полностью индивидуализировано»? Одна из идей - использовать GAN для генерации одежды по ее описанию.
Итак, приступим!
СОДЕРЖАНИЕ
- Введение
- Понимание GAN
- GAN для моды
- Вывод
Понимание GAN
На картинке выше представлена структура такого типа GAN, как DCGAN или глубокая сверточная генеративная состязательная сеть.
Как это работает ?
Прежде всего, нам нужно определить задачу. Наша задача - генерировать изображения по текстовым описаниям. Это означает, что у нас будет некоторый закодированный входной текст и мы будем ожидать изображения. Вы можете подумать, почему бы нам не использовать просто транспонированную свертку или какой-нибудь автоэнкодер с измененной формой ввода? Конечно можем, фантазии нет предела. Но наша задача будет намного сложнее, потому что нам нужно будет вычислить потери для выходного изображения и реального изображения (например, MSE). Сложнее понять принцип GAN, чем понять его.
Давайте сделаем это просто. Как понять архитектуру GAN и идею обучения?
На изображении выше показана аналогия с реальным примером. Представьте себе ситуацию: есть преступник, который хочет заработать действительно качественные фальшивые деньги, а есть полицейский, который хочет отличить настоящие деньги от фальшивых. В нашем мире 90-х это была популярная идея.
Итак, как они взаимодействуют? Я сделаю этот рассказ ближе к точке зрения машинного обучения. Напишем пошагово.
План действий для первоначального взаимодействия:
- Фальшивомонетчик прочитал некоторый материал (входной шум генератора / закодированная инструкция)
- Фальшивомонетчик сделал фальшивую купюру (вывод генератора)
- Полицейский получил этот счет и образец реального (дискриминатор 2 входа)
- Полицейский решает, что это подделка (выход дискриминатора = 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 (это огромные потери, мы сообщаем об этом генератору и обновляем его веса). И следующие действия повторяются с прямым проходом, как описано ранее.
План действий для тренировки (метафорический):
- Оценить способность полицейского знать реальные деньги (реальная потеря с реальными данными)
- Оценить способность полицейского отличить фальшивые деньги (фальшивая потеря с фальшивыми данными)
- Вычислить среднюю погрешность оценки для офицера (общий убыток как половину суммы реальных и ложных убытков)
- Улучшение знаний офицеров и фальшивомонетчиков с новым общим результатом оценки (обратное распространение для всей модели)
- Закройте глаза офицеру (модель дискриминатора стоп-кадра)
- Заставьте фальшивомонетчика подумать, что он / она зарабатывает реальные деньги, используя «слепой» опыт офицера (переверните этикетки и рассчитайте потери генератора BCE и генератор обновлений)
- Открой глаза, офицер! Фальшивомонетчик теперь может лучше делать фальшивые купюры! (разморозить дискриминатор и снова выполнить прямой проход)
Возвращаясь к машинному обучению. Мы заинтересованы в том, чтобы генератор был классным, да? Нам не нужен крутой дискриминатор в качестве результата нашей работы (в большинстве случаев). Нам нужно делать фальшивые данные!
Теперь поработаем с модным примером.
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 и нашли новые идеи для развития.
С наилучшими пожеланиями,
Бондаренко К., инженер машинного обучения.