🌌 Deep Learning/Overview

[StyleGAN 시리즈] ProGAN/PGGAN, StyleGAN, StyleGAN2

복만 2022. 8. 19. 20:58

ProGAN부터 StyleGAN2까지, style transfer에서 가장 유명한 모델인 StyleGAN의 변천사와 각 모델의 특징을 간단히 정리해 보고자 한다.

 

 

1. ProGAN/PGGAN (ICLR 2018)

Paper: Progressive Growing of GANs for Improved Quality, Stability, and Variation (link)

 

GAN을 이용해 고해상도 이미지를 생성하는 것은 쉽지 않다. 따라서 latent vector에서 한번에 고해상도의 이미지를 생성하기보다는, 낮은 해상도의 이미지(4x4)를 생성하는 것부터 학습해서 점진적으로(progressive) 레이어를 추가하며 고해상도 이미지(1024x1024)를 만드는 방법을 학습한다.

 

 

레이어를 추가할 때는 fade in 방식으로 부드럽게 끼워 넣는다. 아래 그림의 (a) -> (b) -> (c) 순서로 레이어 추가가 진행된다.

 

(b) 그림이 레이어 추가 과정을 보여준다. 이전 레이어의 output과, 새로운 레이어의 output을 적절하게 더해서 최종 output으로써 discriminator에 전달하는 것이다.

  • weight $\alpha$는 0부터 1로 linear하게 증가한다.
  • toRGB operation은 feature을 RGB(num_channel=3)로 만드는 1x1 conv이다.
  • 이러한 구조는 StyleGAN2 부터는 사용하지 않는다.

 

 

2. StyleGAN (CVPR 2019)

Paper: A Style-Based Generator Architecture for Generative Adversarial Networks (link)

 

참고한 글

 

 

ProGAN의 문제점

ProGAN의 경우 latent vector가 generator에 바로 입력으로 들어간다. 이 경우 GAN은 latent space를 학습 데이터의 분포에 맞춰 학습하게 되고, entangle한 latent space를 갖게 된다.

 

https://blog.promedius.ai/stylegan_1/

 

학습 데이터셋의 분포가 전체 데이터의 분포를 다 담지 못하고 비어있는 공간이 있는 경우, latent space가 학습 데이터셋의 분포에 맞춰지려 하다 보니 curved한 mapping을 학습하게 되는 것이다 (warping). Warping이 발생하게 되면 각 style이 급진적으로 변화하게 되어, 생성된 이미지 역시 급격하게 변하게 되는 특성이 존재한다.

 

 

Mapping network

Entanglement를 피하기 위해 mapping network를 이용한다. 바로 generator에 입력으로 latent vector z를 넣어주는 것이 아니라, 학습 데이터셋과 비슷한 확률 분포를 갖도록 non-linear한 mapping을 우선적으로 한 다음, 이 mapping된 vector를 레이어 중간중간에 넣어 줌으로써 이미지를 생성하도록 한다. 즉, style을 입혀주는 과정이다.

 

  • Mapping network는 8개의 fc layer를 통해 input vector z를 intermediate vector w로 mapping시킨다.
  • 앞쪽에 들어가는 style은 더 많은 layer을 통과하므로 더 많은 영향을 끼친다 (coarse style). 뒤쪽에 들어가는 style은 반대 (fine style).
  • Input z와 output w는 동일한 크기를 갖는다. (512*1)
  • 이후 mapping된 w를 synthesis network의 각 scale에 입력으로 넣어 학습시킨다.
  • Mapping network의 목적은 w의 각 element가 각각 다른 visual feature을 조절하도록 encode하는 것이다.
  • 이렇게 하면 w의 분포인 W는 학습 데이터셋의 분포와 비슷한 모양으로 mapping되기 때문에 latent space가 disentangle하게 된다.

 

 

AdaIN

w를 각 scale에 입력으로 넣는 방법은 AdaIN을 이용한다.

 

$AdaIN(x_i, y)=y_{s,i}\frac{x_i-\mu(x_i)}{\sigma(x_i)}+y_{b,i}$

 

w는 learned affine transformation A (fc layer)을 거쳐 input channel과 동일한 크기의 vector $y_{s,i}$, $y_{b,i}$ 두 가지로 변환된다. 

 

https://towardsdatascience.com/explained-a-style-based-generator-architecture-for-gans-generating-and-tuning-realistic-6cb2be0f431

 

AdaIN에서 정규화를 할 때마다 한 번에 하나씩만 w가 기여하므로 하나의 style이 각각의 scale에서만 영향을 미칠 수 있도록 분리를 해주는 효과를 갖는다. 따라서 style을 분리하는 방법으로 AdaIN이 효과적으로 사용될 수 있다.

 

또한, generator의 매 layer마다 AdaIN을 통해 새로운 style을 입히게 되므로, 특정 layer에서 입혀진 style은 바로 다음 conv layer에만 영향을 끼친다. 따라서 각 layer의 style이 특정한 시각적 특성만 담당하는 것이 용이해진다.

 

 

Initial input

Generator에 input으로 latent vector를 바로 넣어주는 것이 아니라, layer 중간중간에 mapping network를 통과한 latent vector 값을 넣어주는 방식을 이용하기 때문에, 대신 generator의 input으로는 constant 값을 넣어준다. 

 

ProGAN에서는 4*4 크기의 random input을 generator에 입력으로 주었지만, StyleGAN의 경우 image feature이 w와 AdaIN에 의해 제어되므로, constant 값으로 대체할 수 있다.

 

 

Stochastic variation

각 이미지의 작은 디테일에 해당하는 stochasticity를 더하기 위하여, input vector에 random noise를 추가한다. 이는 AdaIN 직전에 더해진다.

 

https://towardsdatascience.com/explained-a-style-based-generator-architecture-for-gans-generating-and-tuning-realistic-6cb2be0f431
\Figure 4(c). 100장의 사진을 그대로 두고 노이즈 값을 다르게 했을 때 표준편차의 모습 / Figure 5. (a): noise를 모든 layer에 줌. (b) noise를 안줌. (c) noise를 fine layer에만 줌 (d) noise를 coarse layer에만 줌

 

fine layer의 noise는 더 자잘자잘한 디테일을, coarse layer의 noise는 더 큼직한 디테일을 책임지는 것을 알 수 있다.

 

 

Style mixing

두개의 latent vector을 뽑아서, crossover point를 기준으로 앞쪽/뒤쪽에 다른 latent vector을 이용해 style transfer을 한다. 이를 통해 인접한 layer의 style이 상관관계를 갖지 않도록 할 수 있다. 즉, correlation을 줄이고 더욱 지역화하는 것이다.

 

이를 이용하면 style mxing이 가능한데, 예를 들어 A vector를 low resolution에 사용하고, B vector을 high resolution에 사용하면, A vector에 상응하는 이미지의 특성이 coarse style에 나타나게 되고, B vector에 상응하는 이미지의 특성이 fine style에 나타나게 되는 것이다.

 

https://www.youtube.com/watch?v=TWzEbMrH59o

 

 

3. StyleGAN2 (CVPR 2020)

paper: Analyzing and Improving the Image Quality of StyleGAN (link)

PyTorch 코드 with 설명: https://bo-10000.tistory.com/169

 

[PyTorch Implementation] StyleGAN2

StyleGAN 시리즈 설명: https://bo-10000.tistory.com/158 [StyleGAN 시리즈] ProGAN/PGGAN, StyleGAN, StyleGAN2 ProGAN부터 StyleGAN2까지, style transfer에서 가장 유명한 모델인 StyleGAN의 변천사와 각 모델..

bo-10000.tistory.com

 

참고한 글

 

기존 StyleGAN의 문제점 두가지를 해결했다.

  • blob-like artifact -> normalization 구조 개선
  • phase artifact -> alternative progressive growing

 

 

Blob-like artifact

StyleGAN으로 생성된 이미지에서 얼룩(blob) 같은 artifact가 발생하는 현상이 있었다. 이 얼룩은 64*64 resolution부터 발생하기 시작해서 고해상도로 갈수록 더 심해지는 경향이 있었고, discriminator은 이를 감지하지 못했다. 

 

저자들은 이 현상의 원인을 AdaIN으로 보았다. AdaIN은 각각의 feature map을 독립적으로 normalize하는데, 이 과정에서 서로 연관되어 있는 feature map들의 관계가 무시되는 것이 위와 같은 문제를 발생시킨다고 해석했다. 따라서 이를 해결할 수 있는 새로운 instance normalization 방법을 제시한다.

 

 

(a)은 StyleGAN의 generator 구조를 그대로 가져온 것이고, (b)는 StyleGAN의 generator 구조에서 AdaIN 부분을 보다 자세하게 나타낸 것이다. AdaIN은 feature의 mean과 std를 이용해 normalization하는 부분과, style vector을 이용해 다시 feature의 mean과 std를 modulation 하는 부분으로 나눠 생각할 수 있다. 이 때 하나의 style이 관여하는 부분을 하나의 "style block"으로 본다면, modulation이 적용된 이후부터 다음 modulation이 적용되기 전까지의 연산들이 모두 포함된다. (modulation->conv->add noise->normalization)

 

StyleGAN2은 여기서 두 가지 큰 수정을 가한다. 우선 (c)는 네트워크 구조를 수정한다. 우선 add noise 부분을 style block 밖으로 빼고 style block과 style block 사이에서 수행한다. 또한, normalizationmodulation 연산을 std에서만 적용하기로 한다. 즉, mean값은 수정하지 않는 것이다.

 

(d)는 style을 입히는 과정을 수정하게 된다. (c)의 style block을 보면, 우선 feature map의 std modulation을 수행한 이후 convolution을 이어서 수행하는데, 이는 단순히 convolution weight을 scaling하는 것과 동일하다.

 

$w'_{ijk}=s_i\cdot w_{ijk}$

 

이때 input이 표준정규분포를 따른다고 가정하면 output의 std는 다음과 같다.

 

$\sigma_j=\sqrt{\sum_{i,k}{s'_{ijk}}^2}$

 

std normalization은 output을 이 output std 값으로 나눠 주는 것과 동일하기 때문에 (demodulation), 마찬가지로 이는 convolution weight의 scaling으로 구현할 수 있다.

 

$w''_{ijk}=w'_{ijk}/\sqrt{\sum_{i,k}{w'_{ijk}}^2+\epsilon}$

 

즉 전체 style block (modulation -> convolution -> normalization)은 하나의 convolution layer의 weight을 수정하는 방식으로 구현할 수 있는 것이다. (modulation -> demodulation -> convolution)

 

 

Phase artifact

Progressive growing은 안정적으로 고해상도 이미지를 합성하는 데에 매우 유용하지만, 치아나 눈 등이 특정 위치에 고정되는 phase artifact (strong location preference) 현상이 발생한다. 이는, 각 resolution이 output resolution에 대해 최대 frequency detail을 생성하고자 했기 때문이다. 이에 대한 대안으로 세 개의 구조를 제안했다.

 

  • (a) MSG-GAN: 동일 res의 G와 D를 skip connection으로 matching시켜준다.
  • (b) skip connection: G의 output을 다 더해서 decoder로 전달한다.
  • (c) residual connection

 

Generator과 discriminator에 대해 각각 세 가지 구조를 적용해 총 9가지를 실험해보고, 그 중 가장 성능이 높은 조합을 채택했다 (Generator-(b), discriminator - (c))

 

 

4. StyleGAN3 (NeurIPS 2021)

paper: Alias-Free Generative Adversarial Networks (link)

반응형