Для получения дополнительных галантерейных товаров, пожалуйста, обратите внимание на публичный аккаунт WeChat «AI Frontline» (ID: ai-front)
В этой статье в основном объясняется, как TFGAN применяется к собственным GAN, CGAN, InfoGAN, WGAN и другим сценариям, а именно:
Среди них изображение Mnist, сгенерированное собственной GAN, является неуправляемым: CGAN может генерировать цифровые изображения с соответствующими метками в соответствии с цифровыми метками; InfoGAN можно рассматривать как неконтролируемую CGAN, первые две строки указывают, что скрытые переменные классификации используются для управлять категорией генерации чисел, а средние две строки указывают, что непрерывная скрытая переменная используется для управления толщиной чисел, а последние две строки указывают, что непрерывная скрытая переменная используется для управления направлением наклона чисел; ImageToImage является своего рода CGAN, реализующим преобразование стилей изображений.
GAN был впервые предложен Гудфеллоу и в основном состоит из двух частей: генератора, обозначаемого буквой G, и дискриминатора, обозначаемого буквой D. Генератор в основном использует шум z для создания выборки, похожей на реальные данные, чем реалистичнее выборка, тем лучше; дискриминатор используется для оценки того, исходит ли выборка из реальных данных или из сгенерированных данных, и чем точнее оценка, тем лучше . Как показано ниже:
На приведенном выше рисунке для реальных выборочных данных D(x) генерируется после прохождения через дискриминантную сеть. Выход D(x) представляет собой действительное число в диапазоне 0-1, которое используется для определения вероятности того, что изображение является реальным изображением. Таким образом, для реальных данных чем ближе D(x) к 1, тем лучше. Для случайного шума z, после прохождения через сеть генерации G, G преобразует этот случайный шум в сгенерированные данные x. Если это проблема генерации изображения, выходом сети G является сгенерированное поддельное изображение, представленное G (z). Дискриминантная модель D должна приближать D(G(z)) к 0, т. е. может судить о том, что сгенерированное изображение является поддельным; модель генерации G должна приближать D(G(z)) к 1, т. е. он должен быть в состоянии обмануть дискриминантную модель, заставляет D думать, что поддельные данные, сгенерированные G (z), реальны. Таким образом, посредством игры между дискриминационной моделью D и генеративной моделью G, D не может судить о том, является ли изображение сгенерированным или реальным и заканчивается.
Предполагая, что P_r и P_g представляют распределение реальных данных и распределение сгенерированных данных соответственно, целевая функция дискриминантной модели может быть выражена как:
Генеративная модель должна сделать дискриминантную модель D неспособной различать реальные данные и сгенерированные данные, поэтому целевая функция оптимизации:
Адрес библиотеки TFGAN — https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/gan, которая в основном включает в себя следующие компоненты:
Базовая архитектура в основном включает в себя создание модели TFGAN, добавление значений потерь, создание операции обучения и запуск операции обучения.
Общие операции в основном обеспечивают операции обрезки градиента, операции нормализации и условные операции.
Функция потерь в основном обеспечивает функции потерь и штрафов, обычно используемые в GAN, такие как потеря Вассерштейна, штраф за градиент, штраф за взаимную информацию и т. Д.
Оценка модели, которая предоставляет показатели начальной оценки и расстояния Фреше для оценки безусловных генеративных моделей.
Например, Google также имеет открытые исходные коды часто используемых примеров кода сети GAN, включая безусловный GAN, условный GAN, InfoGAN, WGAN и т. д. Связанные варианты использования можно загрузить с https://github.com/tensorflow/models/tree/master/research/gan/.
Использование библиотеки TFGAN для обучения сети GAN в основном включает следующие шаги:
-
Определите вход в сеть GAN следующим образом:
-
Установите генеративную и дискриминативную модели в GANModel следующим образом:
-
Настройте уравнение потерь в GANLoss следующим образом:
-
Настройте операции обучения в GANTrainOps следующим образом:
-
Запустите обучение модели следующим образом:
CGAN (условно-генеративные состязательные сети), направленные на устранение неконтролируемых недостатков самой GAN, добавление информации о контроле, обучение от неконтролируемого к контролируемому и руководство сетью GAN для генерации. Например, если вы введете классифицированную метку, может быть сгенерировано изображение соответствующей метки. Таким образом, целевое уравнение CGAN может быть преобразовано в:
Среди них y — это дополнительная контрольная информация, D(x|y) означает оценку реальных данных x при условии y, D(G(z|y)) означает оценку сгенерированных данных G(z|y) при условии у. Например, набор данных MNIST может генерировать изображения с соответствующими метками в соответствии с информацией о цифровых метках; набор данных для генерации лиц может генерировать соответствующие изображения лиц в соответствии с такой информацией, как пол, улыбка или отсутствие улыбки и возраст. Архитектура CGAN показана на следующем рисунке:
API для создания тензоров условий на основе переменной one_hot_labels и входных тензоров предоставляется в TFGAN следующим образом:
tfgan.features.condition_tensor_from_onehot
(tensor, one_hot_labels, embedding_size)
Среди них tensor — это входные данные, one_hot_labels — метка onehot, форма — [batch_size, num_classes], embedding_size — размер встраивания, соответствующий каждой метке, а возвращаемое значение — тензор условия.
Филип Изола и др. предложили состязательную нейронную сеть «Преобразование изображения в изображение с условными состязательными сетями» на основе CGAN для генерации изображений. Основная идея проектирования сети заключается в следующем:
Среди них x — рисунок входной линии, G(x) — сгенерированное изображение, y — визуализированное реальное изображение, соответствующее рисунку линии x, модель генерации G используется для генерации изображения, а модель суждения D используется. для определения подлинности созданного изображения. Дискриминантная сеть может максимизировать оценку данных (x,y) как истинных и оценку (x,G(x)) как ложных. Генеративная сеть заставляет дискриминантную сеть оценивать данные (x, G(x)) как истинные, чтобы провести взаимную игру между генеративной моделью и дискриминантной моделью. Чтобы сгенерированная модель не только обманывала дискриминационную модель, но и делала сгенерированное изображение похожим на реальное, расстояние L1 между реальным изображением и сгенерированным изображением добавляется к целевой функции, как показано ниже:
Библиотека TFGAN, которая предоставляет пример использования соответствующего API уравнения потерь для генеративно-состязательной сети ImageToImage, выглядит следующим образом:
# Определить потери L1 для реальных данных и сгенерированных данных
# gan_loss - потеря целевой функции
gan_loss = tfgan.losses.combine_adversarial_loss
(gan_loss, gan_model, l1_pixel_loss, weight_factor=FLAGS.
weight_factor)
В GAN, когда генератор генерирует данные с шумом z, он не накладывает никаких условных ограничений, и трудно использовать какую-либо информацию о размерности z для представления соответствующих семантических признаков. Поэтому в процессе генерации данных невозможно контролировать, какой шум z какие данные может генерировать, что в значительной степени ограничивает использование GAN. InfoGAN можно рассматривать как неконтролируемую CGAN, добавляя скрытую переменную c к шуму z, так что данные, сгенерированные генеративной моделью, и неглубокая переменная c имеют высокую взаимную информацию, где Info — это значение взаимной информации. Взаимная информация определяется как разница между двумя энтропиями, H(x) — энтропия априорного распределения, а H(x|y) — энтропия апостериорного распределения. Если x, y являются независимыми переменными, значение взаимной информации равно 0, что указывает на то, что x, y не имеют отношения; если x, y коррелированы, то взаимная информация больше 0. Таким образом, учитывая y, можно сделать вывод, что эти значения x высоки. Таким образом, целевое уравнение InfoGAN:
Сетевая структура InfoGAN выглядит следующим образом:
Разница между InfoGAN и GAN на приведенном выше рисунке заключается в том, что в соответствии с выходом D(x) дискриминантной сети генерируется вариационное распределение Q(c|x), так что Q(c|x) можно использовать для аппроксимировать P(c|x), тем самым увеличить взаимную информацию между сгенерированными данными и скрытой переменной c. API-интерфейсы, связанные с InfoGan, предоставляются в TFGAN следующим образом:
# Через tfgan.infogan_model определите модель инфогана
# Через tfgan.gan_loss сгенерировать значение потерь модели инфогана:
# Значение потерь InfoGan основано на значении потерь GAN плюс взаимная информация I(c;G(z,c)).TFGAN предоставляет API для расчета взаимной информации, как показано ниже. где Structured_generator_inputs — это скрытая переменная информация о шуме, а predicted_distributions — это вариационное распределение Q(c|x).
Мартин Аржовски и др. предложили WGAN (Wasserstein GAN), который решает проблемы традиционных трудностей обучения GAN, потери генератора и дискриминатора, которые трудно указать в процессе обучения, и отсутствия разнообразия генерируемых выборок. следующие преимущества:
Он может сбалансировать степень обучения генератора и дискриминатора, делая обучение модели GAN стабильным.
Обеспечить разнообразие образцов продукции.
Для измерения степени обучения модели предлагается использовать расстояние Вассерштейна, чем меньше значение, тем лучше обучение и тем выше качество генерируемых генератором изображений.
Отличие алгоритма WGAN от исходного алгоритма GAN в основном отражается в:
Удалите сигмовидную операцию в последнем слое дискриминантной модели.
Значение потерь генеративной модели и дискриминационной модели не требует логарифмической операции.
После каждого обновления параметров дискриминантной модели абсолютное значение параметров модели усекается не более чем до фиксированной константы c.
Используйте алгоритм RMSProp вместо алгоритмов оптимизации на основе импульса, таких как импульс и Адам.
Структура алгоритма WGAN выглядит следующим образом:
API-интерфейсы, связанные с WGan, предоставляются в TFGAN следующим образом:
#генерируем уравнение потерь в сети
generator_loss_fn=tfgan_losses.wasserstein_generator_loss
# 判 网 方 方
discriminator_loss_fn=tfgan_losses.wasserstein_discriminator
_loss
В этом документе впервые представлены генеративно-состязательная сеть и TFGAN.Модель генеративно-состязательной сети используется для генерации изображений, генерации изображений сверхвысокого разрешения, сжатия изображений, преобразования стиля изображения, улучшения данных, генерации текста и других сценариев.TFGAN — это библиотека TensorFlow, который используется для быстрой отработки различных сценариев Модель GAN. Затем объясняются основные идеи моделей CGAN, ImageToImage, InfoGAN и WGAN и анализируются ключевые технологии, в основном включая целевую функцию, сетевую архитектуру, уравнение потерь и соответствующий API TFGAN. Пользователи могут быстро практиковать генеративно-состязательные сетевые модели на основе TFGAN и применять их к соответствующим сценариям в промышленной сфере.
использованная литература
[1] Generative Adversarial Networks.
[2] Conditional Generative Adversarial Nets.
[3] InfoGAN: Interpretable Representation Learning by Information MaximizingGenerative Adversarial Nets.
[4] Wasserstein GAN.
[5] Image-to-Image Translation with Conditional Adversarial Networks.
[6]https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/gan.
[7] https://github.com/tensorflow/models/tree/master/research/gan.