Условные GAN и перенос стиля
cGAN с условием на класс, концепция CycleGAN, перенос стиля нейронной сетью с VGG
«Условные GAN и перенос стиля» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Управление результатами генерации GAN
Обычный GAN создаёт случайные образцы, и нельзя попросить его создать образец определённого класса. В этом уроке рассматриваются условная генерация (cGANs), перевод изображений без пар (CycleGAN) и перенос нейронного стиля.
Условные GAN (cGAN)
cGAN добавляет условие, например метку класса, и генератору, и дискриминатору. Теперь можно попросить «сгенерировать цифру 7», передав метку вместе с шумом.
Условие для генератора
Генератор объединяет метку (закодированную одним активным разрядом или представленную вектором) с вектором шума. Объединённый вход позволяет создавать образцы нужного класса.
label_emb = embedding(label) # e.g. dim 10
z = torch.randn(batch, 100)
gen_input = torch.cat([z, label_emb], dim=1)
fake = generator(gen_input)Условие для дискриминатора
Дискриминатор также получает метку, поэтому оценивает не только «это настоящее изображение?», но и «это настоящий пример этого класса?». Благодаря этому генератор вынужден соблюдать условие.
d_input = torch.cat([image, label_emb], dim=1)
score = discriminator(d_input)Перевод изображений без пар
Часто у нас нет соответствующих друг другу пар изображений, например одного и того же коня и зебры. CycleGAN переводит изображения между двумя доменами, используя непарные изображения: он учится преобразовывать коня в зебру и обратно без выровненных примеров.
Два генератора, два домена
CycleGAN использует два генератора: G: A to B и F: B to A, у каждого из которых есть собственный дискриминатор. Вместе они выполняют перевод в обоих направлениях между доменами.
# G: photo -> painting
# F: painting -> photoОшибка циклической согласованности
Главная идея такова: перевод из A в B и обратно в A должен возвращать исходное изображение. Ошибка циклической согласованности обеспечивает выполнение условия F(G(a)) == a, ограничивая соответствие между доменами даже без парных данных.
cycle_loss = (
l1(F(G(a)), a) +
l1(G(F(b)), b)
)Перенос нейронного стиля
Перенос нейронного стиля объединяет содержимое одного изображения со стилем другого, например превращает фотографию в картину в стиле Ван Гога. Выходное изображение оптимизируется напрямую с использованием признаков предварительно обученной CNN.
Ошибка содержимого
Ошибка содержимого сохраняет структуру высокого уровня выходного изображения близкой к изображению содержимого, сопоставляя глубокие карты признаков CNN. Она сохраняет то, что изображено на картинке.
content_loss = mse(features_out, features_content)Ошибка стиля и матрица Gram
Стиль описывается с помощью матрицы Gram — корреляций между каналами признаков. Сопоставление матриц Gram переносит текстуры и цвета. Ошибка стиля сравнивает матрицы Gram выходного изображения и изображения-образца стиля.
def gram(f):
b, c, h, w = f.size()
f = f.view(c, h * w)
return f @ f.t()
style_loss = mse(gram(features_out), gram(features_style))Объединение ошибок
Общая ошибка представляет собой взвешенную сумму: alpha * content_loss + beta * style_loss. Настраивая веса, можно выбрать компромисс между сохранением содержимого и силой переноса стиля.
total = alpha * content_loss + beta * style_loss
total.backward() # gradients update the output IMAGEБыстрая проверка
Проверьте, насколько хорошо Вы поняли условную генерацию.
Повторение: условные GAN и перенос стиля
Вы узнали, что cGANs объединяют метку класса со входом генератора (и дискриминатора) для управляемой генерации, CycleGAN использует ошибку циклической согласованности для перевода изображений без пар, а перенос нейронного стиля объединяет ошибку содержимого с ошибкой стиля на основе матрицы Gram, чтобы перерисовывать изображения.
Часто задаваемые вопросы
Урок «Условные GAN и перенос стиля» бесплатный?
Да — полный текст урока «Условные GAN и перенос стиля» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Условные GAN и перенос стиля»?
cGAN с условием на класс, концепция CycleGAN, перенос стиля нейронной сетью с VGG Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Условные GAN и перенос стиля»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Автокодировщики для обучения представлений
- Вариационные автокодировщики (VAE)
- GAN: генератор и дискриминатор
- Условные GAN и перенос стиля