toggle menu

[StyleGAN] A Style-Based Generator Architecture for Generative Adversarial networks

2020. 3. 12. 20:29 Python/머신러닝&딥러닝

1. Abstract

We propose an alternative generator architecture for generative adversarial networks, borrowing from style transfer literature

라고 논문 초반 부분에 나와있다. 해당 논문에의 핵심은, Generator Architecture를 중심적으로 설명하고, 이 Architecture를 기존에 하던 방식(PGGAN)과는 다른 방법으로 구성을 했다라는게 핵심 포인트이다. 또한 Image에 Style을 scale-specific control하게 적용 했다 라고 주장을 하고 있다. 그럼 여기서 Style을 scale-specific control하게 적용한 의미가 무엇인지 한번 짚고 넘어가보자.

 

Q. scale-specific control의 뜻은?

A. Image synthesis(이미지 합성) 과정에서 specific(특정)한 scale로 자유롭게 조절을 해가면서 style을 적용한다는 의미이다.

 

그 다음, 이 논문에서 Interpolation qualitydisentanglement를 측정할 수 있는 새로운 2가지 방법에 대해 소개를 하고 있다.(이 개념은 아주 중요하다고 생각이 든다) 뿐만 아니라, 논문 저자가 모델을 다 만들어놓고 실험을 해보니까 두명의 사람 또는, 그 이상의 사람의 얼굴을 합쳐보니 새로운 얼굴의 사람을 잘 만들어내는 것을 발견하게 되었다.

 

정리를 해보자면,

1) PGGAN의 Generator model의 구조와는 다른 구조로 Generator model을 구성했다.
2) 기존에는 적용할 수 없었지만, stylegan에서는 Image에 Style을 scale-specific하게 control을 했다.
3) interpolation quality와 disentanglement를 측정할 수 있는 새로운 2가지 방법에 대해 소개를 했다.
4) 새로운 고해상도 데이터셋을 공개했다.(FFGQ)
5) 여러 사람의 이미지를 합쳐보니 새로운 이미지를 잘 생성해내는걸 부가적으로 발견했다. 

2. Introduction

StyleGAN은 PGGAN 구조에서 Generator Architecture를 재구성 하였다. 이로 인해서, 기존 PGGAN에서는 불가능 했엇던 "Image synthesis process control"이 가능하게 되었다. 그렇다면 여기서 드는 생각이, Image synthesis process control이 불가능한 PGGAN에선 도대체 학습 결과가 어떻길래 StyleGAN에서는 이게 가능해졌다고 말하는 것일까? 라는 의문이 들었다.

실제로 PGGAN을 이용해서 학습을 해보면, 내가 원하는 모양으로 이미지가 생성이 잘 안될 뿐더러, 생성이 된다고 해도 noise가 약간 끼거나 왜곡되는 현상이 발생이 되게 된다. 그러나 StyleGAN은 style을 입혀주는 방식이다보니 Image synthesis process control이 가능하다고 볼 수 있다.

실제로 내가 PGGAN으로 코드를 짜서 돌려봐도 마음처럼 학습이 잘 안되었었다...

StyleGAN은 "Learned constant input" 즉, mapping network로부터 학습 되어진 입력 w으로 부터 Generator가 Image를 생성하는데 Intermediate latent vector w로 부터 얻은 각각의 style(w1, w2, w3...)들을 Conv layer를 거치는 과정에서 조금씩 적용을 해나간다. 이러한 과정으로 인해 strength 또한 조절이 가능해진다.

 

-> 이 말은 다음 문단에서 더 자세하게 다룰거지만, 간단하게 말을 하자면 latent code에서 여러가지 Z 값들을 mapping network에 입력으로 넣어주어서 w라는 여러개의 값이 나오게 된다. 그래서 이를 적절하게, Random하게 Style을 입혀줄 수 있고, 아니면 임의로 지정해줘서 넣어줄 수 있다. 이런식으로 style들을 conv layer를 거치는 과정에 조금씩 적용을 해주면 strength 또한 조절이 가능해진다 라는 의미이다.

 

 

논문을 읽어보면 "Don't modify the Discriminator or the loss function in the anyway"라고 나와있다. 즉, 논문의 목표는 Generator Architecture 변경을 중심적으로 말을 해서 style을 scale-specific 하게 control이 가능해졌다. 라고 말을 하는것이지 'regularization', 'GAN Loss function', 'hyper parameter'에 대한 이야기를 하기는 하지만 초점을 두면서 말을 하지는 않는다.

 

해당 논문에서는 2가지의 new automated metrics를 제안한다. (abstract에서 말한 새로운 2가지의 Interpolation quality와 disentanglement를 측정한 수 있는 방법들이랑은 다른 것이다) 

  • perceptual path length
  • linear separability

이 두가지의 metrics들은 latent space가 얼마나 disentanglement한지 측정할 수 있는 metric들이다. 논문을 읽다가 궁금한점이 생겼는데 그것은 바로 "disentanglement하다는게 도대체 무엇인가?"라는 것이다. 그래서 찾아보고 관련 자료를 읽어아서 나온 답은 다음과 같다.

 

Q. disentanglement 의 뜻은?

 

A. 사전적인 의미

-> (명사) 얽힌 것을 품; 해방시킴

 

A. GAN에서의 의미

-> latent space가 linear한 구조를 가지게 되어서 하나의 latent vector Z 를 움직였을 때, 정해진 어떠한 하나의 특성이 변경되게 만들고자 하는 것이다.

예를 들어보면, latent vector Z의 specific한 값을 변경했을 때 생성되는 이미지 하나의 특성들(머리카락 길이, 성별, 사람의 시선)만 영향을 주게 만들었다고 하면 => "이 model의 latent space는 disentanglement 하구나~~" 라고 말 할 수 있다.

3. Style-based generator

3-1. PGGAN

StyleGAN의 base model이 되는 모델로써, Latent vector Z가 Normalization을 거쳐 모델에 바로 input value로 들어게 된다.

이런식으로 latent vector가 바로 input으로 들어가게 되면, latent space는 반드시 training data의 probability density를 따라야 한다. training data의 분포에 완전 관여를 하고있어서 머리카락 길이만 변경 한다던지, 사람의 시선을 변경한다던지가 많이 제한적이다. 이는 Generator model이 학습을 하는 동안 latent space가 entanglement하게 만들어지게 된다. 

-> [요약] latent space가 entanglement하게 만들어진다.

 

그러면, Latent space가 entanglement하다는 의미를 간단한 예시로 좀 더 자세하게 알아보자.

-> 만약 우리가 가지고 있는 사람 얼굴 데이터(CelebA-HQ)에서 동양인 20%, 서양인 60%, 아프리카인 20% 이렇게 데이터 분포를 가지고 있다고 가정하자. 이 데이터를 PGGAN을 사용해서 Generator model을 학습 시키면, latent space는 데이터 비율이 많은 "서양인"을 계속 생성해내려고 변화를 하게 된다. 그만큼 데이터 분포가 '서양인'으로 편향되게 되며 이를 latent space가 entanglement하다 라고 말을 할 수 있다.

(그림 1) PGGAN의 Generator Architecture

3-2. StyleGAN

PGGAN 처럼 latent space에서 나온 latent vector Z를 model에 입력으로 바로 넣는게 아니라, mapping network를 거쳐서 나온 w를 뽑아내게 된다. 이 과정을 좀 더 자세하게 말해보면

latent vector z -> Normalization -> mapping network ( Fully-Connected layer 8개로 구성) -> w를 뽑아냄.

Mapping Network

 

3-1절에서도 설명을 했지만, PGGAN 처럼 바로 latent vector z가 model에 들어가게 되면, training data의 probability density를 따라야하기 때문에 stochastic variation(머리카락 길이, 사람 시각 시선 등)을 변경하는데 제한이 되며 이는 latent space가 entanglement하다 라고 언급을 했다.(3-1. PGGAN 부분을 확인하자)

(probability density에 대한 내용을 기억하고 이제 mapping network를 보자) StyleGAN은 그러한 문제를 해결하고자 training data의 probability density를 따르지 않도록 하기 위해 Nonlinear function인 Mapping network를 사용했고, 이로 인해서 latent vector간의 correlation(상관관계)를 줄이게 되어서 latent space를 더 disentanglement하게 만들 수 있게 된다.

(그림 2)

여기서 사용된 latent space, Fully-Connected layer, W의 차원 모두 512차원이다.

 

자 이제 Mapping network를 이용해서 z값을 w값으로 만들어 주었으면, 이제 이것을 Synthesis network에 style을 입혀줘야 한다. 여기서 중요한 점은, 일반적으로 PGGAN처럼 model에 직접적으로 넣어주는 것이 아니라 [A] 부분 처럼 중간 중간에 Style을 입혀 주면서 학습 하는게 큰 특징이다. 이제 한번 Synthesis network에 대해서 알아보자.

 

Synthesis network

 

처음에 나온 layer는 const 4x4x512이다. 논문에서 "Learned constant tensor"라고 설명이 되어있다.

-> 이미 학습이 되어진 값을 의미한다. 즉, training 과정 중에서 Backpropagation을 거치면서(학습을 계속 하면서) constant tensor value는 계속 변하게 된다(학습을 하면서 backpropagation 과정을 거치며 얘가 더 나은 값으로 변하기 때문), 최종적으로 test할때는 해당 값들이 고정된 상태로 진행이 된다.

 

PGGAN학습을 할때 초기에 random input을 사용해서 Generator의 초기 이미지를 생성을 한다. 반면에 StyleGAN은 image features가 w와 AdaIN으로 control이 되므로 PGGAN처럼 초기 입력을 랜덤하게 해서 넣어주는게 아니라 초기 입력을 생략하고, 대신 이미 학습 되어진 tensor [Const 4x4x512] (데이터 분포의 편균으로 이루어진 tensor)로 대체를 하게 된다. 이런 식으로 진행을 하면 feature entanglement를 줄일 수 있으며 network가 input vector에 의존하지 않고 mapping network를 거쳐서 나온 w로만 사용을 하는게 network를 학습시키기 더 쉽다고 한다.

 

 

AdaIN(Style Module)

 

AdaIN(Adaptive Instance Normalization)는 A라는 어떤 사진이 있는데 이 사진을 고흐의 별이 빛나는 밤의 작품의 느낌을 적용시켜서 만들고 싶다고 하자. 그러면 A라는 그림에 고흐의 별이 빛나는 밤의 Style를 적용을 해주면 고흐 스타일의 A사진이 나오게 된다. 이러한 과정을 가능하게 시켜주는게 AdaIN이다.

( AdaIN에 대해 이해하기 쉽도록 정리된 블로그 : 링크 )

 

(그림 3) 출처 : https://towardsdatascience.com/explained-a-style-based-generator-architecture-for-gans-generating-and-tuning-realistic-6cb2be0f431

위 그림을 보자, PGGAN처럼 Latent Space을 직접 Generator 모델에 입력으로 z를 넣어주는게 아니라, nonlinear function 인 Mapping Network ƒ를 거쳐서 w를 만들게 된다. w를 통해서 y라는 style을 얻어내게 된다. 이 y를 Adaptive Instance Normalization(AdaIN)이라는 operations을 통해서 각각 Upsample, Conv layer 이후에 적용을 시켜 style을 입혀서 학습을 시키게 된다.

* 이때 w의 1x512의 shape을 가지고 있어서 AdaIN을 통해 style을 입힐때 shape이 안맞는 문제가 발생되게 된다. 따라서 Affine Transformation을 거쳐서 shape을 맞춰주게 된다.

 

-> 여기서 "Style을 입힌다" 라는 개념은, Ys(scale)를 입히고, Yb(bias)를 더하는 이 과정을 의미한다.

3-3. Quality of generated images

이 부분은 간단하게 요약하고 넘어가도록 하겠다.

우선 GAN이 학습이 잘 되었나 안되었나는 FID(Frechet inception distance)라는 metric으로 평가를 한다. 이는 값이 작으면 작을수록 좋다.

또한 해당 논문에서는 2개의 데이터셋(CelebA-HQ, FFGQ)을 사용해서 평가를 해보았다. 이때 사용된 loss는 실험적으로 얻어낸 결과이며 사용된 loss function은 아래와 같다.

  • CelebA-HQ : WGAN-GP
  • FFGQ : non-saturating loss with R1 regularization

그리고 모델이 다 만들어지고 난 다음에, 이미지를 generation을 해야하는데, 이때 잘 생성된 이미지를 뽑아내기 위해서 사용하는 trick인 truncation trick을 사용하게 된다.

기존 PGGAN에서 generation image를 뽑아낼때는 latent space Z에서 바로 사용을 했지만, StyleGAN에서는 w를 사용했다.

4. Properties of the style-based generator

4-1. Style mixing

mapping network로 부터 만들어진 intermediate vector w는 Synthesis network의 모든 layer에 적용될 style을 표현하도록 학습을 한다. StyleGAN의 Generator Architecture를 생각해보면 각 Level(각 해상도)별로 Intermediate vector w가 사용되는걸 알 수 있다. 이는 전체적인 Network로 볼때 PGGAN과 비교하면 correlate가 없지만, layer별로 볼때는, w하나에 대한 정보만 넣으니까 그 넣어준 w에대해서만 style이 correlate되어 있음을 알 수 있다. 

따라서, 해당 논문에서는 각 layer에 대해서 style이 correlate되는 문제를 해결하기 위해 style mixing 기법을 제안했다. 다시 한번 간단하게 정리를 해보면

 

[기존 방식대로 진행]

Network에 Z를 통해서 w를 만들고 -> 이미지를 기존 PGGAN이 학습을 하는것처럼 생성을 한다.

 

[StyleGAN이 사용한 방식]

1개의 latent vector z를 사용하면 각 layer에 대해서 style이 correlate되는 문제가 발생될 수 있으니 latent space가 entanglement하게 되버리게 된다. 따라서 2개 이상의 intermediate vector w를 사용해서 이러한 문제를 해결했다. 이렇게 2개 이상을 사용해서 좋은점은

  • 근접한 style들이 correlate되는 현상을 막을 수 있다.
  • "Simply switch from on latent code to another at a randomly selected point in the synthesis network" 이 부분은, w1과 w2를 만들었다고 하면, synthesis network의 초반에는 w1으로 학습을 하다가 특정 layer 이후부터는 w2의 style을 적용해서 학습을 한다는 의미이다.

이런 식으로 style이 교체되는 layer를 매번 random하게 w의 값을 적용해주는것이 인접한 두 layer간의 style correlate 되는 현상을 방지할 수 있다. 이런 식으로 학습되어진 Generator model은 각 layer가 담당하는 style이 correlate현상 없이 뚜렷하게 구분되어지는 것을 그림 4와 같이 확인할 수 있다.

  • 4x4 ~ 8x8 resolution [Coarse styles] : 전체적인 이미지의 스타일을 적용한다. (Pose, general face shape, eye glasses, colors(eyes/hair/lighting)
  • 16x16 ~ 32x32 resolution [Middle styles] : 중간 단계에서 적용되는 style (hair style, eye open/closed)
  • 64x64 ~ 1024x1024 : color scheme, microstructure 요소가 작용된다.

(그림 4)

결과적으로 2개 이상의 intermediate vector w를 사용하는게 Dropout과 비슷한 작용을 하는 Regularization 효과를 얻어냈다고 말할 수 있으며, low resolution을 담당하는 layer는 전체적인 이미지 스타일을 적용하며, 점점 high resolution을 담당하는 layer로 갈수록 세부적인 구조들을 담당해서 빈 공간을 빽빽하게 채워주므로서 깔끔한 고해상도 이미지를 만들어낼 수 있다.

4-2. Stochastic variation(adding Noise)

동일한 사람 이미지라도 해도, 우리는 사람 이미지를 볼 때 다르다 라고 인식하는 요소 중 하나가 바로 이마의 주름, 머리카락 색깔, 주근깨, 수염, 모공, 머리카락이 넘어간 가르마 위치 등과 같은 요소들에 따라 다른 이미지의 사람으로 보는 경향이 있다. 이런 요소들은 stochastic한 요소라고 볼 수 있다.

 

이러한 부분들을 style로 적용하기에는 뭔가 애매하다. 그래서 내가 생각하기에 저자는, 이미지의 perception(인식)에는 영향을 주지 않으면서 random하게 stochastic한 요소들이 적용되어서 이미지가 만들어지면 좋겠다 라고 생각을 하기 시작했다.

 

그래서 StyleGAN에서는 이러한 것들을 위해 [그림2]에서 [B] 부분에 해당되는 것들을 추가해서 random하게 지가 알아서 stochastic한 요소들이 적용되도록 했다.

이것은 synthesis network에 각 layer마다 random하게 noise를 추가하는 부분이다. 좀 더 자세하게 말을 해보면 per-pixel noise를 각각 convolution layer 후에 더해준다. 이런식으로 stochastic variation한 information들을 Style로 적용하는게 아니라 별도로 추가를 해주면, 더욱 사실적인 이미지를 생성하게 되며 input latent vector는 이미지의 중요한 정보들을 표현하는데 집중을 하게 되어서 이런식으로 noise를 별로도 조절해주는게 좋다.

 

5. Disentanglement studies

GAN 모델을 잘 만들었다고 하면, 우리가 원하는 것은 latent space가 Disentanglement하게 Linear subspace를 갖게 되고 one factor of variation를 제어할 수 있는 능력을 갖는것을 원하게 된다.

계속해서 반복적으로 언급하는 내용이지만 중요하니까 다시 언급을 하자면, StyleGAN의 based model인 PGGAN에서는 latent space가 Disentanglement하게 된다는게 불가능하다. 왜냐하면 latept space는 training data의 probability density를 따라야하기 때문에 stochastic varation(머리카락 길이, 사람 시각 시선 등)을 변경하는데 제한이 되기 때문에 entanglement하게 되버린다.

 

그렇지만 StyleGANIntermediate latent space w는 Z가 Mapping network를 거쳐서 나온 값 이기 때문에[ fixed distribution를 따를 필요가 없다.

 

그러면 왜 Mapping network를 거쳐서 나온 w값이 fixed distribution을 따를 필요가 없을까? 3-2절에 Mapping network에 대해 간단하게 설명을 했지만, 지금 절에서 좀 다 자세하게 한번 다루어보겠다.

 

(그림 5)

 

(그림 5)에서 (a)는 training data의 distribution이다. 이를 기존 방법대로 latent vector로 부터 랜덤하게 입력으로 넣어주어서 이미지를 직접적으로 생성을 한다면, training data가 fixed distribution인 latent space에 non-linear하게 mapping이 되버린다. 그렇게 되버리면 우리 학습 데이터에 검정 머리를 가진 사람들이 대부분이라고 하면, latent space에는 거의 대부분이 검정색 머리를 표현하게 되버려서 latent vector를 조절해서 머리카락 색을 변경하기가 어려워 진다.

 

(그림 6)

이런 문제를 해결하려면 (그림 6)처럼 하면 된다. 이는 Mapping Network를 사용한 경우이다. Intermediate vector w는 fixed distribution을 따를 필요가 없어 stochastic variation을 조절하기 매우 쉬워진다. 이러한 특징들을 latent space가 disentanglement 하다 라고 말을 하며, 논문에서는 이를 정량화 하기 위한 measure(얼마나 latent space가 disentanglement한지)를 제시했다.

  • Perceptual path length
  • Linear separability

5-1. Perceptual path length

atent space로 부터 2개의 Random한 입력간에 interpolation 하는 과정에서 얼마나 이미지가 Drastic하게 변하는지에 대한 Measure를 구하고 싶어한다. 얼마나 이미지가 급격하게 변하는지 측정할 수 있는 measure중 하나가 perceptual path length measure이다.

 

perceptual path length는 a perceptually-based pairwise image distance를 구하게 된다. 이 의미는 이미 기존에 pretrained된 2개의 VGG-16 모델을 사용하고 이 모델에다가 어떠한 Latent vector z 값과 조금 변경된 z+ε을 넣었을 때, zz+ε로 각각 만들어낸 이미지를 VGG-16 모델 각각에 embedding을 시켰을 때, VGG-16 내에서 embedding되는 feature 값들의 distance를 구하겠다. 라는 의미이다.

따라서 ε의 변화가 있었을 때 feature가 많이 변하면 distance도 커지게 될테고 그러면 interpolation이 제대로 안되고 있다고 말을 할 수 있게 된다.

 

5-2. Linear separability

latent space가 얼마나 Disentanglement한지를 정량화 하기 위해 제시한 2번째 measure는 Linear separability이다. 이는 latent space가 충분히 disentangle되었다면 stochastic variation을 설명할 수 있는 latent vector z의 direction vector[(나이가 변화하는 방향, 성별이 변화하는 방향, 머리카갈 길이가 변화하는 방향)를 정확하게 찾아내고 싶어 한다.

 

(그림 7)

(그림 7)을 보면 point 하나는 머리카락 길이가 변하는 방향벡터를 의미하고, 또 다른 하나는 나이가 변화하는 방향을 의미하는 방향벡터라고 해보자. 이러한 것들이 latent space가 disentanglement 할수록 더 잘 구분이 되게 된다. 그래서 Linear separability는 latent space들의 point들이 잘 구분이 되는지 측정을 하는 것이다.

 

 

(자세한 내용은 다른 블로그에...서 확인해주세요.. 어렵네요 ㅠ)

 

paper : https://arxiv.org/abs/1812.04948

Python/머신러닝&딥러닝 관련 포스팅 더보기

개의 댓글

댓글 남기기