12 / 33 · GAN
StyleGAN: генератор на основе стилей
Как сделать GAN управляемым: код взаимной информации в InfoGAN; отображающая сеть, обучаемая константа, стили AdaIN в каждом слое, шумовые входы, смешивание стилей, усечение в W и две метрики распутанности в StyleGAN; демодуляция весов, регуляризация длины пути, ленивая регуляризация и архитектуры с обходными связями в StyleGAN2; генератор без алиасинга в StyleGAN3.
Генеративно-состязательные сети · Масштабирование GAN: прогрессивный рост, self-attention и BigGAN · StarGAN: один генератор для многих доменов · LPIPS
На этой странице 14
Предыдущая заметка закончилась GAN, которые дают убедительные лица в разрешении и чёткие сэмплы ImageNet. Качество пришло с масштабом: наращивание сетей во время обучения, внимание, бо́льшие батчи и модели. Управляемость вместе с ним не пришла. Кроме метки класса, единственный вход генератора — один вектор шума ; ничто не говорит, что означает каждое направление в , и движение в любом направлении меняет сразу много свойств изображения. В этой заметке разобраны два ответа. InfoGAN (Chen et al., 2016) сохраняет генератор и меняет целевую функцию: часть входа должна читаться обратно по изображению. StyleGAN (Karras, Laine and Aila, 2019) сохраняет целевую функцию и меняет генератор: код больше не подаётся на вход, а задаёт «стиль» каждого слоя, а за случайные детали отвечает отдельный шумовой вход. Две следующие работы исправляют то, что StyleGAN сломал: StyleGAN2 (Karras et al., 2020) убирает его артефакты-пятна и сглаживает латентное пространство, а StyleGAN3 (Karras et al., 2021) не даёт мелким деталям прилипать к пиксельной сетке.
Обозначения. — распределение данных, — дискриминатор, как в заметке о GAN. Входной латентный вектор — , . В StyleGAN отображающая сеть (mapping network) даёт промежуточный латентный вектор , синтезирующая сеть (synthesis network) превращает в изображение, и генератор равен . Обучаемое аффинное отображение превращает в стиль (style) слоя : один масштаб и одно смещение на канал. В части об InfoGAN — латентный код (latent code), который подаётся генератору рядом с , , а — вспомогательная сеть, угадывающая по (в статье она называется ; в остальном курсе — распределение модели). — энтропия, — KL-дивергенция (KL divergence), в натах (nats).
Почему z запутан#
Возьмём генератор лиц и будем двигать вдоль одной координаты. Обученный GAN может менять несколько вещей сразу: голова поворачивается, но лицо при этом становится лицом другого человека, волосы меняют длину, а освещение смещается. Нам хотелось бы такое представление (representation), в котором одно направление меняет один фактор изменчивости (factor of variation), например позу, и не трогает остальные, например личность: распутанное (disentangled) представление в смысле заметки о β-VAE. Целевая функция GAN этого не требует. Дискриминатор оценивает изображения целиком; он поощряет реалистичные выходы, а не аккуратное использование .
Есть и структурная причина, которую статья о StyleGAN формулирует явно (Karras, Laine and Aila, 2019, раздел 4 и рисунок 6). Генератор отображает фиксированное распределение, , в данные. Сэмплируется каждая область , поэтому каждая область должна давать реалистичное изображение, причём с частотами обучающего набора. Пусть два фактора, мужественность и длина волос, закодированы на двух осях, а в обучающем наборе нет длинноволосых мужчин. Отображение, сохраняющее оси прямыми, сэмплировало бы этот отсутствующий угол. Чтобы избежать этого, отображение из в факторы изображения должно искривиться так, чтобы у запрещённой комбинации не было прообраза, а искривлённое отображение означает, что движение вдоль одной оси меняет оба фактора. На реальных наборах данных, где факторы коррелированы, некоторая запутанность неизбежна.
InfoGAN: код, который должно раскрыть изображение#
InfoGAN разделяет вход на несжимаемый шум и код с факторизованным априорным распределением и подаёт оба в генератор, (Chen et al., 2016, раздел 4). Обычный GAN мог бы игнорировать : решение устраивает дискриминатор ничуть не хуже. Поэтому InfoGAN требует высокой взаимной информации (mutual information) между кодом и изображением,
то есть уменьшения неопределённости относительно после того, как изображение увидено. , когда не зависит от ; она максимальна, когда можно точно прочитать по . Целевая функция добавляет её к игре GAN с весом ,
где — функция ценности (value function) GAN.
Нижняя оценка взаимной информации#
Апостериорное распределение генератора неизвестно, поэтому вычислить нельзя. InfoGAN оценивает её снизу с помощью вспомогательного распределения (раздел 5). Прибавим и вычтем внутри условной энтропии:
поскольку KL-дивергенция неотрицательна. Оставшееся математическое ожидание берётся по парам из совместного распределения генератора. Это совместное распределение можно сэмплировать в прямом направлении, , , , ни разу не сэмплируя апостериорное распределение (лемма 5.1 статьи формулирует эту смену порядка). Прибавив , получаем вариационную нижнюю оценку
которая точна, когда совпадает с апостериорным распределением. Априорное распределение фиксировано, поэтому — константа. Игра InfoGAN имеет вид
Максимизация по подгоняет угадывающую сеть к текущему генератору; максимизация по заставляет генератор делать легко угадываемым. Это тот же приём, что и в ELBO: KL-дивергенция относительно приближённого апостериорного распределения отбрасывается, потому что она неотрицательна. Там он даёт оценку правдоподобия, здесь — информации.
На практике делит все свёрточные слои с дискриминатором и добавляет один полносвязный выходной слой, так что дополнительные затраты по сравнению с GAN невелики (раздел 6). Для категориального кода выходной слой — softmax, и — кросс-энтропия. Для непрерывного кода выходной слой выдаёт среднее и стандартное отклонение факторизованного гауссовского распределения, и
квадрат ошибки между кодом и его оценкой, взвешенный уверенностью сети. Для дискретных кодов вес равен ; для непрерывных берут меньшее , поскольку тогда в слагаемое входит дифференциальная энтропия и его масштаб отличается от масштаба целевой функции GAN (раздел 6).
Разобранный пример (игрушечные числа). У равномерного категориального кода с значениями ната. Поскольку для дискретного распределения , имеем , и равенство достигается, только если ставит вероятность 1 на истинное для каждого сгенерированного изображения: тогда код полностью восстанавливается, и оценка равна наибольшей возможной взаимной информации. Для непрерывного кода и предсказания , слагаемое равно . Оно положительно, потому что плотность может превышать 1; значение имеют только разности таких слагаемых.
Что нашёл InfoGAN#
На MNIST код состоит из одной категориальной переменной с 10 значениями и двух непрерывных, равномерных на , рядом с 62 шумовыми переменными (раздел 7 и приложение C.1). Нижняя оценка быстро достигает , тогда как обычный GAN, обученный с той же вспомогательной сетью, почти не сохраняет в изображениях информации о (раздел 7.1, рисунок 1). Без каких-либо меток категориальный код сортирует цифры по классам: если сопоставить его значения типам цифр, он классифицирует MNIST с долей ошибок 5%. Один непрерывный код управляет поворотом цифры, другой — её шириной, и генератор подстраивает толщину и стиль штриха, чтобы результат выглядел естественно; проход по кодам от до , за пределами диапазона обучения, по-прежнему даёт осмысленные цифры (раздел 7.2, рисунок 2). На трёхмерных отрендеренных лицах непрерывные коды находят азимут, угол возвышения, освещение и ширину лица; на стульях — поворот и ширину; на SVHN — освещение и соседние цифры рядом с центральной; на CelebA, с десятью категориальными кодами по десять значений, — позу, очки, причёску и эмоцию (рисунки 3–6).
Где InfoGAN останавливается#
- Коды выбираются вручную. Сколько кодов, какого типа и с каким априорным распределением — решение, принимаемое до обучения: один код на 10 значений и два непрерывных для MNIST, пять непрерывных кодов для трёхмерных лиц. Каким фактором в итоге управляет каждый код, не выбирается; для трёхмерных лиц и стульев статья показывает для каждого фактора тот из пяти запусков, который больше всего похож на прежние результаты с учителем (рисунки 3–4).
- Взаимная информация требует меньше, чем распутанность. Она говорит, что можно прочитать по изображению. Она не говорит, что каждое управляет одним фактором и что этого фактора нет в .
- Остальная часть входа остаётся такой же запутанной, как раньше. Бо́льшая часть входа генератора — это , и InfoGAN ничего о нём не говорит. В экспериментах используются изображения от до пикселей.
StyleGAN идёт другим путём: вместо регуляризатора, который требует от фиксированного генератора хорошего поведения, он меняет то, где и как код входит в сеть.
StyleGAN: генератор на основе стилей#
Традиционный генератор, например генератор Progressive GAN, пропускает латентный код только через входной слой. StyleGAN полностью убирает этот входной слой (Karras, Laine and Aila, 2019, раздел 2 и рисунок 1). Код проходит через отображающую сеть в промежуточный латентный вектор , задаёт стиль каждого свёрточного слоя, синтез начинается с константы, а попиксельный шум даёт случайные детали. Дискриминатор и функция потерь не меняются; все изменения сделаны в генераторе.
Генератор StyleGAN: отображающая сеть, стили и шум
- Отображающая сеть. Нормированный проходит через , MLP из 8 слоёв, и становится ; у обоих по 512 измерений.
- Константный вход. Синтез начинается с обучаемого тензора .
- Стили. Обучаемое аффинное отображение своё для каждого слоя превращает в стиль , который входит через AdaIN после каждой свёртки.
- Шум. Обучаемый масштаб по каналам распространяет одноканальное изображение гауссовского шума на все каналы; шум прибавляется после каждой свёртки.
- Блоки. Два слоя на каждое разрешение от до , всего 18. Блок повышает разрешение, а затем дважды применяет свёртку, прибавляет шум и применяет AdaIN; блок пропускает повышение разрешения и первую свёртку и действует прямо на константу. Свёртка превращает последнюю карту признаков в RGB. У генератора 26.2 млн параметров против 23.1 млн у традиционного.
Отображающая сеть и пространство W#
Рассуждение первого раздела применимо к , потому что у фиксированное распределение, которое должно соответствовать данным. У такого ограничения нет. Его плотность сэмплирования — то, во что превращает , поэтому может взять на себя искривление, которого требуют данные, и оставить ближе к прямым осям: в примере выше отсутствующая комбинация может быть просто областью , куда никогда не попадает. Авторы утверждают, что обучение подталкивает именно в эту сторону, поскольку синтезирующей сети должно быть проще генерировать реалистичные изображения из распутанного представления, чем из запутанного (раздел 4). Это гипотеза, и ниже она проверяется двумя метриками.
Отображающая сеть обучается с шагом обучения в 100 раз меньше, чем остальная сеть, потому что более глубокие отображающие сети были неустойчивы при большом шаге обучения (приложение C). Её глубина важна. На FFHQ генератор на основе стилей без отображающей сети, управляемый прямо через , достигает FID 5.06; с 8-слойной сетью — 4.40. Добавление 8-слойной отображающей сети перед традиционным генератором тоже улучшает его FID, с 5.25 до 4.87, и делает промежуточное пространство гораздо лучше разделимым, чем его входное пространство (таблица 4; метрика разделимости определена ниже).
Обучаемая константа вместо входного слоя#
После добавления отображающей сети и AdaIN сети уже не было пользы от получения кода на первом слое. Поэтому StyleGAN начинает синтез с обучаемой константы , инициализированной единицами (раздел 2.1 и приложение C), и изображение зависит от только через стили. Этот шаг оставил FID на FFHQ почти прежним и улучшил его на CelebA-HQ (конфигурации C и D в таблице ниже), а роль стилей стала чистой: всё содержимое изображения задают они и шум.
Стили через AdaIN#
Каждый стиль управляет слоем через адаптивную нормализацию по экземпляру (adaptive instance normalization, AdaIN), которая для канала карты признаков определяется так (раздел 2, формула 1):
где и — среднее и стандартное отклонение канала по его пространственным позициям, как в нормализации по экземпляру. AdaIN с разобранным примером описана в заметке о StarGAN, где StarGAN v2 вводит свой код стиля тем же способом. В стиле по два числа на канал, поэтому его размерность вдвое больше числа карт признаков слоя, а смещения инициализируются единицей (приложение C).
Почему стили действуют локально, следует из нормализации. AdaIN сначала приводит каждый канал к нулевому среднему и единичной дисперсии и только потом применяет новый масштаб и сдвиг. Поэтому статистики, которые задаёт стиль, не переживают следующую AdaIN: та снова их нормализует. Каждый стиль управляет одной свёрткой, пока его не перекроет следующая AdaIN (раздел 3). Кроме того, стиль пространственно инвариантен: один масштаб и одно смещение на всю карту признаков. Он меняет то, что следующая свёртка подчёркивает, сразу во всех позициях, и это подходит для глобальных свойств: позы, освещения и общего вида.
Шум для случайных деталей#
Многое в портрете случайно, и это безобидно: точное расположение волос, щетины, веснушек и пор можно перерисовать, не меняя того, как мы воспринимаем лицо. Традиционный генератор должен получать такую изменчивость из своего входа, что расходует ёмкость сети и часто проявляется в виде повторяющихся узоров. StyleGAN даёт каждому слою свежее одноканальное изображение некоррелированного гауссовского шума, масштабированное по каналам обучаемыми множителями ( на рисунке) и прибавляемое после свёртки, перед нелинейностью (раздел 2 и рисунок 1).
Сеть сама, без подсказок, учится использовать два входа для разных целей (разделы 3.2–3.3). Если перерисовать шум при фиксированном , личность и поза не меняются, а сдвигаются волосы, части силуэта и фон; шум только в грубых слоях ( до ) даёт крупные локоны, шум только в тонких слоях ( до ) — мелкие завитки и поры кожи, а без шума изображение выглядит невыразительным, «живописным» (рисунки 4–5). Стиль масштабирует карты признаков целиком, поэтому он естественный канал для глобальных решений; шум независим в каждом пикселе, и управление позой через него давало бы пространственно несогласованные изображения, которые наказывает дискриминатор.
Смешивание стилей: грубые, средние и тонкие стили#
Каждый слой получает собственный стиль, поэтому ничто не заставляет все стили происходить из одного и того же . Смешивание стилей (style mixing) пропускает два кода через отображающую сеть и использует для слоёв до точки переключения, а — после неё. Во время обучения StyleGAN делает это для фиксированной доли изображений, со случайной точкой переключения, в качестве регуляризатора: это не даёт сети предполагать, что соседние стили коррелированы (раздел 3.1). Эффект виден, когда при тестировании смешивают несколько кодов. FID на FFHQ для 1–4 случайных кодов и случайных точек переключения (таблица 2):
| Смешивание при обучении | 1 код | 2 кода | 3 кода | 4 кода |
|---|---|---|---|---|
| 0% (конфигурация E) | 4.42 | 8.22 | 12.88 | 17.41 |
| 50% | 4.41 | 6.10 | 8.71 | 11.61 |
| 90% (конфигурация F) | 4.40 | 5.11 | 6.88 | 9.03 |
| 100% | 4.83 | 5.17 | 6.63 | 8.40 |
При 90% качество с одним кодом не меняется, а смешивание сеть переносит гораздо лучше. Смешивание двух лиц показывает, чем управляет каждая группа слоёв (рисунок 3):
- грубые стили ( до ): поза, общая причёска, форма лица и очки;
- средние стили ( до ): более мелкие черты лица, причёска, открытые или закрытые глаза;
- тонкие стили ( до ): в основном цветовая гамма и микроструктура.
Грубые слои определяют компоновку, тонкие — текстуру. Это разделение — свойство обученной сети, а не меток: на спальнях LSUN грубые стили задают точку съёмки, средние — мебель, а тонкие — цвета и материалы (приложение E). Отдельный код для каждого слоя задаёт расширенное пространство , которое используется для редактирования в заметке о редактировании по точкам.
Усечение в W#
Области с низкой плотностью данных трудно выучить любой генеративной модели, и сэмплирование только из хорошо выученного центра латентного пространства улучшает среднее качество ценой разнообразия. StyleGAN делает это в (приложение B). Вычислим центр масс и сдвинем каждый сэмпл к нему:
умножает каждое отклонение от : при каждый сохраняет 70% своего расстояния от центра, а квадрат расстояния — 49%. Это сжатие, а не отбраковка. При каждый сэмпл превращается в «среднее лицо» FFHQ, которое выглядит похоже у всех обученных сетей; отрицательное даёт «антилицо», у которого меняются на противоположные ракурс, очки, возраст, окраска, длина волос и часто пол (рисунок 8). Трюк усечения в BigGAN (truncation trick) действует на , и Brock et al. обнаружили, что его выдерживают лишь некоторые сети, даже с ортогональной регуляризацией; усечение в работает надёжно без изменений функции потерь (приложение B). Поскольку у каждого слоя свой стиль, усечение можно применять только к грубым слоям, не трогая мелкие детали: неотобранные сэмплы статьи используют для слоёв от до (рисунок 2). Все значения FID вычислены без усечения.
Результаты на FFHQ#
Статья также вводит набор FFHQ (Flickr-Faces-HQ): 70 000 изображений лиц в разрешении , собранных с Flickr под свободными лицензиями, автоматически выровненных и обрезанных, с гораздо большим разнообразием возраста, этнической принадлежности, фона и аксессуаров, чем в CelebA-HQ (приложение A). FID (меньше — лучше), вычисленный по 50 000 изображений из обучающего набора, указан по наименьшему значению за время обучения (таблица 1):
| Конфигурация | CelebA-HQ | FFHQ |
|---|---|---|
| A. Базовая модель Progressive GAN | 7.79 | 8.04 |
| B. + билинейная передискретизация, более долгое обучение, настройка | 6.11 | 5.25 |
| C. + отображающая сеть и стили | 5.34 | 4.85 |
| D. + обучаемая константа, без входного слоя | 5.07 | 4.88 |
| E. + шумовые входы | 5.06 | 4.42 |
| F. + регуляризация смешиванием | 5.17 | 4.40 |
На FFHQ конфигурации B–F используют ненасыщающуюся функцию потерь (non-saturating loss) со штрафом R1 (), а на CelebA-HQ используется WGAN-GP. От улучшенной традиционной базовой модели B к модели на основе стилей E FID снижается на 15.8% на FFHQ и на 17.2% на CelebA-HQ. Обучение заняло около недели на восьми GPU Tesla V100 (приложение C). На LSUN FID составил 2.65 для спален в разрешении , 3.27 для автомобилей в разрешении и 8.53 для кошек в разрешении (рисунки 10–12).
Измерение распутанности без энкодера#
Существующие метрики распутанности требуют энкодера из изображений в латентные коды, которого у GAN нет. StyleGAN предлагает две метрики, которым не нужны ни энкодер, ни известные факторы изменчивости (раздел 4).
Длина перцептивного пути#
Если латентное пространство запутано, интерполяция между двумя кодами может порождать признаки, которых нет ни на одном из концов, — признак искривлённого пути в пространстве изображений. Длина перцептивного пути (perceptual path length, PPL) измеряет, насколько меняется изображение при малых шагах интерполяции, с помощью расстояния LPIPS . В используется slerp, потому что гауссовский (раздел 4.1, формула 2):
где , и . В векторы не нормированы, поэтому интерполяция линейная (формула 3):
LPIPS — квадрат расстояния, поэтому для гладкого пути (квадрат скорости изображения вдоль пути), и деление на оставляет средний квадрат перцептивной скорости. Математическое ожидание оценивается по 100 000 сэмплов, а изображения обрезаются до лица. Короткий путь в может быть несправедлив к : если — выпрямленная версия , прямая между двумя достижимыми точками может проходить через области, которые никогда не порождает и которые отрисовывает плохо. Поэтому статья приводит также версию по концам (endpoint), , которая сравнивает только изображения вблизи кодов, действительно порождаемых .
Линейная разделимость#
Если латентное пространство распутано, бинарный признак, например пол, должен отделяться гиперплоскостью (раздел 4.2). Проверка такова: обучить 40 классификаторов для 40 атрибутов CelebA на CelebA-HQ; сгенерировать 200 000 изображений; классифицировать каждое и оставить более уверенную половину, 100 000 размеченных кодов на атрибут; обучить линейный SVM, предсказывающий метку по коду ( или ); вычислить условную энтропию метки классификатора при известной стороне гиперплоскости . Метрика равна . Она равна 1, когда каждый атрибут идеально предсказывается гиперплоскостью, и растёт вместе с информацией, которую гиперплоскости упускают; меньше — лучше.
Обе метрики на FFHQ, меньше — лучше (таблицы 3 и 4):
| Генератор | Пространство | PPL, полная | PPL, по концам | Разделимость |
|---|---|---|---|---|
| традиционный (B) | 412.0 | 415.3 | 10.78 | |
| на основе стилей, без шума (D) | 446.2 | 376.6 | 3.61 | |
| + шумовые входы (E) | 200.5 | 160.6 | 3.54 | |
| + смешивание 90% (F) | 234.0 | 195.9 | 3.79 | |
| традиционный + 8-слойная отображающая сеть | 896.2 | 902.0 | 170.29 | |
| традиционный + 8-слойная отображающая сеть | 324.5 | 212.2 | 6.52 |
неизменно лучше разделимо, чем , и пути в нём короче. Самый наглядный случай — традиционный генератор с отображающей сетью: его промежуточное пространство легко разделить (6.52), а входное пространство становится гораздо хуже (170.29), что подтверждает утверждение о том, что входное пространство GAN может быть сколь угодно запутанным. Регуляризация смешиванием немного ухудшает длину пути и разделимость; авторы предполагают, что из-за неё труднее кодировать факторы, охватывающие несколько масштабов. Они также отмечают, что PPL медленно растёт в конце обучения, тогда как FID продолжает падать (приложение D): качество отчасти куплено запутанностью.
StyleGAN2: устранение артефактов#
На изображениях StyleGAN часто есть характерное пятно, похожее на каплю воды, а подвижные детали, например зубы, иногда остаются на месте. StyleGAN2 связывает первое с AdaIN, а второе — с прогрессивным ростом и добавляет регуляризатор, который делает генератор более гладким (Karras et al., 2020). Весь анализ сосредоточен на — пространстве, которое важно для синтезирующей сети.
Капли и нормализация в AdaIN#
Капля появляется примерно на разрешении , присутствует во всех картах признаков, даже когда на итоговом изображении её трудно заметить, и усиливается на более высоких разрешениях (раздел 2, рисунок 1). Гипотеза StyleGAN2: AdaIN нормализует среднее и дисперсию каждой карты признаков отдельно, и это уничтожает любую информацию, которую несут величины признаков относительно друг друга. Генератор проносит эту информацию о силе сигнала мимо нормализации, создавая сильный локализованный выброс, который доминирует в статистиках; с таким выбросом он может масштабировать сигнал в остальных местах как угодно. Гипотезу подтверждает эксперимент: если убрать шаг нормализации, капли полностью исчезают. В редких случаях (возможно, 0.1% изображений), когда капли нет, изображение сильно искажено (рисунок 15).
Разобранный пример (игрушечные числа). Карта признаков из 16 позиций несёт узор на 15 из них (8 положительных, 7 отрицательных) и выброс на 16-й. После нормализации по экземпляру амплитуда узора равна 1.035 при , каково бы ни было : нормализация отбрасывает масштаб, выбранный предыдущими слоями. С выбросом она зависит от отношения ; при : 0.737 при , 0.386 при и 0.103 при , а сам выброс становится большим значением (3.85 при ) в своей позиции. Выброс работает как регулятор громкости, который нормализация не может убрать.
Сначала StyleGAN2 упрощает блок (раздел 2.1, рисунок 2). AdaIN разделяется на две части: нормализацию и модуляцию. Смещение и шум выносятся из той части сети, где действует стиль, чтобы их эффект больше не масштабировался вместе со стилем; затем нормализация и модуляция действуют только на стандартное отклонение, без среднего; наконец, смещение, шум и нормализация константного входа удаляются. Остаётся блок «модуляция, свёртка, нормализация», и теперь нормализацию можно заменить.
Модуляция и демодуляция весов#
Обозначим через вес свёртки от входного канала к выходному каналу в позиции ядра , а через — масштаб стиля для входного канала (в этом разделе с тремя индексами — вес, а не латентный вектор). Вывод занимает три шага (раздел 2.2, формулы 1–3).
Шаг 1: модуляция как изменение весов. Умножить входной канал на и затем применить свёртку — то же самое, что применить свёртку с масштабированными весами, потому что свёртка линейна по каждому входному каналу:
Шаг 2: масштаб выхода. Предположим, что входные активации — независимые случайные величины с единичным стандартным отклонением. Выход в одной позиции равен — сумме независимых слагаемых, а дисперсия такой суммы равна сумме дисперсий, . Её стандартное отклонение — норма весов выходного канала :
Шаг 3: демодуляция. Нормализация по экземпляру нужна для того, чтобы убрать влияние из статистик выхода. Деление выхода на делает это напрямую, и это деление тоже можно внести в веса, с малым для численной устойчивости:
Теперь весь блок стиля — одна свёртка, веса которой зависят от стиля. Нормализация вычисляется по весам, а не по картам признаков, поэтому выброс в данных больше не меняет того, как данные масштабируются, и капля теряет смысл. Цена в том, что демодуляция опирается на статистическое предположение о входах, а не на их фактическое содержимое; авторы называют её более слабой, чем нормализация по экземпляру. Похожие рассуждения о дисперсии используются при инициализации весов, а вычисление совпадает с нормализацией весов (weight normalization). Веса различны для каждого сэмпла в мини-батче, чего стандартные процедуры свёртки не поддерживают; реализация превращает мини-батч в один сэмпл с группами и использует групповые свёртки (grouped convolution; приложение B). Функции активации масштабируются так, чтобы сохранять ожидаемую дисперсию сигнала.
Разобранный пример (игрушечные числа). У одного выходного канала свёртки с двумя входами веса , поэтому независимые входы с единичной дисперсией дают выход с дисперсией . Стиль даёт и дисперсию выхода . Демодуляция делит на : , и дисперсия снова равна . Стиль по-прежнему определяет смесь — первый вход теперь даёт 95% дисперсии вместо 36%, — но не общий масштаб. Если бы два входа были коррелированы с коэффициентом 0.5, те же веса дали бы : предположение имеет значение. Рисунок повторяет этот эксперимент на игрушечной свёртке с шестью случайными стилями.
Демодуляция возвращает выходу единичную дисперсию
Новая архитектура убирает капли, сохраняя полное управление через стили. FID почти не меняется, с 4.40 до 4.39 на FFHQ, но точность падает с 0.721 до 0.702, а полнота растёт с 0.399 до 0.425 (таблица 1, строки A и B; см. точность и полноту (precision / recall)). Авторы считают этот сдвиг желательным, поскольку полноту можно обменять обратно на точность с помощью усечения, а наоборот — нельзя.
Регуляризация длины пути#
У FID и у точности с полнотой есть слепое пятно. StyleGAN2 показывает пары моделей LSUN с одинаковым FID и близкими точностью и полнотой, изображения которых явно различаются по качеству, и эту разницу улавливает PPL: на LSUN Cat у StyleGAN с FID 8.53 PPL равна 924, а у раннего снимка StyleGAN2 с тем же FID PPL равна 387, и он чаще порождает объекты в форме кошки (раздел 3, рисунки 4–5 и 13). Изображения с низкой PPL на изображение обычно выглядят хорошо, с высокой — хуже. Гипотеза авторов: поскольку дискриминатор наказывает сломанные изображения, генератору проще всего улучшаться, растягивая области латентного пространства, которые дают хорошие изображения, а это сжимает плохие в небольшие области быстрых изменений. Минимизация самой PPL подталкивала бы к вырожденному генератору с нулевой полнотой, поэтому авторы регуляризуют более слабое свойство: шаг фиксированной длины в должен давать изменение изображения фиксированной величины, в каком бы направлении ни был сделан шаг (раздел 3.2).
Локальное поведение в точке описывает её матрица Якоби . Регуляризатор имеет вид (формула 4)
где — случайное изображение с нормально распределёнными пикселями, при , а — скользящее среднее (коэффициент затухания 0.99), так что общий масштаб сеть выбирает сама. Матрица Якоби никогда не строится явно. По правилу дифференцирования сложной функции градиент скаляра по равен , поэтому один обратный проход даёт .
Почему это поощряет равномерное отображение? Запишем сингулярное разложение с сингулярными числами (, размерность ). Поворот не меняет распределения стандартного нормального , компоненты после первых умножаются на ноль, а не меняет длин, поэтому распределена как с независимыми стандартными нормальными . Когда равно средней длине, штраф равен дисперсии этой длины. Сумма имеет среднее и дисперсию , и при больших дисперсия приближённо равна . При фиксированной неравенство Коши–Буняковского делает эту величину наименьшей, когда все равны: матрица Якоби ортогональна с точностью до общего масштаба, сохраняет длины и не сжимает ни одного направления. Статья приходит к тому же выводу через рассуждение о концентрации меры (приложение C). Игрушечные числа: при и равные сингулярные числа дают дисперсию 0.50, а если половина из них втрое больше другой половины — 0.82 (0.81 при моделировании методом Монте-Карло с 20 000 испытаний). Спектральная нормализация, напротив, ограничивает только наибольшее сингулярное число (см. заметку о WGAN); её добавление в генератор, вместе с этими изменениями или вместо них, всегда ухудшало FID (раздел 3.2 и приложение E). Слагаемое берётся с весом для выходного разрешения ; такой выбор подошёл для всех наборов данных (приложение B).
С регуляризатором модели ведут себя надёжнее, генератор легче обратить, а распределение PPL на изображение сужается, причём его мода не уходит в ноль. На FFHQ PPL падает со 158.0 до 122.5, а FID почти не меняется, с 4.38 до 4.34; на LSUN Car FID растёт с 2.83 до 3.43, что указывает на компромисс между FID и PPL на менее структурированных наборах данных (таблица 1, строки C и D).
Ленивая регуляризация#
Штраф R1 и слагаемое длины пути требуют дополнительных обратных проходов. StyleGAN2 вычисляет их реже, чем основную функцию потерь: раз в мини-батчей для дискриминатора и раз в для генератора, в отдельном проходе (раздел 3.1 и приложение B). Слагаемое умножается на , чтобы сохранить величину его градиентов, а поскольку теперь за основными шагами следует один шаг регуляризации, шаг обучения и коэффициенты затухания Adam корректируются с : , , . Вычисление R1 раз в 16 мини-батчей не повредило: FID с 4.39 до 4.38 на FFHQ (таблица 1, строка C). С демодуляцией весов, ленивой регуляризацией (lazy regularization) и оптимизацией кода скорость обучения в разрешении выросла с 37 до 61 изображения в секунду на восьми GPU V100 (раздел 6).
Без прогрессивного роста#
Прогрессивный рост (progressive growing) — схема обучения, которую StyleGAN унаследовал от Progressive GAN, — даёт StyleGAN сильное предпочтение определённых положений для деталей: когда лицо поворачивается, зубы или глаза могут оставаться выровненными по камере, а затем перескакивать в следующее предпочтительное положение (раздел 4, рисунок 6). Объяснение авторов: при наращивании каждое разрешение какое-то время служит выходным, поэтому его подталкивают порождать детали максимальной частоты; обученная сеть сохраняет чрезмерно высокие частоты в промежуточных слоях, и это нарушает инвариантность к сдвигу (рисунок 16).
StyleGAN2 сохраняет цель наращивания — сначала низкие разрешения, мелкие детали позже, — не меняя сеть во время обучения. Статья сравнивает три генератора и три дискриминатора, обученных без наращивания (раздел 4.1, рисунок 7): исходные сети прямого распространения; обходные связи (skip connections), при которых генератор повышает разрешение и суммирует RGB-выходы всех разрешений, а дискриминатор получает изображение пониженного разрешения на каждом разрешении; и остаточные (residual) сети, у которых две ветви складываются и умножаются на , чтобы сохранить дисперсию. FID и PPL на FFHQ (таблица 2):
| Генератор / дискриминатор | исходный | обходные связи на входах | остаточный |
|---|---|---|---|
| исходный | 4.32 / 265 | 4.18 / 235 | 3.58 / 269 |
| обходные связи на выходах | 4.33 / 169 | 3.77 / 127 | 3.31 / 125 |
| остаточный | 4.35 / 203 | 3.96 / 229 | 3.79 / 243 |
Обходные связи в генераторе сильно улучшают PPL, а остаточный дискриминатор улучшает FID. StyleGAN2 использует генератор с обходными связями и остаточный дискриминатор. Если затем измерить, какой вклад каждое разрешение вносит в суммарный выход, видно, что генератор сам ведёт себя как при прогрессивном росте: в начале доминируют низкие разрешения, позже — более высокие. Но слои так и не стали главными, и изображения выглядели как повышенная резкость изображений . Удвоение числа карт признаков в слоях от до обеих сетей исправило это ценой 22% и 21% дополнительных параметров у генератора и дискриминатора (раздел 4.2, рисунок 8).
Результаты#
FFHQ в разрешении ; для FID и PPL меньше — лучше, для точности и полноты больше — лучше (таблица 1):
| Конфигурация | FID | PPL | Точность | Полнота |
|---|---|---|---|---|
| A. StyleGAN | 4.40 | 212.1 | 0.721 | 0.399 |
| B. + демодуляция весов | 4.39 | 175.4 | 0.702 | 0.425 |
| C. + ленивая регуляризация | 4.38 | 158.0 | 0.719 | 0.427 |
| D. + регуляризация длины пути | 4.34 | 122.5 | 0.715 | 0.418 |
| E. + без наращивания, новые G и D | 3.31 | 124.5 | 0.705 | 0.449 |
| F. + большие сети (StyleGAN2) | 2.84 | 145.0 | 0.689 | 0.492 |
| A с большими сетями | 3.98 | 199.2 | 0.716 | 0.422 |
FID снижается на 35.5%, с 4.40 до 2.84, а полнота растёт с 0.399 до 0.492. Последняя строка показывает, что одна только ёмкость не объясняет выигрыша. PPL здесь — версия по концам в , вычисленная по целым изображениям, без обрезки до лица, как в статье о StyleGAN, поэтому её нельзя напрямую сравнивать с предыдущей таблицей. На LSUN FID улучшается с 3.27 до 2.32 для автомобилей, с 8.53 до 6.93 для кошек, с 4.21 до 3.86 для церквей и с 3.83 до 3.43 для лошадей, а PPL падает примерно вдвое или сильнее во всех четырёх случаях (таблицы 1 и 3).
StyleGAN3: детали, приклеенные к пиксельной сетке#
У StyleGAN2 остаётся дефект, который виден в движении. При латентной интерполяции грубые признаки движутся, а мелкие детали, например волосы или мех, остаются неподвижными в пиксельных координатах, будто приклеены к экрану, а не к поверхности лица: прилипание текстуры (texture sticking; Karras et al., 2021, раздел 1, рисунок 1). У сети есть доступ к непреднамеренным позиционным ориентирам: границам изображения, попиксельным шумовым входам, позиционным кодированиям и алиасингу (aliasing) — слабым остаточным отпечаткам пиксельной сетки, которые оставляют неидеальные фильтры повышения разрешения (ближайший сосед, билинейный, свёртки с шагом) и поточечные нелинейности, например ReLU. Сеть усиливает даже слабый алиасинг и комбинирует его на разных масштабах в текстурные мотивы, закреплённые в экранных координатах.
StyleGAN3 рассматривает каждую карту признаков как непрерывный сигнал с ограниченным спектром, который пиксельная сетка лишь представляет, как в теореме Котельникова (Nyquist–Shannon sampling theorem; раздел 2). Тогда слой эквивариантен относительно сдвига или поворота, если коммутирует с ним в непрерывной области, и он не должен создавать частот, которые выходная сетка не может представить. Свёртка этому удовлетворяет. Повышение разрешения должно использовать близкое приближение идеального фильтра нижних частот: sinc-функцию с окном Кайзера, поскольку обычные фильтры подавляют алиасы слишком слабо, и, как оказалось, нужны фильтры с подавлением более 100 дБ. Поточечная нелинейность может создавать сколь угодно высокие частоты, поэтому её применяют на удвоенном разрешении и затем фильтром нижних частот возвращают обратно, в отдельном ядре CUDA (разделы 2.1 и 3.2). Генератор также заменяет обучаемую константу фурье-признаками (Fourier features), которые можно точно сдвигать и поворачивать, убирает шумовые входы, оставляет вокруг холста поле в 10 пикселей вместо того, чтобы полагаться на дополнение (padding), и задаёт частоту среза каждого из своих 14 слоёв отдельно. Эквивариантная относительно поворотов версия StyleGAN3-R использует свёртки и радиально симметричные фильтры; эквивариантная относительно сдвигов — StyleGAN3-T. Эквивариантность измеряется как PSNR в децибелах между выходом для преобразованного входа и преобразованным выходом (EQ-T для сдвига, EQ-R для поворота, формула 3).
На невыровненном FFHQ в разрешении (рисунок 5) StyleGAN2 достигает FID 3.79 при EQ-T 15.89 дБ, StyleGAN3-T — 3.67 при 61.69 дБ, а StyleGAN3-R — 3.66 при 64.78 дБ и EQ-R 47.64 дБ против 10.79 у StyleGAN2. На выровненном FFHQ значения FID равны 2.70, 2.79 и 3.07. Базовая модель в этом сравнении — StyleGAN2 с фурье-признаками, а не в точности конфигурация F выше. FID остаётся на уровне StyleGAN2, хотя внутреннее представление полностью меняется; выигрыш — в движении, что важно для видео и анимации. Цена — вычисления: на FFHQ 1106 GPU-часов для StyleGAN2, 1576 (+42%) для StyleGAN3-T и 2248 (+103%) для StyleGAN3-R.
Редактирование реальных изображений#
Всё, что описано выше, управляет изображениями, которые генератор сам породил из известного . Чтобы отредактировать фотографию, сначала нужно найти , изображение которого её воспроизводит: обращение GAN (GAN inversion) — оптимизация по латентному вектору, возможно, отдельно для каждого слоя в ; оно описано вместе с компромиссом между искажением и редактируемостью в заметке о редактировании по точкам. Собственный проектор StyleGAN2 оптимизирует и карты шума по LPIPS, добавляя к постепенно убывающий шум и используя регуляризатор, который не даёт картам шума переносить согласованный сигнал; он остаётся в , а не в , потому что расширенное пространство может воспроизводить произвольные изображения, которые генератор никогда не смог бы породить (раздел 5). Генератор с регуляризацией длины пути обратить гораздо легче: изображения, сгенерированные StyleGAN2, проецируются обратно почти идеально, что позволяет приписать сгенерированное изображение создавшей его сети, тогда как проекции реальных обучающих изображений заметно отличаются от оригиналов (раздел 5.1, рисунки 9–10).
Что изменилось#
| Традиционный генератор | InfoGAN | StyleGAN | StyleGAN2 | StyleGAN3 | |
|---|---|---|---|---|---|
| Куда входит код | первый слой | первый слой, как | каждый слой, как стили из | каждый слой, как модуляция весов | каждый слой, как модуляция весов |
| Источник управляемости | нет | слагаемое взаимной информации со вспомогательной сетью | архитектура: отображающая сеть, стили, шум | то же | то же |
| Нормализация в генераторе | батч- или попиксельная нормализация | батч-нормализация | AdaIN | демодуляция весов | демодуляция, передискретизация с фильтрацией |
| Случайные детали | из | из | попиксельный шум | попиксельный шум | шум убран |
| Схема обучения | прогрессивный рост (Progressive GAN) | фиксированная сеть | прогрессивный рост | G с обходными связями, остаточный D, без наращивания | без наращивания |
| Устранённый известный артефакт | – | тривиальное использование кода | запутанность | капли, фазовые артефакты | прилипание текстуры |
Ограничения#
- Нет энкодера. StyleGAN отображает коды в изображения, но не наоборот. Для редактирования реальной фотографии нужно обращение оптимизацией или отдельно обученный энкодер, а то, что лежит за пределами множества значений генератора, недостижимо.
- Распутанность поощряется, но не гарантируется. Отображающая сеть даёт генератору возможность выпрямить , но ничто его к этому не принуждает. Метрики улучшаются, не достигая идеальных значений: метрика разделимости равна 3.79 при нижней границе 1, а PPL в конце обучения снова растёт.
- Разделение на грубые, средние и тонкие стили обнаруживается, а не задаётся. Какие атрибуты окажутся в каких слоях, зависит от данных и запуска обучения, а некоторые факторы, например причёска, распределены по нескольким группам.
- Демодуляция приближённа. Она выравнивает дисперсию выхода только при выполнении своего статистического предположения и требует групповых свёрток с весами для каждого сэмпла.
- Компромиссы остаются. Регуляризация длины пути может стоить FID на менее структурированных наборах данных, усечение обменивает разнообразие на качество, а эквивариантной относительно поворотов StyleGAN3-R нужно примерно вдвое больше GPU-часов, чем StyleGAN2.
- Один вид объектов на модель. Результаты всех трёх статей о StyleGAN получены на наборах объектов одного вида — лиц, автомобилей, кошек, спален или пляжей, — часто выровненных. FFHQ выровнен и обрезан; для проверки эквивариантности в StyleGAN3 созданы невыровненные версии FFHQ и MetFaces.
Итоги#
- Вход GAN подчиняется фиксированному распределению, которое должно покрывать данные, поэтому отсутствующие комбинации факторов вынуждают искривлённое, запутанное отображение из в изображения.
- InfoGAN добавляет код и максимизирует вариационную нижнюю оценку взаимной информации между и изображением; на MNIST он без меток находит класс цифры, поворот и ширину, но коды проектируются вручную, а остальная часть остаётся запутанной.
- StyleGAN отображает через MLP из 8 слоёв в , начинает синтез с обучаемой константы, вводит через аффинное отображение и AdaIN в каждом слое, добавляет попиксельный шум для стохастических деталей и регуляризует смешиванием стилей. Грубые стили несут позу и форму, средние — черты лица, тонкие — цвет и микроструктуру; усечение сжимает к .
- Длина перцептивного пути и линейная разделимость измеряют распутанность без энкодера; обе метрики говорят в пользу , а не .
- StyleGAN2 заменяет зависящую от данных нормализацию AdaIN модуляцией весов и демодуляцией , что убирает капли; добавляет регуляризацию длины пути, поощряющую ортогональную матрицу Якоби; вычисляет регуляризаторы лениво; заменяет прогрессивный рост генератором с обходными связями и остаточным дискриминатором. FID на FFHQ падает с 4.40 до 2.84.
- StyleGAN3 устраняет алиасинг, рассматривая карты признаков как непрерывные сигналы, и это избавляет от прилипания текстуры при том же FID.
Код#
Модулированная свёртка с весами для каждого сэмпла, выполненная как одна групповая свёртка, и численная проверка тождества, лежащего в основе регуляризации длины пути. Код работает около секунды на CPU.
import torch
import torch.nn.functional as F
torch.manual_seed(0)
# 1. Модулированная свёртка 3x3 с весами для каждого сэмпла, выполненная как одна групповая свёртка.
N, C, k, H = 4, 64, 3, 32 # 4 сэмпла, по 64 входных и выходных канала
x = torch.randn(N, C, H, H) # н. о. р. входы с единичной дисперсией
w = torch.randn(C, C, k, k) / (C * k * k) ** 0.5
s = torch.exp(1.5 * torch.randn(N, C)) # свой вектор стиля для каждого сэмпла
wm = w[None] * s[:, None, :, None, None] # модуляция: (N, C_out, C_in, k, k)
wd = wm * (wm.pow(2).sum([2, 3, 4], keepdim=True) + 1e-8).rsqrt() # демодуляция
def conv(weights):
y = F.conv2d(x.reshape(1, N * C, H, H), weights.reshape(N * C, C, k, k), groups=N)
return y.reshape(N, C, H - 2, H - 2)
for name, wt in [("modulated", wm), ("demodulated", wd)]:
sd = conv(wt).std(dim=(2, 3)) # ст. отклонение каждого выходного канала каждого сэмпла
print(f"{name:12s} std of channels: min {sd.min():.2f}, max {sd.max():.2f}")
# modulated std of channels: min 3.31, max 6.62
# demodulated std of channels: min 0.92, max 1.06
# 2. Приём для длины пути: J^T y равно градиенту g(w) . y по w.
g = torch.nn.Sequential(torch.nn.Linear(8, 32), torch.nn.LeakyReLU(0.2), torch.nn.Linear(32, 100))
wv = torch.randn(8, requires_grad=True)
y = torch.randn(100) # случайное направление в пространстве «изображений»
J = torch.autograd.functional.jacobian(g, wv) # 100 x 8
(grad,) = torch.autograd.grad(g(wv) @ y, wv)
print("max |J^T y - grad| =", f"{(J.T @ y - grad).abs().max():.1e}")
# max |J^T y - grad| = 3.6e-07 (округление float32)
Дальше#
StyleGAN управляет тем, что генерирует: грубые и тонкие стили, регулятор усечения, направления в . Но у него по-прежнему нет пути обратно от изображения к коду. Обращение — это оптимизация, которую запускают отдельно для каждой фотографии, и ничто в обучении не гарантирует, что у реального изображения вообще есть хороший код. Следующая заметка даёт GAN энкодер, обучаемый вместе с генератором: состязательные автоэнкодеры и α-GAN.
Где посмотреть изображения#
Эти модели лучше всего оценивать по сэмплам. В каждой строке указано, где их найти; номера рисунков относятся к указанной версии на arXiv.
- InfoGAN (Chen et al., 2016; arXiv v1): изменение одного латентного кода за раз на MNIST на рисунке 2 (класс цифры, поворот, ширина), на трёхмерных лицах на рисунке 3, на трёхмерных стульях на рисунке 4, на SVHN на рисунке 5 и на CelebA на рисунке 6.
- StyleGAN (Karras, Laine and Aila, 2019; arXiv v3): неотобранные лица FFHQ на рисунке 2; смешивание стилей на рисунке 3; стохастическая изменчивость от шумовых входов на рисунках 4 и 5; трюк усечения на рисунке 8; неотобранные спальни, автомобили и кошки LSUN на рисунках 10–12; репозиторий с видео результатов.
- StyleGAN2 (Karras et al., 2020; arXiv v2): артефакты-капли на рисунке 1 и их устранение демодуляцией на рисунке 3; фазовые артефакты прогрессивного роста на рисунке 6; отобранные вручную сэмплы на рисунке 11 и неотобранные сэмплы для каждого набора данных на рисунке 12; репозиторий с видео результатов и примерами изображений.
- StyleGAN3 (Karras et al., 2021; arXiv v4): прилипание текстуры на рисунке 1; внутренние карты признаков StyleGAN2 и StyleGAN3 на рисунке 6; неотобранные сэмплы для FFHQ-U, MetFaces-U, AFHQv2 и Beaches на рисунках 7–10; страница проекта с видео. Прилипание текстуры видно только в движении, поэтому видео говорят больше, чем рисунки.
Литература#
- X. Chen, Y. Duan, R. Houthooft, J. Schulman, I. Sutskever, P. Abbeel. InfoGAN: Interpretable representation learning by information maximizing generative adversarial nets. NeurIPS, 2016. Раздел 4: целевая функция с взаимной информацией; раздел 5: вариационная нижняя оценка и лемма 5.1; раздел 7 и приложение C: эксперименты и архитектуры.
- T. Karras, S. Laine, T. Aila. A style-based generator architecture for generative adversarial networks. CVPR, 2019. Раздел 2: генератор, формула 1 (AdaIN), таблица 1; раздел 3: смешивание стилей, шум, таблица 2; раздел 4: длина перцептивного пути и линейная разделимость, таблицы 3–4; приложение A: FFHQ; приложение B: усечение в .
- T. Karras, S. Laine, M. Aittala, J. Hellsten, J. Lehtinen, T. Aila. Analyzing and improving the image quality of StyleGAN. CVPR, 2020. Раздел 2: капли, демодуляция весов (формулы 1–3); раздел 3: регуляризация длины пути и ленивая регуляризация (формула 4); раздел 4: архитектуры без прогрессивного роста, таблицы 1–2; раздел 5: проекция; приложения B–C.
- T. Karras, M. Aittala, S. Laine, E. Härkönen, J. Hellsten, J. Lehtinen, T. Aila. Alias-free generative adversarial networks. NeurIPS, 2021. Разделы 2–3: интерпретация как непрерывных сигналов и переработанный генератор; рисунок 5: результаты.
- X. Huang, S. Belongie. Arbitrary style transfer in real-time with adaptive instance normalization. ICCV, 2017. AdaIN.
- R. Zhang, P. Isola, A. A. Efros, E. Shechtman, O. Wang. The unreasonable effectiveness of deep features as a perceptual metric. CVPR, 2018. LPIPS — расстояние внутри длины перцептивного пути.