StyleGAN
by 이민영, 이주엽
A Style-Based Generator Architecture for Generative Adversarial Networks
이번 포스터에서는 “A Style-Based Generator Architecture for Generative Adversarial Networks” 논문을 리뷰하겠습니다. 본 논문은 자연스럽고 고해상도의 이미지를 생성해내는 StyleGAN 모델을 소개한 논문으로 CVPR 2019에서 발표되었습니다.
1. Introduction
Generative Adversarial Network (GAN)은 생성모델(generator)와 분류모델(discriminator)로 구성된 생성모델로 목적함수 $V(D, G)$를 minmax problem으로 학습합니다.
\[V(D, G) = \underset{x \thicksim P_{data} (x)}{\mathbb{E}}\Big[log D(x) \Big] + \underset{z \thicksim P_{Z} (z)}{\mathbb{E}}\Big[log \big(1-D(G(x))\big) \Big]\]그런데, GAN모델에서 generator는 black box로 이미지가 생성되고 합성되는 과정을 이해하기 어려우며, 이미지 생성에 사용되는 latent space에 대한 이해 역시 부족하다는 한계가 있습니다. 그래서 이를 해결하고자 style transfer의 개념을 적용한 것이 Style-Based Generator Architecture for Generative Adversarial Networks(StyleGAN)입니다. StyleGAN은 다음과 같은 크게 3가지 측면에서 기여를 했습니다.
- 기존의 quality metric에 대해 SOTA 성능 달성
- Disentanglement를 수치적으로 확인할 수 있는 metrics 소개
- 다양한 고해상도의 human face dataset (FFHQ) 소개
2. Background
StyleGAN을 소개하기에 앞서 관련된 개념을 몇가지 먼저 소개해드리겠습니다.
2.1 PGGAN(Progressive Growing of GANs)1
PGGAN은 해상도가 낮은 이미지부터 높은 이미지까지 점진적으로 이미지를 생성하는 모델로 아래 그림과 같이 latent vector z를 normalization한 것을 input으로 하여 이미지 생성을 학습하는 모델입니다. StyleGAN은 PGGAN을 base로 한 생성모델로 PGGAN의 생성 결과가 entanglement한 문제를 해결하고자 하였습니다.
[출처] PGGAN1
2.2 Entanglement v.s. Disentanglement
Entanglement와 Disentanglement를 해석하자면 Entanglement란 꼬여있는 상태를 말하고 Disentanglement는 잘 분리되어 있는 상태를 말합니다. GAN에서 disentanglement하다는 것은 latent space가 linear subspace로 구성된다는 것을 의미합니다. 쉽게 말하자면 특징들이 서로 분리가 되어있어 한 특징을 변화시켰을 때 변화시키고자한 특징만 영향을 받는 것이 disentanglement이고 특징들이 서로 얽혀 구분하기 힘든 경우 한 특징을 변화시키고자 하였지만 연결된 다른 특징들도 같이 변화하는 것을 entanglement라고 할 수 있습니다.
그림을 보면 남성 이미지에 긴머리를 추가하고자 하였는데 긴머리와 관련된 특징들이 눈, 머리 등과 관련이 있다면 아래쪽 그림과 같이 여성 이미지가 생성이 될 것입니다. 이렇게 특징들이 얽혀있는 관계가 entanglement인 것이고, 위쪽 그림처럼 긴머리를 추가하고자 하였을 때 긴머리만 추가될 수 있도록 특징들이 분리되어 있는 상태를 disentanglement하다고 하는 것입니다. 그래서 생성모델에서 특정 특징만 조작하고 싶은 경우 latent space를 disentanglement하게 만드는 것이 중요한 것입니다.
2.3 Style Transfer
Styel transfer는 콘텐츠 이미지(x)와 스타일 이미지(y)가 주어진 경우 콘텐츠 이미지의 주요 형태를 유지하면서 스타일 이미지의 스타일과 유사하게 바꾸는 것을 말합니다. 아래 그림처럼 A사진을 콘텐츠 이미지로 주어졌을 때 다양한 화가들의 화풍을 스타일 이미지로 주어주면 콘텐츠 이미지와 같이 주택의 형태와 배치는 유지하되 그려지는 화풍이 스타일 이미지를 따르도록 합성하는 것입니다.
[출처] Style Transfer2
이때 스타일 이미지에서 스타일을 잘 추출해내고 콘텐츠 이미지에 그 스타일을 잘 입히는 것이 중요한데, style transfer에서 많이 사용되는 기법 중 하나가 AdaIN(Adaptive Instance Normalization)입니다. AdaIN은 콘텐츠 이미지에서 각 특징별로 스타일을 뺀 뒤 스타일 이미에서 뽑은 스타일을 특징별로 입혀주는 방법입니다. 아래 식에서 $\frac{x - \mu(x)}{\sigma(x)}$ 는 콘텐츠 이미지의 특징에서 스타일을 빼주는 연산이고, style scaling factor $\sigma(y)$를 곱하고 style bias factor $\mu(y)$를 더해주는 부분이 스타일 이미지에서 추출한 스타일을 입혀주는 부분입니다. 위 연산이 normalization연산으로 이루어져서 normalization이라는 이름이 붙게 되었고, AdaIN 연산에서 중요한 점은 이미지별로 normalization이 진행되는 것이 아니라 각 특징, 즉 instance 별로 normalization이 이루어지기 때문에 Instance Normalization이 된 것입니다.
\[AdaIN(x, y) = \sigma(y) \bigg( \frac{x - \mu(x)}{\sigma(x)} \bigg) + \mu(y)\]2.4 Loss
-
2.4.1 Non-Saturating loss
GAN은 minimax loss를 사용하여 discriminator의 경우 $\text{maximize } log D(X) + log \big(1 - D(G(z)) \big)$를 통해 실제 이미지와 가짜 이미지에 대한 판별확률의 평균을 최대화하고자 하고, generator는 $\text{minimize } log \big(1- D(G(z)) \big)$를 통해 가짜 이미지에 대한 판별 확률을 최소화하고자 하는데 이때 generator의 학습 속도가 discriminator의 학습 속도를 따라가지 못하면서 generator loss가 saturation이 되는 문제가 발생한다고 합니다.
그래서 이를 해결하고자 generator loss를 $\text{maximize } log \big(D(G(z)) \big)$로 변경한 것이 non-saturating loss입니다. 기존 generator loss는 생성된 이미지가 가짜로 판별될 확률을 최소화하였다면 non-saturaling loss는 생성된 이미지가 진짜로 판별될 확률을 최대화시키는 것을 목적으로하는 함수입니다.
-
2.4.2 WGAN-GP
WGAN(Wasserstein GAN)은 일반 GAN의 discriminator의 역할을 Crtitic이 하게 되는데, Discriminator의 경우 실제 이미지와 가짜 이미지를 분류하기 위해 결과값을 확률로 나타내기 위해서 logit을 취해주게 되는데 critic의 경우 이를 확률로 나타내는 것이 아니라 1-Lipschitiz function인 $f$를 통과한 값을 사용하여 실제인지 가짜인지 점수를 계산한다는 점에서 차이가 있습니다. 1-Lipschitiz function은 함수 내 임의의 두 점 사이의 거리가 1보다 작거나 같음을 만족시키는 함수로 WGAN에서는 이를 만족시키기 위해 clipping을 이용하여 함수 $f$의 weight값을 제한했습니다. GAN의 discriminator가 실제 이미지인지 가짜 이미지인지 판별하는 확률을 학습한다면, WGAN의 critic은 함수 $f$가 더 정확한 거리를 갖도록 학습을 하게 되고 실제 이미지와 가짜 이미지의 분포의 차이를 아래 식과 같이 wassersteing distance를 통해 계산하여 그 차이를 최대화 하도록 학습이 진행됩니다.
WGAN은 네트워크가 깊어지면 수렴하지 못한다는 문제가 있었고 Lipschitz 조건을 만족시키기 위해 clipping을 사용하였던 것을 penalization으로 사용한 것이 WGAN-GP입니다. WGAN-GP는 실제 이미지 분포와 가짜 이미지 분포 사이의 gradient norm을 1로 만들도록 penalty를 부과하였고 아래 식과 같은 loss 식을 사용하였고 이를 WGAN-GP loss라고 합니다.
\[L = \underset{\hat{x} \thicksim P_g}{\mathbb{E}} \bigg[D(\hat{x}) \bigg] - \underset{x \thicksim P_r}{\mathbb{E}}\bigg[D(x) \bigg] + \lambda \underset{\hat{x} \thicksim P_{\hat{x}}}{\mathbb{E}}\Big[\big(\Vert\nabla_{\hat{x}} D(\hat{x}) \Vert_2 - 1 \big)^2 \Big]\]3.StyleGAN
StyleGAN은 discriminator의 경우 PGGAN의 구조를 그대로 사용하였으며, generator의 구조는 아래 그림의 (b)와 같이 크게 3가지로 나눌 수 있습니다. Non-linear mapping network, Synthesis network, Adding bias 3가지 구조에 대해 하나씩 소개해드리겠습니다.
[출처] Style GAN3
3.1 Non-linear mapping network
기존에 PGGAN의 경우 그림의 (a)와 같이 latent vector z를 그대로 normalization을 하여 생성모델에 입력하였습니다. 이때 latent vector z는 uniform distribution이나 gaussian distribution과 같은 고정된 분포에서 샘플링 되는데, 생성모델을 학습하게 되면 latent space가 학습되는 이미지의 분포와 유사해지도록 학습이 진행됩니다. 이때 PGGAN과 같이 사용되는 latent space가 고정되어 있는 경우 latent space를 학습 데이터의 분포와 맞춰가는 과정에서 entanglement가 발생하게 됩니다.
위 그림에서와 같이 주어진 학습 데이터에 긴머리의 남성 데이터가 없는 경우가 있는데 latent space가 이러한 학습 분포를 따라가는데 고정된 distribution을 학습분포를 따르게 하다보면 그림에서 (c)와 같이 뒤틀림이 발생하여 entanglement가 발생하게 됩니다. 이렇게 되는 경우 앞서 설명드린 것과 같이 조정하고 싶은 스타일만 조정되는 것이 아니라 연결되어버린 특징들도 함께 변화하면서 원하지 않은 결과의 이미지를 생성하게 되는 것입니다.
그래서 StyleGAN에서는 이를 해결하고자 latent vector z를 바로 생성모델에 입력시키지 않고 non-linear mapping network $f: Z \rightarrow W$ 를 통해 Z를 intermediate latent space W로 매핑시킨 뒤 입력시키는 과정을 도입했습니다. W는 고정되지 않은 분포를 가지기 때문에 학습데이터와 같은 분포를 따르도록 학습이 되어도 entanglement 문제를 줄여서 보다 disentanglement한 특징 학습이 가능합니다. 이를 통해 Z를 그대로 사용한 경우보다 W를 통해 이미지를 생성하면서 style을 합성하는 과정에서 각 특징들을 linear하게 변화하게 해줄 수 있습니다.
논문에서는 latent space Z와 intermediate latent space W의 차원을 모두 512차원으로 동일하게 설정하였고 Z에서 W로 mapping시키는 non-linear mapping function으로 8개의 layer로 구성된 MLP를 사용하였습니다. MLP를 통한 mapping network의 구현 코드는 다음과 같습니다.
class StyledGenerator(nn.Module):
def __init__(self, code_dim=512, n_mlp=8):
super().__init__()
self.generator = Generator(code_dim)
layers = [PixelNorm()]
for i in range(n_mlp):
layers.append(EqualLinear(code_dim, code_dim))
layers.append(nn.LeakyReLU(0.2))
self.style = nn.Sequential(*layers)
def forward(self, input, noise=None, step=0, alpha=-1, mean_style=None, style_weight=0, mixing_range=(-1, -1)):
styles = []
if type(input) not in (list, tuple):
input = [input]
for i in input:
styles.append(self.style(i))
batch = input[0].shape[0]
if mean_style is not None:
styles_norm = []
for style in styles:
styles_norm.append(mean_style + style_weight * (style - mean_style))
styles = styles_norm
return self.generator(styles, noise, step, alpha, mixing_range=mixing_range)
def mean_style(self, input):
style = self.style(input).mean(0, keepdim=True)
return style
3.2 Synthesis Network
Non-linear mapping network를 통해 mapping시킨 intermediate latent vector w를 이용하여 새로운 이미지를 생성해내는 곳이 synthesis network입니다. 기존 GAN은 nomalizaing한 latent vector z를 그대로 input으로 사용하여 이미지를 생성하였는데, StyleGAN은 constant tensor로부터 이미지를 생성해내기 시작합니다. constant tensor에 적용되는 기본적인 구조는 PGGAN과 유사하게 convolution 연산과 upsampling 과정을 통해 점차 해상도를 높여가면서 이미지를 생성해내게 됩니다. 이때 각 convolution layer 이후에 AdaIN 연산을 적용하여 스타일을 설정해주는 과정이 추가되었습니다. Style transfer에서 사용되는 AdaIN의 경우 스타일을 추출할 스타일 이미지가 따로 존재하였지만, StyleGAN에서는 non-linear mapping network를 통해 얻은 intermediate latent vector w에 affine transformation을 적용하여 스타일 $y = (y_s, y_b)$를 만들었습니다. 이렇게 얻은 스타일 $y$를 이용한 AdaIN 연산을 다음과 같습니다.
\[AdaIN(x_i, y) = y_{s,i} \frac{x_i - \mu(x_i)}{\sigma(x_i)} + y_{b,i}\]위 식과 같이 feature map $x_i$를 각 특징별로 normalizing을 한 뒤 w에 affine transformation을 적용하여 얻은 스타일 $y$에서 scaling factor $y_s$를 통해 scale를 조정해주고 bias factor $y_b$를 통해 bias term을 추가해주었습니다. AdaIN class의 코드는 다음과 같습니다.
class AdaptiveInstanceNorm(nn.Module):
def __init__(self, in_channel, style_dim):
super().__init__()
self.norm = nn.InstanceNorm2d(in_channel)
self.style = EqualLinear(style_dim, in_channel * 2)
self.style.linear.bias.data[:in_channel] = 1
self.style.linear.bias.data[in_channel:] = 0
def forward(self, input, style):
style = self.style(style).unsqueeze(2).unsqueeze(3)
gamma, beta = style.chunk(2, 1)
out = self.norm(input)
out = gamma * out + beta
return out
그런데 이 과정에서 모든 AdaIN 과정에 동일한 intermediat latent vector w를 사용하게 되면 각 layer에서 학습되는 스타일들끼리 correlation이 발생할 수 있다는 문제가 있습니다. 따라서 StyleGAN을 mixing regularization을 적용하여 이러한 문제를 해결하고자 하였습니다.
이미지를 생성하는 과정에서 한개의 latent code를 사용하는 것이 아니라 서로 다른 두개의 latent code $z_1$과 $z_2$를 사용하여 이미지를 생성해내는 것입니다. 각 latent code는 non-linear mapping network를 통해 $w_1$과 $w_2$로 매핑된 뒤 AdaIN을 통해 이미지를 생성하였고 한번에 하나의 latent code만 사용하였습니다. 그리고 특정 layer를 기준으로 그 layer 이전에는 $w_1$을 사용하여 이미지 생성을 학습하였고 그 이후는 $w_2$를 이용하는 style mixing 과정을 통해 이를 구현하였습니다. Style mixing을 통해 모든 레이어에서 같은 w를 사용하지 않고 두개의 $w_1$과 $w_2$를 일정 구간을 기준으로 따로 적용하여 style로 인한 correlation을 줄여줄 수 있었습니다.
Style Mixing이 일어나는 layer의 위치에 따라 생성된 이미지의 결과는 아래의 그림과 같이 달라졌습니다. $4^2 - 8^2$로 coarse한 해상도의 이미지를 생성하는 layer에서 style mixing이 이루어진 경우 regularization에 사용된 $w_2$가 보다 high-level의 측면에서 이미지를 생성하는 것에 영향을 주어, 포즈, 얼굴형, 안경의 유무 등을 결정하였고 이는 그림에서 상위 3개의 결과를 통해 확인할 수 있습니다. Middle layer인 $16^2 - 32^2$ 해상도의 이미지를 생성하는 layer에서 style mixing이 이루어진 경우 $w_2$는 보다 작은 scale의 이미지를 변화시켜 얼굴 표정, 머리 스타일, 눈을 감은지 여부 등을 결정하였고 이는 4번째와 5번째 행의 결과에서 볼 수 있습니다. 그림의 마지막 행의 결과는 style mixing이 가장 fine한 layer인 $64^2 - 1024^2$에서 이루어진 결과이고 이를 통해 $w_2$가 보다 머리 색이나 세밀한 부분을 조정한 것을 알 수 있습니다.
[출처] Style GAN3
3.3 Adding Noise
Style transfer에서 사용되는 AdaIN과, correlation을 줄이기 위한 mixing regularization을 사용하는 synthesis network를 통해 다양한 스타일의 이미지를 생성할 수 있게 되었는데, 사람들 마다 머리결, 모공, 주근깨 등과 같은 세부적인 특징들은 확률적으로 결정되게 됩니다. 그래서 이러한 자세한 특징까지 생성하기 위해 본 논문에서는 각 레이어마다 noise를 추가하여 stochastic한 변화를 주었습니다. 다음 그림은 생성된 이미지에서 추가하는 noise를 다르게 한 결과 (b)와 noise를 추가하였을 때 변화된 100개의 다양한 이미지의 standard deviation (c)를 보여주는 그림입니다. (b)를 보면 서로 다른 noise들이 미세하게 머리결을 다르게 이미지를 생성하는 것을 확인할 수 있고 이러한 noise를 추가하는 것이 전체적인 이미지를 변화시키는 것이 아니라 (c)와 같이 머리나 실루엣, 배경 일부, 눈동자 반사 등과 같이 stochastic한 부분에만 영향을 주는 것을 알 수 있습니다.
[출처] Style GAN3
이러한 noise는 추가되는 layer의 위치에 따라 생성하는 이미지의 변화 정도가 달랐습니다. 아래 그림에서 (b)는 어떠한 noise도 추가하지 않은 경우이고 (a)는 모든 layer에 noise를 추가한 상태, (c)는 $64^2 - 1024^2$ 해상도의 이미지를 생성하는 fine layer에 noise를 추가한 결과이며, (d)는 $4^2 - 32^2$ 해상도의 이미지를 생성하는 coarse layer에 noise를 추가했을 때 생성되는 이미지의 결과를 보여줍니다. 이를 통해 noise를 추가한 경우 (a)가 생성된 이미지가 더 사실적인 것을 확인할 수 있고, fine layer에 noise를 추가하게 되면 머리 컬의 굵기나 배경의 디테일, 모공 등의 미세한 특징을 주는 것을 볼 수 있었고(c), coarse layer에 noise가 추가된 경우는 보다 큰 scale의 머리 모양과 배경 특징에 변화를 주는 것을 확인할 수 있었습니다(d).
[출처] Style GAN3
Noise를 추가하는 noise class의 코드는 다음과 같습니다.
class NoiseInjection(nn.Module):
def __init__(self, channel):
super().__init__()
self.weight = nn.Parameter(torch.zeros(1, channel, 1, 1))
def forward(self, image, noise):
return image + self.weight * noise
3.4 Generation Result
-
Quantitative result
이렇게 구성된 StyleGAN을 통해 생성된 이미지의 quantitaive한 결과는 다음 표를 통해 확인할 수 있습니다.
[출처] Style GAN3
이는 CelebA-HQ 데이터셋과 FFHQ 데이터셋에 대해서 실험한 결과로 baseline인 PGGAN에서 하나씩 개선한 모델의 결과를 보여줍니다. CelebA-HQ는 WGAN-GP loss만 사용하였으며 FFHQ는 WGAN-GP는 기본 PGGAN에만 사용하였고 그 뒤의 모델에서는 non-saturaing loss과 R1 regularization을 사용한 결과입니다. A는 기본적인 PGGAN의 결과이고 여기에서 bilinear up/downsampling, hyperparmeter tuning 등을 추가한 결과는 B를 통해 확인할 수 있습니다. 여기에 mapping layer를 추가하고 AdaIN 연산을 사용한 결과가 C, 기존 input layer를 분리시키고 constant tensor에서 이미지 생성을 시작한 모델의 결과가 D에 나와있으며, noise를 추가한 모델은 E, mixing regularization까지 추가한 모델은 F를 통해 그 성능을 확인할 수 있습니다.
이를 통해 StyleGAN이 제안한 모델이 두 데이터셋에 대해 모두 SOTA성능을 달성하는 것을 확인할 수 있습니다. 성능은 FID(Frechet Inception Distance)를 사용하였고 이는 실제 이미지와 생성된 이미지간의 분포의 차이를 계산하는 지표로 값이 낮을 수록 좋으며, 위 표를 통해서 각 요소들을 추가할 수록 FID 수치가 낮아지는 것을 보았을 때 StyleGAN이 제안하는 방법들이 좋은 이미지 생성에 도움이 된다고 할 수 있습니다.
다음 표는 Style Mixing의 결과를 quantiative하게 확인할 수 있는 결과로 0%는 style mixing을 사용하지 않은 경우이고 각 비율은 하나의 latent code로 만든 이미지와 style mixing을 사용하여 만든 이미지의 비율을 의미하고 number of latents는 style mixing에 사용된 latent code의 수를 의미합니다. 표를 통해서 확인할 수 있듯이 mixing regularization을 한 경우가 그 성능이 더 좋은 것을 볼 수 있고 이를 통해 style regularization을 통해 좋은 이미지를 생성할 수 있다고 말할 수 있습니다.
[출처] Style GAN3
-
Qualitative result
다음 그림은 FFHQ 데이터셋을 통해 StyleGAN으로 생성한 이미지 결과입니다. 그림을 보면 생성된 이미지의 퀄리티가 높은 것을 확인할 수 있으며 안경과 같은 세부적인 특징들도 잘 생성해내고 있는 것을 확인할 수 있습니다. 이 때 생성된 이미지의 경우 truncation trick을 사용하여 보다 좋은 퀄리티의 이미지를 샘플링한 결과입니다. 데이터는 그 분포를 보았을 때 대부분 평균에 가까이 있고 평균과 멀어질 수록 이상한 이미지가 분포해 있을 수 있습니다. GAN을 통해 학습된 latent space 역시 이와 비슷한 양상을 따를 수 있기 때문에 학습된 분포의 평균 근처에서 샘플링한 w를 이용하여 이미지를 생성하는 경우가 더 좋은 퀄리티를 만들 수 있기 때문에 truncation trick을 통해 latent space에서 중간에 가까운 값이 샘플링 되도록 truncation을 한 뒤 w을 얻도록 하였습니다.
$\psi$가 0에 가까울 수록 평균 이미지를 샘플링하게 되고 $\psi$가 1이면 truncation을 하지 않을 결과를 의미합니다. truncation trick은 좋은 퀄리티의 이미지를 생성해내기 위한 것으로 이 그림을 만들기 위해서 $\psi$를 0.7로 하여 사용하였지만, 그 외에 FID를 통해 성능을 비교하기 위해서는 사용하지 않았다고 합니다.
[출처] Style GAN3
4.Disentanglement Studies
Disentanglement는 latent space의 각 값이 생성된 이미지의 하나의 요소를 잘 조절할 수 있는가를 의미합니다. 일반적으로 latent space의 값들의 분포와 이미지에서 각 요소들의 분포가 일치하는 것이 아주 어렵기 때문에 좋은 disentanglement를 구성하기 어렵습니다. 하지만 StyleGAN에서는 latent space $\mathcal{Z}$가 각 요소들의 분포에 해당하지 않더라도 3.1에서 소개한 mapping network를 통해서 변형시킨 $\mathcal{W}$를 각 요소들의 분포와 유사하게 가져갈 수 있기 때문에 훨씬 유리하며, flow model을 생각하시면 이해하기 쉬울 것 같습니다.
[출처] Style GAN3
본 논문에서는 perceptual path length와 linear separability라는 disentanglement를 평가할 수 있는 두 개의 지표를 제안하였습니다.
4.1 Perceptual Path Length
Perceptual Path Length는 latent vector가 조금씩 변화할 때 생성되는 이미지의 시각적 정보가 얼마나 smooth하게 변화하는지를 평가하는 지표입니다. 이를 평가하기 위해 $\mathcal{Z}$ space와 $\mathcal{W}$ space에서 각각 interpolation을 하며 perceptual path length $\mathcal{l_Z}$, $\mathcal{l_W}$를 구하며, 구하는 방법은 다음과 같습니다.
\[\begin{align} &\mathcal{l_Z} = \mathbb{E}[{1 \over \epsilon^2}d(G(\mathrm{slerp}(z_1, z_2; t)), G(\mathrm{slerp}(z_1, z_2; t + \epsilon)))] \\ &\mathcal{l_W} = \mathbb{E}[{1 \over \epsilon^2}d(G(\mathrm{lerp}(f(z_1), f(z_2); t)), G(\mathrm{lerp}(f(z_1), f(z_2); t + \epsilon)))] \end{align}\]$\mathcal{Z}$ space에서 interpolation을 하는 경우 앞의 이미지(b)의 경우와 같이 구형으로 이루어져있기 때문에 spherical interpolation(구면선형보간법, $\mathrm{slerp}$)을 사용하며, $\mathcal{W}$ space에서 interpolation을 하는 경우 linear interpolation(선형보간법, $\mathrm{lerp}$)를 사용합니다. 함수 $f(z)$는 mapping network를 의미하며, 생성되는 이미지의 정보 추출을 위한 함수 $g(x)$로는 학습된 VGG16을 통해 얻는 embedding을 사용합니다.
4.2 Linear Separability
Linear Separability는 latent space상에서 하나의 linear hyperplane으로 서로 다른 두 개의 set을 얼마나 잘 구분할 수 있는가를 평가하는 지표입니다. Label을 달기 위해(두 개의 셋을 각각 0 또는 1의 값으로 labeling) CelebA-HQ 데이터셋으로 학습된 classifier를 이용하며, 선형으로 이미지들을 구분하기 때문에 linear SVM을 사용합니다.
Classifier의 경우에는 discriminator와 같은 구조를 사용하였으며, CelebA-HQ 데이터셋의 40가지 요소를 기준으로 각각 학습을 시켰습니다. 그 이후 generator를 통해 200,000장의 이미지를 만들어 classifier로 분류시키고, 결과의 confidence를 기준으로 100,000장의 이미지를 선정하였습니다.
앞서 선정된 100,000장의 라벨링된 이미지의 latent vector들을 가지고 요소 각각에 대해 linear SVM을 학습시킨 뒤, 엔트로피 $\mathrm{H}(Y \vert X)$를 계산하여 최종 separability score $\mathrm{exp}(\sum_{i}\mathrm{H}(Y_i \vert X_i))$를 계산하였습니다.
Result
[출처] Style GAN3
앞선 실험에서 사용한 모델들을 perceptual path length와 linear separability로 평가한 결과입니다. Mixing을 사용하지 않은 StyleGAN 모델이 perceptual path length 면에서 가장 높은 성능을 보이고, 50%의 mixing을 사용한 StyleGAN 모델이 liear separability에서 가장 높은 성능을 보였습니다.
Mapping network의 layer 수에 따른 실험도 진행하였습니다. Style을 적용하지 않은 traditional model에서도 mapping network를 사용한 모델이 더 좋은 이미지와, 높은 disentanglement를 보이는 것을 확인할 수 있습니다. 하지만 mapping network를 사용하였을 때나, 사용하지 않았을 때나 style을 적용한 모델이 더 성능이 좋은 것을 확인할 수 있으며, mapping network가 깊어질 수록 더 좋아지는 것을 확인할 수 있습니다.
5. New Dataset (FFHQ)
본 논문에서는 Flicker-Faces-HQ(FFHQ)라는 새로운 데이터셋을 제안하였습니다. FFHQ는 이름에서 알 수 있듯이 Flickr에서 모은 데이터셋이며, 70,000장의 $1024^2$ 해상도의 이미지가 포함되어 있습니다. 이는 나이, 민족, 배경, 안경, 선글라스, 모자 등에서 CelebA-HQ보다 더 다양한 이미지를 포함하고 있습니다.
[출처] Style GAN3
6. Conclusion
6.1 StyleGAN
StyleGAN의 장점은 다음과 같습니다.
- 해상도 별 style을 적용하여 일관된 이미지 생성
- Noise를 추가하여 이미지의 세부적인 다양성 확보
- Mapping network를 구성하여 disentanglement 개선
- Disentanglement를 평가하는 지표인 Perceptual Path Length와 Linear Separability 제안
- FFHQ 데이터셋 제안
하지만 StyleGAN을 사용하여 생성된 이미지에는 다음과 같은 문제점이 있습니다.
- Blob-like artifact: AdaIN을 사용한 normalization 과정에서 64 X 64 이미지부터 물방울과 같은 모양의 노이즈나 부자연스러운 부분 발생
- Phase artifact: progressive growing 과정에서 일부 feature들이 얼굴의 움직임을 따르지 않음
[출처] Style GAN2 official video4
6.2 Future Work
- StyleGAN25에서는 AdaIN을 제거하고 구조를 개선하여 앞서 설명한 물방울 모양의 노이즈를 제거하고, 이미지의 품질을 개선하였습니다.
[출처] Style GAN2 5
- StyleGAN에서 style을 분리를 하였지만 이를 조정하기 위해서는 수동적인 작업이 필요했습니다. StyleClip6에서는 StyleGAN의 latent space 분리 및 조정하는 방법을 이용하여 text기반으로 style을 변화시킬 수 있도록 하였습니다.
[출처] Style Clip 6
-
Karras, T., Aila, T., Laine, S., & Lehtinen, J. (2017). Progressive growing of gans for improved quality, stability, and variation. arXiv preprint arXiv:1710.10196. ↩ ↩2
-
Gatys, L. A., Ecker, A. S., & Bethge, M. (2016). Image style transfer using convolutional neural networks. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 2414-2423). ↩
-
Karras, T., Laine, S., & Aila, T. (2019). A style-based generator architecture for generative adversarial networks. In Proceedings of the IEEE/CVF conference on computer vision and pattern recognition (pp. 4401-4410). ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10
-
https://www.youtube.com/watch?v=c-NJtV9Jvp0 ↩
-
Karras, T., Laine, S., Aittala, M., Hellsten, J., Lehtinen, J., & Aila, T. (2020). Analyzing and improving the image quality of stylegan. In Proceedings of the IEEE/CVF conference on computer vision and pattern recognition (pp. 8110-8119). ↩ ↩2
-
Patashnik, O., Wu, Z., Shechtman, E., Cohen-Or, D., & Lischinski, D. (2021). Styleclip: Text-driven manipulation of stylegan imagery. In Proceedings of the IEEE/CVF International Conference on Computer Vision (pp. 2085-2094). ↩ ↩2
Subscribe via RSS