Содержание курса 12 / 33

12 / 33 · GAN

StyleGAN: генератор на основе стилей

Как сделать GAN управляемым: код взаимной информации в InfoGAN; отображающая сеть, обучаемая константа, стили AdaIN в каждом слое, шумовые входы, смешивание стилей, усечение в W и две метрики распутанности в StyleGAN; демодуляция весов, регуляризация длины пути, ленивая регуляризация и архитектуры с обходными связями в StyleGAN2; генератор без алиасинга в StyleGAN3.

На этой странице 14

Предыдущая заметка закончилась GAN, которые дают убедительные лица в разрешении 1024×10241024 \times 1024 и чёткие сэмплы ImageNet. Качество пришло с масштабом: наращивание сетей во время обучения, внимание, бо́льшие батчи и модели. Управляемость вместе с ним не пришла. Кроме метки класса, единственный вход генератора — один вектор шума zz; ничто не говорит, что означает каждое направление в zz, и движение zz в любом направлении меняет сразу много свойств изображения. В этой заметке разобраны два ответа. InfoGAN (Chen et al., 2016) сохраняет генератор и меняет целевую функцию: часть входа должна читаться обратно по изображению. StyleGAN (Karras, Laine and Aila, 2019) сохраняет целевую функцию и меняет генератор: код больше не подаётся на вход, а задаёт «стиль» каждого слоя, а за случайные детали отвечает отдельный шумовой вход. Две следующие работы исправляют то, что StyleGAN сломал: StyleGAN2 (Karras et al., 2020) убирает его артефакты-пятна и сглаживает латентное пространство, а StyleGAN3 (Karras et al., 2021) не даёт мелким деталям прилипать к пиксельной сетке.

Обозначения. PP — распределение данных, DD — дискриминатор, как в заметке о GAN. Входной латентный вектор — z∈Z=R512z \in \mathcal Z = \mathbb R^{512}, z∼N(0,I)z \sim \mathcal N(0, I). В StyleGAN отображающая сеть (mapping network) f:Z→Wf: \mathcal Z \to \mathcal W даёт промежуточный латентный вектор w=f(z)∈W=R512w = f(z) \in \mathcal W = \mathbb R^{512}, синтезирующая сеть (synthesis network) gg превращает ww в изображение, и генератор равен G=g∘fG = g \circ f. Обучаемое аффинное отображение AℓA_\ell превращает ww в стиль (style) yℓ=(ys,ℓ,yb,ℓ)y_\ell = (y_{s,\ell}, y_{b,\ell}) слоя ℓ\ell: один масштаб и одно смещение на канал. В части об InfoGAN cc — латентный код (latent code), который подаётся генератору рядом с zz, x=G(z,c)x = G(z, c), а qϕ(c∣x)q_\phi(c \mid x) — вспомогательная сеть, угадывающая cc по xx (в статье она называется QQ; в остальном курсе QQ — распределение модели). HH — энтропия, DKLD_{\mathrm{KL}} — KL-дивергенция (KL divergence), в натах (nats).

Почему z запутан#

Возьмём генератор лиц и будем двигать zz вдоль одной координаты. Обученный GAN может менять несколько вещей сразу: голова поворачивается, но лицо при этом становится лицом другого человека, волосы меняют длину, а освещение смещается. Нам хотелось бы такое представление (representation), в котором одно направление меняет один фактор изменчивости (factor of variation), например позу, и не трогает остальные, например личность: распутанное (disentangled) представление в смысле заметки о β-VAE. Целевая функция GAN этого не требует. Дискриминатор оценивает изображения целиком; он поощряет реалистичные выходы, а не аккуратное использование zz.

Есть и структурная причина, которую статья о StyleGAN формулирует явно (Karras, Laine and Aila, 2019, раздел 4 и рисунок 6). Генератор отображает фиксированное распределение, N(0,I)\mathcal N(0, I), в данные. Сэмплируется каждая область Z\mathcal Z, поэтому каждая область должна давать реалистичное изображение, причём с частотами обучающего набора. Пусть два фактора, мужественность и длина волос, закодированы на двух осях, а в обучающем наборе нет длинноволосых мужчин. Отображение, сохраняющее оси прямыми, сэмплировало бы этот отсутствующий угол. Чтобы избежать этого, отображение из Z\mathcal Z в факторы изображения должно искривиться так, чтобы у запрещённой комбинации не было прообраза, а искривлённое отображение означает, что движение вдоль одной оси Z\mathcal Z меняет оба фактора. На реальных наборах данных, где факторы коррелированы, некоторая запутанность Z\mathcal Z неизбежна.

InfoGAN: код, который должно раскрыть изображение#

InfoGAN разделяет вход на несжимаемый шум zz и код c=(c1,…,cM)c = (c_1, \dots, c_M) с факторизованным априорным распределением p(c)=∏ip(ci)p(c) = \prod_i p(c_i) и подаёт оба в генератор, x=G(z,c)x = G(z, c) (Chen et al., 2016, раздел 4). Обычный GAN мог бы игнорировать cc: решение pG(x∣c)=pG(x)p_G(x \mid c) = p_G(x) устраивает дискриминатор ничуть не хуже. Поэтому InfoGAN требует высокой взаимной информации (mutual information) между кодом и изображением,

I(c;x)=H(c)−H(c∣x),H(c∣x)=−E(c,x)log⁡p(c∣x),\begin{gathered} I(c; x) = H(c) - H(c \mid x),\\ H(c \mid x) = -\mathbb E_{(c, x)} \log p(c \mid x), \end{gathered}

то есть уменьшения неопределённости относительно cc после того, как изображение увидено. I=0I = 0, когда xx не зависит от cc; она максимальна, когда cc можно точно прочитать по xx. Целевая функция добавляет её к игре GAN с весом λ\lambda,

min⁡Gmax⁡D  V(D,G)−λ I(c;G(z,c)),\min_G \max_D \; V(D, G) - \lambda\, I\big(c; G(z, c)\big),

где VV — функция ценности (value function) GAN.

Нижняя оценка взаимной информации#

Апостериорное распределение p(c∣x)p(c \mid x) генератора неизвестно, поэтому II вычислить нельзя. InfoGAN оценивает её снизу с помощью вспомогательного распределения qϕ(c∣x)q_\phi(c \mid x) (раздел 5). Прибавим и вычтем log⁡qϕ\log q_\phi внутри условной энтропии:

−H(c∣x)=Ex Ec∼p(c∣x)log⁡p(c∣x)=Ex Ec∼p(c∣x)log⁡qϕ(c∣x)+Ex DKL(p(⋅∣x) ∥ qϕ(⋅∣x))≥Ex Ec∼p(c∣x)log⁡qϕ(c∣x),\begin{aligned} -H(c \mid x) &= \mathbb E_{x}\, \mathbb E_{c \sim p(c \mid x)} \log p(c \mid x)\\ &= \mathbb E_{x}\, \mathbb E_{c \sim p(c \mid x)} \log q_\phi(c \mid x)\\ &\quad + \mathbb E_x\, D_{\mathrm{KL}}\big(p(\cdot \mid x)\,\|\,q_\phi(\cdot \mid x)\big)\\ &\ge \mathbb E_{x}\, \mathbb E_{c \sim p(c \mid x)} \log q_\phi(c \mid x), \end{aligned}

поскольку KL-дивергенция неотрицательна. Оставшееся математическое ожидание берётся по парам (c,x)(c, x) из совместного распределения генератора. Это совместное распределение можно сэмплировать в прямом направлении, c∼p(c)c \sim p(c), z∼p(z)z \sim p(z), x=G(z,c)x = G(z, c), ни разу не сэмплируя апостериорное распределение (лемма 5.1 статьи формулирует эту смену порядка). Прибавив H(c)H(c), получаем вариационную нижнюю оценку

LI(G,qϕ)=Ec∼p(c), z∼p(z)log⁡qϕ(c∣G(z,c))+H(c)≤I(c;G(z,c)),\begin{aligned} \mathcal L_I(G, q_\phi) &= \mathbb E_{c \sim p(c),\, z \sim p(z)} \log q_\phi\big(c \mid G(z, c)\big) + H(c)\\ &\le I\big(c; G(z, c)\big), \end{aligned}

которая точна, когда qϕq_\phi совпадает с апостериорным распределением. Априорное распределение p(c)p(c) фиксировано, поэтому H(c)H(c) — константа. Игра InfoGAN имеет вид

min⁡G, qϕmax⁡D  V(D,G)−λ LI(G,qϕ).\min_{G,\, q_\phi} \max_D \; V(D, G) - \lambda\, \mathcal L_I(G, q_\phi) .

Максимизация LI\mathcal L_I по qϕq_\phi подгоняет угадывающую сеть к текущему генератору; максимизация по GG заставляет генератор делать cc легко угадываемым. Это тот же приём, что и в ELBO: KL-дивергенция относительно приближённого апостериорного распределения отбрасывается, потому что она неотрицательна. Там он даёт оценку правдоподобия, здесь — информации.

На практике qϕq_\phi делит все свёрточные слои с дискриминатором и добавляет один полносвязный выходной слой, так что дополнительные затраты по сравнению с GAN невелики (раздел 6). Для категориального кода выходной слой — softmax, и −log⁡qϕ-\log q_\phi — кросс-энтропия. Для непрерывного кода выходной слой выдаёт среднее μ(x)\mu(x) и стандартное отклонение σ(x)\sigma(x) факторизованного гауссовского распределения, и

log⁡qϕ(c∣x)=−(c−μ(x))22σ(x)2−ln⁡σ(x)−12ln⁡2π:\log q_\phi(c \mid x) = -\frac{(c - \mu(x))^2}{2\sigma(x)^2} - \ln \sigma(x) - \tfrac12 \ln 2\pi :

квадрат ошибки между кодом и его оценкой, взвешенный уверенностью сети. Для дискретных кодов вес равен λ=1\lambda = 1; для непрерывных берут меньшее λ\lambda, поскольку тогда в слагаемое входит дифференциальная энтропия и его масштаб отличается от масштаба целевой функции GAN (раздел 6).

Разобранный пример (игрушечные числа). У равномерного категориального кода с K=10K = 10 значениями H(c)=ln⁡10≈2.303H(c) = \ln 10 \approx 2.303 ната. Поскольку для дискретного распределения log⁡qϕ≤0\log q_\phi \le 0, имеем LI≤ln⁡10\mathcal L_I \le \ln 10, и равенство достигается, только если qϕq_\phi ставит вероятность 1 на истинное cc для каждого сгенерированного изображения: тогда код полностью восстанавливается, и оценка равна наибольшей возможной взаимной информации. Для непрерывного кода c=0.6c = 0.6 и предсказания μ=0.5\mu = 0.5, σ=0.2\sigma = 0.2 слагаемое равно −0.1250+1.6094−0.9189=0.5655-0.1250 + 1.6094 - 0.9189 = 0.5655. Оно положительно, потому что плотность может превышать 1; значение имеют только разности таких слагаемых.

Что нашёл InfoGAN#

На MNIST код состоит из одной категориальной переменной с 10 значениями и двух непрерывных, равномерных на [−1,1][-1, 1], рядом с 62 шумовыми переменными (раздел 7 и приложение C.1). Нижняя оценка быстро достигает H(c)≈2.30H(c) \approx 2.30, тогда как обычный GAN, обученный с той же вспомогательной сетью, почти не сохраняет в изображениях информации о cc (раздел 7.1, рисунок 1). Без каких-либо меток категориальный код сортирует цифры по классам: если сопоставить его значения типам цифр, он классифицирует MNIST с долей ошибок 5%. Один непрерывный код управляет поворотом цифры, другой — её шириной, и генератор подстраивает толщину и стиль штриха, чтобы результат выглядел естественно; проход по кодам от −2-2 до 22, за пределами диапазона обучения, по-прежнему даёт осмысленные цифры (раздел 7.2, рисунок 2). На трёхмерных отрендеренных лицах непрерывные коды находят азимут, угол возвышения, освещение и ширину лица; на стульях — поворот и ширину; на SVHN — освещение и соседние цифры рядом с центральной; на CelebA, с десятью категориальными кодами по десять значений, — позу, очки, причёску и эмоцию (рисунки 3–6).

Где InfoGAN останавливается#

  • Коды выбираются вручную. Сколько кодов, какого типа и с каким априорным распределением — решение, принимаемое до обучения: один код на 10 значений и два непрерывных для MNIST, пять непрерывных кодов для трёхмерных лиц. Каким фактором в итоге управляет каждый код, не выбирается; для трёхмерных лиц и стульев статья показывает для каждого фактора тот из пяти запусков, который больше всего похож на прежние результаты с учителем (рисунки 3–4).
  • Взаимная информация требует меньше, чем распутанность. Она говорит, что cc можно прочитать по изображению. Она не говорит, что каждое cic_i управляет одним фактором и что этого фактора нет в zz.
  • Остальная часть входа остаётся такой же запутанной, как раньше. Бо́льшая часть входа генератора — это zz, и InfoGAN ничего о нём не говорит. В экспериментах используются изображения от 28×2828 \times 28 до 64×6464 \times 64 пикселей.

StyleGAN идёт другим путём: вместо регуляризатора, который требует от фиксированного генератора хорошего поведения, он меняет то, где и как код входит в сеть.

StyleGAN: генератор на основе стилей#

Традиционный генератор, например генератор Progressive GAN, пропускает латентный код только через входной слой. StyleGAN полностью убирает этот входной слой (Karras, Laine and Aila, 2019, раздел 2 и рисунок 1). Код проходит через отображающую сеть в промежуточный латентный вектор ww, ww задаёт стиль каждого свёрточного слоя, синтез начинается с константы, а попиксельный шум даёт случайные детали. Дискриминатор и функция потерь не меняются; все изменения сделаны в генераторе.

Рисунок

Генератор StyleGAN: отображающая сеть, стили и шум

Генератор StyleGANСверху: z, отображающая сеть f и код w. От w идёт горизонтальная шина к четырём блокам A, каждый из которых подаёт стиль в свой блок синтеза. Средний ряд: константа 4×4×512, блоки 4×4, 8×8, 16×16, многоточие, блок 1024² и изображение x. Под каждым блоком — узел B, через который входит шум. Внизу врезка: увеличение, свёртка, сложение с шумом, AdaIN со стилем A(w).z512fMLP из 8 слоёвw5121A(ys, yb)AAA3const4×4×51224×42 стиля8×82 стиля16×162 стиля1024²2 стиля…xизображениешумBшумBшумBшумB4внутри блока, дважды на разрешениеувеличение 2×свёртка3×3+B · шумAdaINстиль A(w)затем ещё раз: свёртка, шум, AdaIN5Генератор StyleGANСверху: z, отображающая сеть f и код w. От w вниз идёт шина к блокам A справа, каждый подаёт стиль в свой блок синтеза. Столбец в середине: константа, блоки 4×4, 8×8, 16×16, многоточие, 1024² и изображение x. Слева от каждого блока узел B с шумом. Внизу врезка: увеличение, свёртка, сложение с шумом, AdaIN со стилем A(w).z512fMLP из 8 слоёвw5121A(ys, yb)AAA3const4×4×51224×42 стиля8×82 стиля16×162 стиля1024²2 стиля⋮xизображениешумBBBB4внутри блока, ×2↑ 2×свёртка3×3+B · шумAdaINA(w)5
Зелёный — входной код z, синие — промежуточный код w и карты признаков, жёлтые — обучаемые отображения, красный — изображение. Код z входит только в отображающую сеть f (8 полносвязных слоёв, 512 → 512); синтез начинается с обучаемой константы. Шина сверху раздаёт один и тот же w всем слоям, но у каждого слоя своё аффинное отображение A, поэтому стили разные. Снизу в каждый слой добавляется свой шум. На врезке — один из двух проходов блока. Всего 18 слоёв синтеза, по два на разрешения от 4² до 1024²; показаны первые три блока и последний.
  1. Отображающая сеть. Нормированный zz проходит через ff, MLP из 8 слоёв, и становится w∈Ww \in \mathcal W; у обоих по 512 измерений.
  2. Константный вход. Синтез начинается с обучаемого тензора 4×4×5124 \times 4 \times 512.
  3. Стили. Обучаемое аффинное отображение AℓA_\ell своё для каждого слоя превращает ww в стиль yℓy_\ell, который входит через AdaIN после каждой свёртки.
  4. Шум. Обучаемый масштаб BB по каналам распространяет одноканальное изображение гауссовского шума на все каналы; шум прибавляется после каждой свёртки.
  5. Блоки. Два слоя на каждое разрешение от 424^2 до 102421024^2, всего 18. Блок повышает разрешение, а затем дважды применяет свёртку, прибавляет шум и применяет AdaIN; блок 4×44 \times 4 пропускает повышение разрешения и первую свёртку и действует прямо на константу. Свёртка 1×11 \times 1 превращает последнюю карту признаков в RGB. У генератора 26.2 млн параметров против 23.1 млн у традиционного.

Отображающая сеть и пространство W#

Рассуждение первого раздела применимо к Z\mathcal Z, потому что у Z\mathcal Z фиксированное распределение, которое должно соответствовать данным. У W\mathcal W такого ограничения нет. Его плотность сэмплирования — то, во что ff превращает N(0,I)\mathcal N(0, I), поэтому ff может взять на себя искривление, которого требуют данные, и оставить W\mathcal W ближе к прямым осям: в примере выше отсутствующая комбинация может быть просто областью W\mathcal W, куда ff никогда не попадает. Авторы утверждают, что обучение подталкивает именно в эту сторону, поскольку синтезирующей сети должно быть проще генерировать реалистичные изображения из распутанного представления, чем из запутанного (раздел 4). Это гипотеза, и ниже она проверяется двумя метриками.

Отображающая сеть обучается с шагом обучения в 100 раз меньше, чем остальная сеть, потому что более глубокие отображающие сети были неустойчивы при большом шаге обучения (приложение C). Её глубина важна. На FFHQ генератор на основе стилей без отображающей сети, управляемый прямо через zz, достигает FID 5.06; с 8-слойной сетью — 4.40. Добавление 8-слойной отображающей сети перед традиционным генератором тоже улучшает его FID, с 5.25 до 4.87, и делает промежуточное пространство гораздо лучше разделимым, чем его входное пространство (таблица 4; метрика разделимости определена ниже).

Обучаемая константа вместо входного слоя#

После добавления отображающей сети и AdaIN сети уже не было пользы от получения кода на первом слое. Поэтому StyleGAN начинает синтез с обучаемой константы 4×4×5124 \times 4 \times 512, инициализированной единицами (раздел 2.1 и приложение C), и изображение зависит от ww только через стили. Этот шаг оставил FID на FFHQ почти прежним и улучшил его на CelebA-HQ (конфигурации C и D в таблице ниже), а роль стилей стала чистой: всё содержимое изображения задают они и шум.

Стили через AdaIN#

Каждый стиль y=(ys,yb)=Aℓ(w)y = (y_s, y_b) = A_\ell(w) управляет слоем через адаптивную нормализацию по экземпляру (adaptive instance normalization, AdaIN), которая для канала ii карты признаков xx определяется так (раздел 2, формула 1):

AdaIN(xi,y)=ys,i xi−μ(xi)σ(xi)+yb,i,\mathrm{AdaIN}(x_i, y) = y_{s,i}\,\frac{x_i - \mu(x_i)}{\sigma(x_i)} + y_{b,i},

где μ(xi)\mu(x_i) и σ(xi)\sigma(x_i) — среднее и стандартное отклонение канала ii по его пространственным позициям, как в нормализации по экземпляру. AdaIN с разобранным примером описана в заметке о StarGAN, где StarGAN v2 вводит свой код стиля тем же способом. В стиле по два числа на канал, поэтому его размерность вдвое больше числа карт признаков слоя, а смещения ysy_s инициализируются единицей (приложение C).

Почему стили действуют локально, следует из нормализации. AdaIN сначала приводит каждый канал к нулевому среднему и единичной дисперсии и только потом применяет новый масштаб и сдвиг. Поэтому статистики, которые задаёт стиль, не переживают следующую AdaIN: та снова их нормализует. Каждый стиль управляет одной свёрткой, пока его не перекроет следующая AdaIN (раздел 3). Кроме того, стиль пространственно инвариантен: один масштаб и одно смещение на всю карту признаков. Он меняет то, что следующая свёртка подчёркивает, сразу во всех позициях, и это подходит для глобальных свойств: позы, освещения и общего вида.

Шум для случайных деталей#

Многое в портрете случайно, и это безобидно: точное расположение волос, щетины, веснушек и пор можно перерисовать, не меняя того, как мы воспринимаем лицо. Традиционный генератор должен получать такую изменчивость из своего входа, что расходует ёмкость сети и часто проявляется в виде повторяющихся узоров. StyleGAN даёт каждому слою свежее одноканальное изображение некоррелированного гауссовского шума, масштабированное по каналам обучаемыми множителями (BB на рисунке) и прибавляемое после свёртки, перед нелинейностью (раздел 2 и рисунок 1).

Сеть сама, без подсказок, учится использовать два входа для разных целей (разделы 3.2–3.3). Если перерисовать шум при фиксированном ww, личность и поза не меняются, а сдвигаются волосы, части силуэта и фон; шум только в грубых слоях (424^2 до 32232^2) даёт крупные локоны, шум только в тонких слоях (64264^2 до 102421024^2) — мелкие завитки и поры кожи, а без шума изображение выглядит невыразительным, «живописным» (рисунки 4–5). Стиль масштабирует карты признаков целиком, поэтому он естественный канал для глобальных решений; шум независим в каждом пикселе, и управление позой через него давало бы пространственно несогласованные изображения, которые наказывает дискриминатор.

Смешивание стилей: грубые, средние и тонкие стили#

Каждый слой получает собственный стиль, поэтому ничто не заставляет все стили происходить из одного и того же ww. Смешивание стилей (style mixing) пропускает два кода z1,z2z_1, z_2 через отображающую сеть и использует w1w_1 для слоёв до точки переключения, а w2w_2 — после неё. Во время обучения StyleGAN делает это для фиксированной доли изображений, со случайной точкой переключения, в качестве регуляризатора: это не даёт сети предполагать, что соседние стили коррелированы (раздел 3.1). Эффект виден, когда при тестировании смешивают несколько кодов. FID на FFHQ для 1–4 случайных кодов и случайных точек переключения (таблица 2):

Смешивание при обучении1 код2 кода3 кода4 кода
0% (конфигурация E)4.428.2212.8817.41
50%4.416.108.7111.61
90% (конфигурация F)4.405.116.889.03
100%4.835.176.638.40

При 90% качество с одним кодом не меняется, а смешивание сеть переносит гораздо лучше. Смешивание двух лиц показывает, чем управляет каждая группа слоёв (рисунок 3):

  • грубые стили (424^2 до 828^2): поза, общая причёска, форма лица и очки;
  • средние стили (16216^2 до 32232^2): более мелкие черты лица, причёска, открытые или закрытые глаза;
  • тонкие стили (64264^2 до 102421024^2): в основном цветовая гамма и микроструктура.

Грубые слои определяют компоновку, тонкие — текстуру. Это разделение — свойство обученной сети, а не меток: на спальнях LSUN грубые стили задают точку съёмки, средние — мебель, а тонкие — цвета и материалы (приложение E). Отдельный код для каждого слоя задаёт расширенное пространство W+\mathcal W^+, которое используется для редактирования в заметке о редактировании по точкам.

Усечение в W#

Области с низкой плотностью данных трудно выучить любой генеративной модели, и сэмплирование только из хорошо выученного центра латентного пространства улучшает среднее качество ценой разнообразия. StyleGAN делает это в W\mathcal W (приложение B). Вычислим центр масс wˉ=Ez∼p(z)f(z)\bar w = \mathbb E_{z \sim p(z)} f(z) и сдвинем каждый сэмпл к нему:

w′=wˉ+ψ (w−wˉ),ψ<1.w' = \bar w + \psi\,(w - \bar w), \qquad \psi < 1 .

ψ\psi умножает каждое отклонение от wˉ\bar w: при ψ=0.7\psi = 0.7 каждый ww сохраняет 70% своего расстояния от центра, а квадрат расстояния — 49%. Это сжатие, а не отбраковка. При ψ=0\psi = 0 каждый сэмпл превращается в «среднее лицо» FFHQ, которое выглядит похоже у всех обученных сетей; отрицательное ψ\psi даёт «антилицо», у которого меняются на противоположные ракурс, очки, возраст, окраска, длина волос и часто пол (рисунок 8). Трюк усечения в BigGAN (truncation trick) действует на zz, и Brock et al. обнаружили, что его выдерживают лишь некоторые сети, даже с ортогональной регуляризацией; усечение в W\mathcal W работает надёжно без изменений функции потерь (приложение B). Поскольку у каждого слоя свой стиль, усечение можно применять только к грубым слоям, не трогая мелкие детали: неотобранные сэмплы статьи используют ψ=0.7\psi = 0.7 для слоёв от 424^2 до 32232^2 (рисунок 2). Все значения FID вычислены без усечения.

Результаты на FFHQ#

Статья также вводит набор FFHQ (Flickr-Faces-HQ): 70 000 изображений лиц в разрешении 1024×10241024 \times 1024, собранных с Flickr под свободными лицензиями, автоматически выровненных и обрезанных, с гораздо большим разнообразием возраста, этнической принадлежности, фона и аксессуаров, чем в CelebA-HQ (приложение A). FID (меньше — лучше), вычисленный по 50 000 изображений из обучающего набора, указан по наименьшему значению за время обучения (таблица 1):

КонфигурацияCelebA-HQFFHQ
A. Базовая модель Progressive GAN7.798.04
B. + билинейная передискретизация, более долгое обучение, настройка6.115.25
C. + отображающая сеть и стили5.344.85
D. + обучаемая константа, без входного слоя5.074.88
E. + шумовые входы5.064.42
F. + регуляризация смешиванием5.174.40

На FFHQ конфигурации B–F используют ненасыщающуюся функцию потерь (non-saturating loss) со штрафом R1 (γ=10\gamma = 10), а на CelebA-HQ используется WGAN-GP. От улучшенной традиционной базовой модели B к модели на основе стилей E FID снижается на 15.8% на FFHQ и на 17.2% на CelebA-HQ. Обучение заняло около недели на восьми GPU Tesla V100 (приложение C). На LSUN FID составил 2.65 для спален в разрешении 2562256^2, 3.27 для автомобилей в разрешении 512×384512 \times 384 и 8.53 для кошек в разрешении 2562256^2 (рисунки 10–12).

Измерение распутанности без энкодера#

Существующие метрики распутанности требуют энкодера из изображений в латентные коды, которого у GAN нет. StyleGAN предлагает две метрики, которым не нужны ни энкодер, ни известные факторы изменчивости (раздел 4).

Длина перцептивного пути#

Если латентное пространство запутано, интерполяция между двумя кодами может порождать признаки, которых нет ни на одном из концов, — признак искривлённого пути в пространстве изображений. Длина перцептивного пути (perceptual path length, PPL) измеряет, насколько меняется изображение при малых шагах интерполяции, с помощью расстояния LPIPS dd. В Z\mathcal Z используется slerp, потому что zz гауссовский (раздел 4.1, формула 2):

lZ=E[1ε2 d(G(slerp(z1,z2;t)),G(slerp(z1,z2;t+ε)))],\begin{aligned} l_{\mathcal Z} = \mathbb E\Big[\frac{1}{\varepsilon^2}\, d\big(&G(\mathrm{slerp}(z_1, z_2; t)),\\ &G(\mathrm{slerp}(z_1, z_2; t + \varepsilon))\big)\Big], \end{aligned}

где z1,z2∼p(z)z_1, z_2 \sim p(z), t∼U(0,1)t \sim U(0, 1) и ε=10−4\varepsilon = 10^{-4}. В W\mathcal W векторы не нормированы, поэтому интерполяция линейная (формула 3):

lW=E[1ε2 d(g(lerp(f(z1),f(z2);t)),g(lerp(f(z1),f(z2);t+ε)))].\begin{aligned} l_{\mathcal W} = \mathbb E\Big[\frac{1}{\varepsilon^2}\, d\big(&g(\mathrm{lerp}(f(z_1), f(z_2); t)),\\ &g(\mathrm{lerp}(f(z_1), f(z_2); t + \varepsilon))\big)\Big]. \end{aligned}

LPIPS — квадрат расстояния, поэтому для гладкого пути d≈ε2×d \approx \varepsilon^2 \times (квадрат скорости изображения вдоль пути), и деление на ε2\varepsilon^2 оставляет средний квадрат перцептивной скорости. Математическое ожидание оценивается по 100 000 сэмплов, а изображения обрезаются до лица. Короткий путь в W\mathcal W может быть несправедлив к Z\mathcal Z: если W\mathcal W — выпрямленная версия Z\mathcal Z, прямая между двумя достижимыми точками W\mathcal W может проходить через области, которые ff никогда не порождает и которые gg отрисовывает плохо. Поэтому статья приводит также версию по концам (endpoint), t∈{0,1}t \in \{0, 1\}, которая сравнивает только изображения вблизи кодов, действительно порождаемых ff.

Линейная разделимость#

Если латентное пространство распутано, бинарный признак, например пол, должен отделяться гиперплоскостью (раздел 4.2). Проверка такова: обучить 40 классификаторов для 40 атрибутов CelebA на CelebA-HQ; сгенерировать 200 000 изображений; классифицировать каждое и оставить более уверенную половину, 100 000 размеченных кодов на атрибут; обучить линейный SVM, предсказывающий метку по коду (zz или ww); вычислить условную энтропию H(Y∣X)H(Y \mid X) метки классификатора YY при известной стороне гиперплоскости XX. Метрика равна exp⁡(∑i=140H(Yi∣Xi))\exp\big(\sum_{i=1}^{40} H(Y_i \mid X_i)\big). Она равна 1, когда каждый атрибут идеально предсказывается гиперплоскостью, и растёт вместе с информацией, которую гиперплоскости упускают; меньше — лучше.

Обе метрики на FFHQ, меньше — лучше (таблицы 3 и 4):

ГенераторПространствоPPL, полнаяPPL, по концамРазделимость
традиционный (B)Z\mathcal Z412.0415.310.78
на основе стилей, без шума (D)W\mathcal W446.2376.63.61
+ шумовые входы (E)W\mathcal W200.5160.63.54
+ смешивание 90% (F)W\mathcal W234.0195.93.79
традиционный + 8-слойная отображающая сетьZ\mathcal Z896.2902.0170.29
традиционный + 8-слойная отображающая сетьW\mathcal W324.5212.26.52

W\mathcal W неизменно лучше разделимо, чем Z\mathcal Z, и пути в нём короче. Самый наглядный случай — традиционный генератор с отображающей сетью: его промежуточное пространство легко разделить (6.52), а входное пространство становится гораздо хуже (170.29), что подтверждает утверждение о том, что входное пространство GAN может быть сколь угодно запутанным. Регуляризация смешиванием немного ухудшает длину пути и разделимость; авторы предполагают, что из-за неё W\mathcal W труднее кодировать факторы, охватывающие несколько масштабов. Они также отмечают, что PPL медленно растёт в конце обучения, тогда как FID продолжает падать (приложение D): качество отчасти куплено запутанностью.

StyleGAN2: устранение артефактов#

На изображениях StyleGAN часто есть характерное пятно, похожее на каплю воды, а подвижные детали, например зубы, иногда остаются на месте. StyleGAN2 связывает первое с AdaIN, а второе — с прогрессивным ростом и добавляет регуляризатор, который делает генератор более гладким (Karras et al., 2020). Весь анализ сосредоточен на W\mathcal W — пространстве, которое важно для синтезирующей сети.

Капли и нормализация в AdaIN#

Капля появляется примерно на разрешении 64×6464 \times 64, присутствует во всех картах признаков, даже когда на итоговом изображении её трудно заметить, и усиливается на более высоких разрешениях (раздел 2, рисунок 1). Гипотеза StyleGAN2: AdaIN нормализует среднее и дисперсию каждой карты признаков отдельно, и это уничтожает любую информацию, которую несут величины признаков относительно друг друга. Генератор проносит эту информацию о силе сигнала мимо нормализации, создавая сильный локализованный выброс, который доминирует в статистиках; с таким выбросом он может масштабировать сигнал в остальных местах как угодно. Гипотезу подтверждает эксперимент: если убрать шаг нормализации, капли полностью исчезают. В редких случаях (возможно, 0.1% изображений), когда капли нет, изображение сильно искажено (рисунок 15).

Разобранный пример (игрушечные числа). Карта признаков из 16 позиций несёт узор ±a\pm a на 15 из них (8 положительных, 7 отрицательных) и выброс SS на 16-й. После нормализации по экземпляру амплитуда узора равна 1.035 при S=0S = 0, каково бы ни было aa: нормализация отбрасывает масштаб, выбранный предыдущими слоями. С выбросом она зависит от отношения S/aS/a; при a=1a = 1: 0.737 при S=4S = 4, 0.386 при S=10S = 10 и 0.103 при S=40S = 40, а сам выброс становится большим значением (3.85 при S=40S = 40) в своей позиции. Выброс работает как регулятор громкости, который нормализация не может убрать.

Сначала StyleGAN2 упрощает блок (раздел 2.1, рисунок 2). AdaIN разделяется на две части: нормализацию и модуляцию. Смещение и шум выносятся из той части сети, где действует стиль, чтобы их эффект больше не масштабировался вместе со стилем; затем нормализация и модуляция действуют только на стандартное отклонение, без среднего; наконец, смещение, шум и нормализация константного входа удаляются. Остаётся блок «модуляция, свёртка, нормализация», и теперь нормализацию можно заменить.

Модуляция и демодуляция весов#

Обозначим через wijkw_{ijk} вес свёртки от входного канала ii к выходному каналу jj в позиции ядра kk, а через sis_i — масштаб стиля для входного канала ii (в этом разделе ww с тремя индексами — вес, а не латентный вектор). Вывод занимает три шага (раздел 2.2, формулы 1–3).

Шаг 1: модуляция как изменение весов. Умножить входной канал ii на sis_i и затем применить свёртку — то же самое, что применить свёртку с масштабированными весами, потому что свёртка линейна по каждому входному каналу:

wijk′=si wijk.w'_{ijk} = s_i\, w_{ijk} .

Шаг 2: масштаб выхода. Предположим, что входные активации — независимые случайные величины с единичным стандартным отклонением. Выход jj в одной позиции равен ∑i,kwijk′ xi,k\sum_{i,k} w'_{ijk}\, x_{i,k} — сумме независимых слагаемых, а дисперсия такой суммы равна сумме дисперсий, ∑i,kwijk′2⋅1\sum_{i,k} w'^2_{ijk} \cdot 1. Её стандартное отклонение — норма L2L_2 весов выходного канала jj:

σj=∑i,kwijk′2.\sigma_j = \sqrt{\textstyle\sum_{i,k} w'^2_{ijk}} .

Шаг 3: демодуляция. Нормализация по экземпляру нужна для того, чтобы убрать влияние ss из статистик выхода. Деление выхода jj на σj\sigma_j делает это напрямую, и это деление тоже можно внести в веса, с малым ϵ\epsilon для численной устойчивости:

wijk′′=wijk′∑i,kwijk′2+ϵ.w''_{ijk} = \frac{w'_{ijk}}{\sqrt{\sum_{i,k} w'^2_{ijk} + \epsilon}} .

Теперь весь блок стиля — одна свёртка, веса которой зависят от стиля. Нормализация вычисляется по весам, а не по картам признаков, поэтому выброс в данных больше не меняет того, как данные масштабируются, и капля теряет смысл. Цена в том, что демодуляция опирается на статистическое предположение о входах, а не на их фактическое содержимое; авторы называют её более слабой, чем нормализация по экземпляру. Похожие рассуждения о дисперсии используются при инициализации весов, а вычисление совпадает с нормализацией весов (weight normalization). Веса различны для каждого сэмпла в мини-батче, чего стандартные процедуры свёртки не поддерживают; реализация превращает мини-батч в один сэмпл с NN группами и использует групповые свёртки (grouped convolution; приложение B). Функции активации масштабируются так, чтобы сохранять ожидаемую дисперсию сигнала.

Разобранный пример (игрушечные числа). У одного выходного канала свёртки 1×11 \times 1 с двумя входами веса w=(0.6,0.8)w = (0.6, 0.8), поэтому независимые входы с единичной дисперсией дают выход с дисперсией 0.36+0.64=10.36 + 0.64 = 1. Стиль s=(3,0.5)s = (3, 0.5) даёт w′=(1.8,0.4)w' = (1.8, 0.4) и дисперсию выхода 3.24+0.16=3.43.24 + 0.16 = 3.4. Демодуляция делит на σ=3.4=1.844\sigma = \sqrt{3.4} = 1.844: w′′=(0.976,0.217)w'' = (0.976, 0.217), и дисперсия снова равна 0.953+0.047=10.953 + 0.047 = 1. Стиль по-прежнему определяет смесь — первый вход теперь даёт 95% дисперсии вместо 36%, — но не общий масштаб. Если бы два входа были коррелированы с коэффициентом 0.5, те же веса дали бы 1+2⋅0.5⋅0.976⋅0.217=1.211 + 2 \cdot 0.5 \cdot 0.976 \cdot 0.217 = 1.21: предположение имеет значение. Рисунок повторяет этот эксперимент на игрушечной свёртке 3×33 \times 3 с шестью случайными стилями.

Рисунок

Демодуляция возвращает выходу единичную дисперсию

Стандартные отклонения выходов модулированной свёрткиДля шести примеров по три столбика точек на логарифмической оси от 0.5 до 20. Жёлтые точки разбросаны от 1.4 до 14.9, синие лежат у пунктирной линии 1, полые — от 0.65 до 1.2.0.51251020ст. отклонение выхода (лог. шкала)пример 1пример 2пример 3пример 4пример 5пример 6только модуляцияс демодуляцией, i.i.d. входс демодуляцией, гладкий входСтандартные отклонения выходов модулированной свёрткиДля шести примеров по три столбика точек на логарифмической оси от 0.5 до 20. Жёлтые точки разбросаны от 1.4 до 14.9, синие лежат у пунктирной линии 1, полые — от 0.65 до 1.2.0.51251020ст. отклонение выхода (лог. шкала)123456только модуляцияс демодуляцией, i.i.d. входс демодуляцией, гладкий входпример
Игрушечная свёртка 3×3 с 8 входными и 8 выходными каналами, веса из N(0, 1/72), вход — карты 26×26 из независимых стандартных нормальных величин (выход 24×24). У каждого из шести примеров свой вектор стиля, s_i = exp(1.5 n_i) со стандартными нормальными n_i. Для каждого примера точки показывают стандартные отклонения всех 8 выходных каналов. Жёлтые — только модуляция w′ = s_i w: от 1.4 до 14.9, разные для разных примеров и каналов. Они совпадают с предсказанием σ_j = (Σ w′²)^½ с точностью 7%. Синие — после демодуляции w″ = w′/σ_j: от 0.93 до 1.05; остаток — ошибка оценки стандартного отклонения по 576 позициям. Полые — те же демодулированные веса, но вход пространственно коррелирован (сумма 3×3, делённая на 3: дисперсия 1, корреляция соседей 2/3): от 0.65 до 1.20. Демодуляция опирается на предположение о независимых входах единичной дисперсии и точна настолько, насколько оно верно. Числа игрушечные.

Новая архитектура убирает капли, сохраняя полное управление через стили. 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 подталкивала бы к вырожденному генератору с нулевой полнотой, поэтому авторы регуляризуют более слабое свойство: шаг фиксированной длины в W\mathcal W должен давать изменение изображения фиксированной величины, в каком бы направлении ни был сделан шаг (раздел 3.2).

Локальное поведение gg в точке ww описывает её матрица Якоби Jw=∂g(w)/∂wJ_w = \partial g(w) / \partial w. Регуляризатор имеет вид (формула 4)

Lpl=Ew, y∼N(0,I)(∥Jw⊤y∥2−a)2,\mathcal L_{\mathrm{pl}} = \mathbb E_{w,\, y \sim \mathcal N(0, I)} \big(\lVert J_w^\top y \rVert_2 - a\big)^2 ,

где yy — случайное изображение с нормально распределёнными пикселями, w=f(z)w = f(z) при z∼N(0,I)z \sim \mathcal N(0, I), а aa — скользящее среднее ∥Jw⊤y∥2\lVert J_w^\top y \rVert_2 (коэффициент затухания 0.99), так что общий масштаб сеть выбирает сама. Матрица Якоби никогда не строится явно. По правилу дифференцирования сложной функции градиент скаляра g(w)⋅yg(w) \cdot y по ww равен Jw⊤yJ_w^\top y, поэтому один обратный проход даёт Jw⊤y=∇w(g(w)⋅y)J_w^\top y = \nabla_w \big(g(w) \cdot y\big).

Почему это поощряет равномерное отображение? Запишем сингулярное разложение Jw⊤=UΣV⊤J_w^\top = U \Sigma V^\top с сингулярными числами σ1,…,σL\sigma_1, \dots, \sigma_L (L=512L = 512, размерность W\mathcal W). Поворот V⊤V^\top не меняет распределения стандартного нормального yy, компоненты после первых LL умножаются на ноль, а UU не меняет длин, поэтому ∥Jw⊤y∥\lVert J_w^\top y\rVert распределена как (∑i=1Lσi2y~i2)1/2\big(\sum_{i=1}^{L} \sigma_i^2 \tilde y_i^2\big)^{1/2} с независимыми стандартными нормальными y~i\tilde y_i. Когда aa равно средней длине, штраф равен дисперсии этой длины. Сумма Q=∑iσi2y~i2Q = \sum_i \sigma_i^2 \tilde y_i^2 имеет среднее ∑iσi2\sum_i \sigma_i^2 и дисперсию 2∑iσi42\sum_i \sigma_i^4, и при больших LL дисперсия Q\sqrt Q приближённо равна Var⁡Q/(4 EQ)=∑iσi4/(2∑iσi2)\operatorname{Var} Q / (4\,\mathbb E Q) = \sum_i \sigma_i^4 / \big(2\sum_i \sigma_i^2\big). При фиксированной ∑iσi2\sum_i \sigma_i^2 неравенство Коши–Буняковского (∑iσi2)2≤L∑iσi4\big(\sum_i \sigma_i^2\big)^2 \le L \sum_i \sigma_i^4 делает эту величину наименьшей, когда все σi\sigma_i равны: матрица Якоби ортогональна с точностью до общего масштаба, сохраняет длины и не сжимает ни одного направления. Статья приходит к тому же выводу через рассуждение о концентрации меры (приложение C). Игрушечные числа: при L=512L = 512 и ∑iσi2=512\sum_i \sigma_i^2 = 512 равные сингулярные числа дают дисперсию 0.50, а если половина из них втрое больше другой половины — 0.82 (0.81 при моделировании методом Монте-Карло с 20 000 испытаний). Спектральная нормализация, напротив, ограничивает только наибольшее сингулярное число (см. заметку о WGAN); её добавление в генератор, вместе с этими изменениями или вместо них, всегда ухудшало FID (раздел 3.2 и приложение E). Слагаемое берётся с весом γpl=ln⁡2/(r2(ln⁡r−ln⁡2))\gamma_{\mathrm{pl}} = \ln 2 / \big(r^2 (\ln r - \ln 2)\big) для выходного разрешения rr; такой выбор подошёл для всех наборов данных (приложение 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 вычисляет их реже, чем основную функцию потерь: раз в k=16k = 16 мини-батчей для дискриминатора и раз в k=8k = 8 для генератора, в отдельном проходе (раздел 3.1 и приложение B). Слагаемое умножается на kk, чтобы сохранить величину его градиентов, а поскольку теперь за kk основными шагами следует один шаг регуляризации, шаг обучения и коэффициенты затухания Adam корректируются с c=k/(k+1)c = k/(k+1): λ′=cλ\lambda' = c\lambda, β1′=β1 c\beta_1' = \beta_1^{\,c}, β2′=β2 c\beta_2' = \beta_2^{\,c}. Вычисление R1 раз в 16 мини-батчей не повредило: FID с 4.39 до 4.38 на FFHQ (таблица 1, строка C). С демодуляцией весов, ленивой регуляризацией (lazy regularization) и оптимизацией кода скорость обучения в разрешении 102421024^2 выросла с 37 до 61 изображения в секунду на восьми GPU V100 (раздел 6).

Без прогрессивного роста#

Прогрессивный рост (progressive growing) — схема обучения, которую StyleGAN унаследовал от Progressive GAN, — даёт StyleGAN сильное предпочтение определённых положений для деталей: когда лицо поворачивается, зубы или глаза могут оставаться выровненными по камере, а затем перескакивать в следующее предпочтительное положение (раздел 4, рисунок 6). Объяснение авторов: при наращивании каждое разрешение какое-то время служит выходным, поэтому его подталкивают порождать детали максимальной частоты; обученная сеть сохраняет чрезмерно высокие частоты в промежуточных слоях, и это нарушает инвариантность к сдвигу (рисунок 16).

StyleGAN2 сохраняет цель наращивания — сначала низкие разрешения, мелкие детали позже, — не меняя сеть во время обучения. Статья сравнивает три генератора и три дискриминатора, обученных без наращивания (раздел 4.1, рисунок 7): исходные сети прямого распространения; обходные связи (skip connections), при которых генератор повышает разрешение и суммирует RGB-выходы всех разрешений, а дискриминатор получает изображение пониженного разрешения на каждом разрешении; и остаточные (residual) сети, у которых две ветви складываются и умножаются на 1/21/\sqrt2, чтобы сохранить дисперсию. FID и PPL на FFHQ (таблица 2):

Генератор / дискриминаторисходныйобходные связи на входахостаточный
исходный4.32 / 2654.18 / 2353.58 / 269
обходные связи на выходах4.33 / 1693.77 / 1273.31 / 125
остаточный4.35 / 2033.96 / 2293.79 / 243

Обходные связи в генераторе сильно улучшают PPL, а остаточный дискриминатор улучшает FID. StyleGAN2 использует генератор с обходными связями и остаточный дискриминатор. Если затем измерить, какой вклад каждое разрешение вносит в суммарный выход, видно, что генератор сам ведёт себя как при прогрессивном росте: в начале доминируют низкие разрешения, позже — более высокие. Но слои 102421024^2 так и не стали главными, и изображения выглядели как повышенная резкость изображений 5122512^2. Удвоение числа карт признаков в слоях от 64264^2 до 102421024^2 обеих сетей исправило это ценой 22% и 21% дополнительных параметров у генератора и дискриминатора (раздел 4.2, рисунок 8).

Результаты#

FFHQ в разрешении 1024×10241024 \times 1024; для FID и PPL меньше — лучше, для точности и полноты больше — лучше (таблица 1):

КонфигурацияFIDPPLТочностьПолнота
A. StyleGAN4.40212.10.7210.399
B. + демодуляция весов4.39175.40.7020.425
C. + ленивая регуляризация4.38158.00.7190.427
D. + регуляризация длины пути4.34122.50.7150.418
E. + без наращивания, новые G и D3.31124.50.7050.449
F. + большие сети (StyleGAN2)2.84145.00.6890.492
A с большими сетями3.98199.20.7160.422

FID снижается на 35.5%, с 4.40 до 2.84, а полнота растёт с 0.399 до 0.492. Последняя строка показывает, что одна только ёмкость не объясняет выигрыша. PPL здесь — версия по концам в W\mathcal W, вычисленная по целым изображениям, без обрезки до лица, как в статье о 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 использует свёртки 1×11 \times 1 и радиально симметричные фильтры; эквивариантная относительно сдвигов — StyleGAN3-T. Эквивариантность измеряется как PSNR в децибелах между выходом для преобразованного входа и преобразованным выходом (EQ-T для сдвига, EQ-R для поворота, формула 3).

На невыровненном FFHQ в разрешении 102421024^2 (рисунок 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.

Редактирование реальных изображений#

Всё, что описано выше, управляет изображениями, которые генератор сам породил из известного ww. Чтобы отредактировать фотографию, сначала нужно найти ww, изображение которого её воспроизводит: обращение GAN (GAN inversion) — оптимизация по латентному вектору, возможно, отдельно для каждого слоя в W+\mathcal W^+; оно описано вместе с компромиссом между искажением и редактируемостью в заметке о редактировании по точкам. Собственный проектор StyleGAN2 оптимизирует ww и карты шума по LPIPS, добавляя к ww постепенно убывающий шум и используя регуляризатор, который не даёт картам шума переносить согласованный сигнал; он остаётся в W\mathcal W, а не в W+\mathcal W^+, потому что расширенное пространство может воспроизводить произвольные изображения, которые генератор никогда не смог бы породить (раздел 5). Генератор с регуляризацией длины пути обратить гораздо легче: изображения, сгенерированные StyleGAN2, проецируются обратно почти идеально, что позволяет приписать сгенерированное изображение создавшей его сети, тогда как проекции реальных обучающих изображений заметно отличаются от оригиналов (раздел 5.1, рисунки 9–10).

Что изменилось#

Традиционный генераторInfoGANStyleGANStyleGAN2StyleGAN3
Куда входит кодпервый слойпервый слой, как (z,c)(z, c)каждый слой, как стили из w=f(z)w = f(z)каждый слой, как модуляция весовкаждый слой, как модуляция весов
Источник управляемостинетслагаемое взаимной информации со вспомогательной сетьюархитектура: отображающая сеть, стили, шумто жето же
Нормализация в генераторебатч- или попиксельная нормализациябатч-нормализацияAdaINдемодуляция весовдемодуляция, передискретизация с фильтрацией
Случайные деталииз zzиз zzпопиксельный шумпопиксельный шумшум убран
Схема обученияпрогрессивный рост (Progressive GAN)фиксированная сетьпрогрессивный ростG с обходными связями, остаточный D, без наращиваниябез наращивания
Устранённый известный артефакт–тривиальное использование кодазапутанность Z\mathcal Zкапли, фазовые артефактыприлипание текстуры

Ограничения#

  • Нет энкодера. StyleGAN отображает коды в изображения, но не наоборот. Для редактирования реальной фотографии нужно обращение оптимизацией или отдельно обученный энкодер, а то, что лежит за пределами множества значений генератора, недостижимо.
  • Распутанность поощряется, но не гарантируется. Отображающая сеть даёт генератору возможность выпрямить W\mathcal W, но ничто его к этому не принуждает. Метрики улучшаются, не достигая идеальных значений: метрика разделимости W\mathcal W равна 3.79 при нижней границе 1, а PPL в конце обучения снова растёт.
  • Разделение на грубые, средние и тонкие стили обнаруживается, а не задаётся. Какие атрибуты окажутся в каких слоях, зависит от данных и запуска обучения, а некоторые факторы, например причёска, распределены по нескольким группам.
  • Демодуляция приближённа. Она выравнивает дисперсию выхода только при выполнении своего статистического предположения и требует групповых свёрток с весами для каждого сэмпла.
  • Компромиссы остаются. Регуляризация длины пути может стоить FID на менее структурированных наборах данных, усечение обменивает разнообразие на качество, а эквивариантной относительно поворотов StyleGAN3-R нужно примерно вдвое больше GPU-часов, чем StyleGAN2.
  • Один вид объектов на модель. Результаты всех трёх статей о StyleGAN получены на наборах объектов одного вида — лиц, автомобилей, кошек, спален или пляжей, — часто выровненных. FFHQ выровнен и обрезан; для проверки эквивариантности в StyleGAN3 созданы невыровненные версии FFHQ и MetFaces.

Итоги#

  • Вход GAN zz подчиняется фиксированному распределению, которое должно покрывать данные, поэтому отсутствующие комбинации факторов вынуждают искривлённое, запутанное отображение из Z\mathcal Z в изображения.
  • InfoGAN добавляет код cc и максимизирует вариационную нижнюю оценку Elog⁡qϕ(c∣G(z,c))+H(c)\mathbb E \log q_\phi(c \mid G(z, c)) + H(c) взаимной информации между cc и изображением; на MNIST он без меток находит класс цифры, поворот и ширину, но коды проектируются вручную, а остальная часть zz остаётся запутанной.
  • StyleGAN отображает zz через MLP из 8 слоёв в ww, начинает синтез с обучаемой константы, вводит ww через аффинное отображение и AdaIN в каждом слое, добавляет попиксельный шум для стохастических деталей и регуляризует смешиванием стилей. Грубые стили несут позу и форму, средние — черты лица, тонкие — цвет и микроструктуру; усечение сжимает ww к wˉ\bar w.
  • Длина перцептивного пути и линейная разделимость измеряют распутанность без энкодера; обе метрики говорят в пользу W\mathcal W, а не Z\mathcal Z.
  • StyleGAN2 заменяет зависящую от данных нормализацию AdaIN модуляцией весов w′=siww' = s_i w и демодуляцией w′′=w′/∥wj′∥2w'' = w' / \lVert w'_{j} \rVert_2, что убирает капли; добавляет регуляризацию длины пути, поощряющую ортогональную матрицу Якоби; вычисляет регуляризаторы лениво; заменяет прогрессивный рост генератором с обходными связями и остаточным дискриминатором. 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 управляет тем, что генерирует: грубые и тонкие стили, регулятор усечения, направления в W\mathcal W. Но у него по-прежнему нет пути обратно от изображения к коду. Обращение — это оптимизация, которую запускают отдельно для каждой фотографии, и ничто в обучении не гарантирует, что у реального изображения вообще есть хороший код. Следующая заметка даёт 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: усечение в W\mathcal W.
  • 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 — расстояние внутри длины перцептивного пути.