StyleGAN은 PGGAN구조에서 Style transfer 개념을 적용하여 generator architecture를 재구성한 논문이다. 이론 인해 PGGAN에서 불가능했던 style 을 scale-specific control이 가능하게 되었다.
특징
그림 2는 학습 데이터셋을 시각적으로 보여주는 그림이다.
더 나은 이해를 돕고자 예시를 들어 설명을 해보면, 학습 데이터셋에는 검정 머리이며 안경을 착용한 동양인으로 구성되었다고 가정한다.
붉은색 화살표는 안경을 담당하는 차원이고 파란색 화살표는 머리카락 색을 담당하는 차원이다.
만약 학습 데이터셋에 없는 데이터 분포인 머리카락색이 검정색이며 안경을 미착용한 동양인을 생성하고 싶어도 학습 데이터의 고정된 분포를 latent space가 non-linear하게 mapping이 되어 버린 상태여서 생성하기 매우 어렵다.
GAN이 잘 학습이 된 상태라면 이제 생성 모델을 이용해서 이미지를 생성할 경우 latent variable 기반의 생성 모델은 가우시안 분포 형태의 random noise을 입력으로 넣어주게 됩니다. 학습 데이터셋의 특징에 mapping 되어있는있는 latent space Z는 n차원의 가우시안 분포로 구성되어서 그림 2(b)와 같은 형태입니다. (a)의 텅 비어있는 부분이 있는 상태에서 mapping을 시켜주니까 억지로 끼어맞추기 하는 형식으로 mapping이 이루어지다보니 wrapping이 발생하게 됩니다.
wrapping이 발생하게 되면 생성된 이미지의 머리카락 색깔이 갑자기 다른 형태와 색으로 급진적으로 변화되어 어떤 생성 이미지가 나올지 예측할 수 없을 정도로 급진적으로 변하게 되는 특징이 존재합니다.
StyleGAN의 아이디어는 마치 화가가 눈동자 색만 다른색으로 색칠하고, 머리카락 색깔만 다른 색으로 색칠하고 하는 것 처럼 , PGGAN에서도 style들을 변형 시키고 싶은데 Generator에 latent vector z가 바로 입력되게 때문에 entangle하게 되어서 불가능 하다는 단점이 있다.
그래서 나온 아이디어가 각각 다른 style을 여러 scale에 넣어서 학습 시키는 방법이 있다.
하지만 latent variable 기반의 생성 모델은 가우시안 분포 형태의 random noise 을 입력으로 넣어주는 특징을 갖고 있어 latent space가 entangled하게 된다.
따라서 StyleGAN은 학습 데이터셋이 어떤 분포를 갖고 있을지 모르니 GAN에 z을 바로 넣어주지 말고 학습 데이터셋이 어떤 분포를 갖고 있을 지 모르니 GAN에 z을 바로 넣어주지 말고 학습데이터 셋과 비슷한 학습 분포를 갖도록 non-linear 하게 mapping 을 우선적으로 하고 mapping된 z을 이용하면 좀 더 학습하기에 쉽지 않을까?하는 아이디어로 그림3처럼 mapping network을 사용해 mapping된 W을 각 scale에 입력으로 넣어서 학습 시킨다.
Mapping Network를 통해서 나온 W는 정확하지는 않지만 학습 데이터셋의 확률 분포와 비슷한 모양으로 우선 mapping이 된 상태이기 때문에 그림 4(c)처럼 특징이 mapping된 latent space의 W가 disentangle하게 된다.
AdaIN 의 기능을 설명하기전, Neural Network 을 한번 살펴보자.
Neural Network에서 각 layer을 지나가며 scale, variance 의 변화가 생기는 일이 빈번하게 발생하며 이는 학습이 불안정 해지는 현상을 발생한다.
따라서 이를 방지하기 위해 BN (Batch Normalization) 기법을 각 layer 에 사용함으로써 해결하곤 한다.
StyleGAN에서는 Mapping Network를 거쳐서 나온 W가 latent vector의 style 로 각 scale을 담당하는 layer에 일력으로 들어가게 된다.
위에서도 언급하다 싶이 Neural Network에서 layer를 지나가면 scale, variance의 변화가 발생하여 학습이 불안정하게 된다.
이를 해결하는 방법이 Normalization 기법을 사용한다고 언급했다.
따라서 논문에서는 W가 style에 영향을 주면서 동시에 normalization 해주는 방법으로 상요하게 된다.
AdaIN 수식
수식을 보면 표준편차로 나누고 평균으로 뺀 값이니깐 random variable을 정규화 시키는 것이다. 즉 Instance에 대해 Normalization 해주는 것이라고 볼 수 있다.
간단하게 정리해보자면,
너비와 높이를 증가시키기 위해 Upsampling이 이 있고 이어서 CNN연산을 수행 그 후 AdaIN 을 거쳐 다시 CNN 을 수행 다시 AdaIN을 수행하다. 이러한 방식을 거쳐 더욱 그럴싸한 이미지를 만든다.
AdaIN Layer에 동작 방식은 오른쪽(빨간색 네모 안)과 같다.
1 X 512 차원인 W 벡터는 Affine Transformation을 거쳐 2 X n 크기의 결과를 만들어낸다. 이는 각각의 channel마다 2개의 스타일을 만들어 낸 것이다.
xi 를 Normalization (각각의 채널에 대해서 mean 과 분산 = xi - u(xi) / eps(xi))을 통해 한 후 scale and bias (ys,i 를 곱하고 yb,i를 더해) 해줘 AdaIN 을 수행해준다.
(xi 는 CNN 의 output 이며, n 개의 channels 로 구성된 하나의 tensor에서 각각의 channel에 대한 feature들을 xi이다)
이렇게 feature 의 statistics만 바꿔주는 것 자체로 Style Transfer로 볼 수 있다.
각 Block 마다 Style 을 넣어줘서 이미지의 다양성을 보장 시킨다.
각 Block 마다 Style 을 넣어줘서 이미지의 다양성을 보장 시킨다.
그래서 latent vector로 부터 Input image가 시작되지 않아도 충분히 좋은 결과를 낼 수 있다.
아래 그림 예시를 보면 noise 를 추가 전 후를 쉽게 비교할 수 있다.
세로 점선 왼쪽편 (a)이 PGGAN 의 네트워크이다.
이러한 PGGAN에서 mapping network 를 추가하고 style 과 noise를 추가해준게 StyleGAN의 아키텍처이다.
각각의 스타일 정보가 입력되는 레이어의 위치에 따라서 해당 스타일이 미치는 영향력이 다르다.
Coarse Style, Middle Styles, Fine Styles로 나눌 수 있다.
그림에서 예를 보면 Image A에서 Image B의 스타일을 가져와서 이미지를 생성한다고 했을 때, 2행 4열은 1행 3열의 아기 사진의 스타일을 가져와서 이미지를 생성했는데 이 결과 이미지는 아기의 얼굴 전반적인 구조로 부터 스타일을 가져와 이미지를 생성한 것을 볼 수 있다.
Middle styles에서는 해당 5행 4열을 보면 머리 색깔과 같은 부분을 Image B에서 가져온 것을 확인할 수 있다.