본문 바로가기
딥러닝(Deep Learning)/D&A Conference Session

[D&A Conference Session] StyleGAN 이해하기

by rahites 2022. 7. 15.

StyleGAN

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

 

< 참고자료 >

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

 

[GAN 시리즈] StyleGAN 논문 리뷰 -1편

StyleGAN은 PGGAN 구조에서 Style transfer 개념을 적용하여 generator architetcture를 재구성 한 논문입니다. 그로 인하여 PGGAN에서 불가능 했던 style을 scale-specific control이 가능하게 되었습니다.

blog.promedius.ai

https://airsbigdata.tistory.com/217

 

[논문 리뷰] StyleGAN: A Style-Based Generator Architecture for GANs

이번에 소개해 드릴 논문은 A Style-Based Generator Architecture for Generative Adversarial Networks으로 StyleGAN으로 자연스러운 고해상도 이미지를 만들면서 많이 알려지게 된 논문입니다. 해당 논문은 NVD..

airsbigdata.tistory.com

https://wiserloner.tistory.com/1196

 

PGGAN 개인정리(논문 리뷰 Progressive Growing of GANs for Improved Quality, Stability, an

- 논문은 제목에 나온 Progressive Growing of GANs for Improved Quality, Stability, and Variation를 리뷰합니다. GAN 모델 중에서도 유명한 논문이죠. - 제 정리글은 핵심만 간단히 정리할 것입니다. 한국어로..

wiserloner.tistory.com

https://sensibilityit.tistory.com/508

 

[PGGAN] Progressive Growing of GANs for Improved Quality, Stability, and Varation

1. Abstract 1-1. Problem PGGAN(Progressive Growing of GANs)은 2017년도에 나온 Nvidia에서 나온 논문이고 발표 당시 큰 이슈를 받았다고 한다. 그 이유는 그 전까지 GAN들은 고해상도(High resolution) 이미지..

sensibilityit.tistory.com

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

 

< 본 개념을 이해하기 위해 필요한 지식 >

PGGAN ( Progressive Growing of GANs ) (2018)

- 일반적인 GAN을 이용해 고해상도 이미지를 만들면 해상도(Resolution)가 높아질수록 Discriminator가 Generator가 생성한 Image의 Fake 여부를 판단하기 쉬워진다. 또한 고해상도 이미지를 만들었더라도 메모리 제약 때문에 mini batch size를 줄여야하고 batch size를 줄일경우 학습과정에서 학습이 불안정해지는 문제가 발생한다.

 

- 따라서 PGGAN의 핵심은 layer(Generator와 Discriminator)를 점진적으로 추가해주어 낮은 해상도를 높은 해상도로 만들어주는 것이다.  즉, Generator와 Discriminator를 낮은 해상도의 이미지에서 시작하여 점점 높은 해상도의 이미지를 학습해가게 만든다는 것을 의미한다. 이 때 layer를 점진적으로 추가해주면 Image Distribution에서 Large Scale(큰 구조)를 먼저 발견할 수 있게 만들고 처음에 낮은 해상도에서 학습을 할 때에는 Large Scale을 보며 전반적인 내용을 학습하고, layer를 쌓아 학습을 진행하면서 세부적인 Feature들을 보며 학습을 진행한다. 이는 안정적인 학습을 가능케 한다. 새로운 layer를 추가할 때는 smooth하게 fade in을 진행해 준다. smooth fade in 은 이미 잘 학습된 이전 단계의 layer에 영향을 미치지 않도록 이전에 학습된 layer의 출력물과 새로운 이미지를 합치는 방식을 말한다. 이는 기존의 저해상도 layer에서 학습된 방향에 영향을 미치지 않고 새로운 layer를 학습시킬 수 있다.

PGGAN의 구조

- GAN에서는 공변량 변화(Convariate Shift, 학습하는 도중에 이전 layer의 파라미터 변화로 인해 현재 layer의 입력의 분포가 바뀌는 현상)를 억제하기 위한 Batch Normalization 방법이 사용되었지만 PGGAN에서는 발생하지 않기 때문에 Batch Normalization을 사용하지 않았다. 대신 Pixelwise Normalization을 사용했는데, 이는 pixel마다 존재하는 Feature Vector를 단위 길이별로 Normalization해주는 것을 말한다. Pixelwise Normalization은 train 과정에서 신호의 크기가 제어를 벗어나는 것을 효과적으로 방지해준다. 

class PixelNormLayer(nn.Module) :
    def __init__(self) :
        super(PixelNormLayer, self).__init()
        
    def forward(self, x) :
    	return x * torch.rsqrt(torch.mean(x ** 2, dim = 1, keepdim = True) + 1e-8)
        
    def __repr__(self) :
    	return self.__class__.__name__

 

DCGAN(2016)

Convolutional Filter

- Discriminator는 안쪽 layer로 들어가면서 너비와 높이가 감소하고 채널이 증가 (DownSampling-Strided Convolution)

- Generator는 안쪽 layer로 들어가면서 너비와 높이가 증가하고 채널은 감소 (UpSampling-Transposed Convolution)

 

Vector Arithmetic

latent vector끼리의 연산으로 원하는 생성 이미지를 만들 수 있다

[ Man with glasses - Man without glasses + woman without glasses = woman with glasses ]


StyleGAN( A Style-Based Generator Architecture for Generative Adversarial Networks )

 

StyleGAN은 기존의 PGGAN 구조에 Style transfer 개념을 적용하여 generator architecture를 재구성한 아키텍처이다. 본 논문에서는 새로운 아키텍처와 함께 새로운 hunam faces data set을 소개한다. 

 

기존의 PGGAN에서는 latent vector z가 모델에 바로 입력되기 때문에 latent space가 train data set의 확률분포의 비슷한 형태로 만들어져 만들어진 latent space가 Entangle하게 된다. 

Entangle이란 여러가지 특성이 엉켜있어 특징을 구분하기 어려운 상태를 말하고,
Disentangle이란 각 style(특징)이 잘 구분되어 있어 선형적으로 변수를 변경했을 때 어떤 결과물의 feature인지 예측할 수 있는 상태를 의미한다.  

위의 그림(a)와 같이 training data의 단순 확률분포에서 왼쪽 위의 영역에 들어가야하는 요인의 조합이 존재하지 않을 경우, 해당 요인의 조합이 없는 채 억지로 mapping을 진행한 그림(b)와 같은 latent space Z에서는 해당 요인의 조합을 생성하기 어려울 뿐더러 wrapping이 발생한다. wrapping이 발생하면 생성된 이미지의 형태가 어떻게 생성될지 모를정도로 급진적인 변화가 일어난다.

 

이러한 문제를 극복하기 위해 StyleGAN에서는 Style Transfer처럼 원하는 style로 수치화 시킨 후 각기 다른 style을 여러 scale에 넣어 GAN에 적용하고자 했다. 이 때 latent variable 기반의 생성 모델이 가우시안 분포 형태의 random noise를 입력으로 넣어주기 때문에 latent space가 Entangled하다는 문제를 GAN모델에 넣기 전에 먼저 latent vector z가 학습 데이터 셋과 비슷한 확률 분포를 갖도록 non-linear하게 mapping하는 것으로 극복하였다.  

 

기존의 방식은 input vector에서 이미지를 직접 생성할 경우 input distribution에 학습 이미지의 distribution을 맞춰야하지만, Mapping Network를 사용하면 고정된 distribution에 따를 필요없이 더 유동적인 공간에 mapping할 수 있다. 그 결과 그림(c)와 같이 Mapping Network를 거쳐서 나온 w는 Disentangle하다는 특징을 가진다. ( 그림(b)보다 선들이 linear함, 경험적으로 w의 성능이 좋음 )

 

* Mapping Network

: 특정 Space에서의 Vector를 다른 Space의 Vector로 매핑해주는 것

Latent vector z(차원이 줄어든 채로 데이터를 잘 설명할 수 있는 잠재 공간에서의 벡터)를 가우시안 분포를 통해 뽑은 뒤 바로 사용하지 않고 별도의 Mapping Network를 거쳐 Latent vector w로 변환한 뒤 이미지를 만든 후 해당 space에서 interpolation을 진행하면 더 linear한 space를 따라갈 수 있다

 

* AdaIN (Adaptive Instance Normalization)

하나의 이미지를 여러 semantic style 정보를 가지는 형태로 만들기 위해 AdaIN을 사용하였다. AdaIN을 이용해 다른 원하는 데이터로부터 스타일 정보를 가져와 적용할 수 있고, 이는 feed-forward 방식의 style transfer 네트워크에서 주로 사용되는 방식으로 StyleGAN의 이름이 지어진 이유이기도 하다. 

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

 

- 학습시킬 파라미터가 필요 X

- 정규화를 수행한 뒤 입력받은 스타일 정보를 statistics를 바꾸는 방식으로 style을 입힘

 

* Stochastic Variation

: 다양하게 발생할 수 있는 확률적인 측면도 처리할 수 있도록 구성하였다. ( 주근깨, 머리카락의 배치 등 )

별도의 Noise input을 넣어 이를 가능케 했고 Noise 역시 Affine 변환을 거친 후 network에 포함된다.

[ 모든 레이어에 노이즈 적용, 노이즈 적용 x, Fine layer에 노이즈 적용, Coarse layer에 노이즈 적용]

 

각각의 style 정보가 입력되는 위치에 따라 해당 style에 미치는 규모가 달라진다. 

Coarse style : 세밀하지는 않지만 전반적인 semantic feature들을 바꿀 수 있는 style ( Latent Vector w의 앞쪽 1~4 layer)

Middle style : 헤어스타일, 눈을 감은 여부 등 조금 더 세밀한 style ( Latent Vector w의 앞쪽 5~8 layer)

Fine style : 색상, 미세한 구조와 같이 더 세밀한 style ( Latent Vector w의 앞쪽 9~18 layer)

 

1. Mapping Network에서 Latent Vector w를 뽑는다.

2. w를 별도의 Affine 변환을 거쳐 AdaIN에 들어가는 style 정보가 될 수 있도록 만든다.

3. 생성 네트워크는 저해상도부터 시작해 점차 너비와 높이를 증가시키는(해상도를 높이는) 방향으로 구성된다. (9개의 block)

4. 각각의 block은 2개의 Convolution layer와 2개의 AdaIN layer를 가진다.

5. Convolution layer에는 너비와 높이를 증가시키기 위한 Upsampling layer가 포함된다. 

 

 

< Pytorch 코드 참고 >

https://github.com/lernapparat/lernapparat/blob/master/style_gan/pytorch_style_gan.ipynb

 

GitHub - lernapparat/lernapparat: Various Notebooks for Lernapparat.de

Various Notebooks for Lernapparat.de. Contribute to lernapparat/lernapparat development by creating an account on GitHub.

github.com

 

댓글