IT/AI\ML

[python/Tensorflow2.0] GANs ; StyleGAN (Style-based Generative Adversarial Networks)

개발자 두더지 2020. 4. 23. 17:48
728x90

1. StyleGAN(Style-based Generative Adversarial Networks)이란?

 먼저 StyleGAN의 논문은 링크를 참고바란다. StyleGAN은Progressive Growing을 이용한 고해상도 이미지를 생성하고, AdaIn을 이용해 각 층에 이미지의 Style을 캡쳐한다는 두 가지 특징이 있다. 먼저 이 두 가지 특징에 대해 설명하고, StyleGAN의 상세 구성에 대해 이야기하도록 하겠다.

 

① Progressive Growing

 Progressive Growing이란 Progressive Growing GAN에서 제안된 고행도 이미지를 생성하는 방법이다. 간단하게 이야기 하자면 '저해상도 이미지의 생성으로부터 시작해 점차 고해상도용의 Generator, Discriminator을 추가하여 나감으로써 고해상도 이미지를 생성하는 방법'이다. 아래의 그림은 PG-GAN의 모식도이다.

 위 그림을 살펴보면 4x4의 이미지를 생성한 것으로 부터 시작하여 조금씩 해상도를 높여 최종적으로 1024x1024의 고행도 이미지를 생성해내고 있다. 해상도를 높이는 네트워크를 추가하여도, 저해상도 이미지를 생성하는 G와 판별하는 D는 파라미터가 고정하지 않고 학습을 계속하는 것이 특징이다.

 

② AdaIN

AdaIN은 Xun Huang에 의해 2017년 제안된 스타일변환용의 정규화 방법으로, 수식은 아래와 같다. 원래의 논문에서는 콘텐츠 입력 x과 스타일 입력 y를 평균과 분산을 이용해 정규화한다.

AdaIn을 이용한 스타일 변환의 예

 AdaIn의 특징은 Instance Normalization등의 정규화 방법과 달리, 스타일과 콘텐츠 이미지의 총합량만 정규화하고, 학습 파라미터를 사용하지 않는다는 점이다. 이에 따라 훈련 데이터에서 본 적없는 스타일이라도 스타일 변환이 가능해졌다.

 StyleGAN중에서 AdaIn은 아래의 수식을 사용한다. 정규화된 콘텐츠 정보에 스타일을 사용한 선형변환을 적용한다는 개념은 변화하지 않고 있지만, 스타일의 표준편차와 평균치 대신 뒤에서 설명하는 스타일 벡터 W에 선형 변환을 더한 y_s, y_b라는 2개의 값을 사용한다.

 

 Style의 흐름을 전체적으로 간단히 설명하자면, Mapping Network f에 있어서, 입력되는 대체 변수 z를 대체공간 W에 맵핑한다. 대체변수 w는 아핀 변환되는 것으로 Style y가 된다. 스타일 y는 각 Convolution층을 거친 후의 AdaIn처리에 사용되고, Generator을 컨트롤한다. 가우시안 노이즈를 AdaIn과 각 Convolution층의 사이에 더 한다. 마지막층의 출력은 1x1의 Convolution층을 사용해 RGB로 변환한다. 해상도는 4x4에서부터 시작하여 최종적으로는 1024x1024가 된다. Style-based generator의 합계 파라미터 수는 26.2M이고, 기존의 Generator의 합계 파라미터 수는 23.1M이다.


2. StyleGAN의 네트워크 구성

 StyleGAN의 네트워크의 특징으로는 아래의 세 가지가 있다. 

① Progressive Growing을 사용하여 각 Generator에서 단계적으로 해상도를 올린다.

② PG-GAN과 같이 확률적으로 생성한 잠재적 변수로부터 이미지를 생성하지 않고, 고정치로 이미지를 생성한다.

③확률적으로 생성된 잠재변수는 8층 뉴럴 네트워크에서 비선형변환된 Style벡터W가 되어, 각 해상도에서 AdaIN을 통해 입력된다.

(a)는 PG-GAN, (b)는 StyleGAN이다.

 양쪽 모두 단계적으로 해상도를 상승시키는 Progressive Growing을 사용하고 있다. 그러나 PG-GAN에서는 잠재변수 z에서부터 이미지를 생성하고 있는 것에 반해, StyleGAN에서는 고정의 4x4x512의 Tensor로부터 이미지를 생성하고 있으며, 잠재변수는 Style로써  거두어들이고 있다는 부분이 다른 점이다. 또한 잠재변수는 그대로 사용되지 않고, Mapping network라고 불리는 FCN에 의해 비선형변환된 후에 Style로써 사용된다.

A : w를style(ys,ybys,yb)으로 바꾸기 위한 아핀 변환
ys,ybys,yb는 채널마다 값을 갖는다.

B:노이즈는 1채널 이미지로 이루어짐
conv의 출력에 더 하기 전에 노이즈를 채널마다 scaling하는 것을 의미

 이러한 고정값 Tensor에 의한 이미지 생성과 Mapping network에 의한 Style 도입, 그리고 뒤에서 설명할 Mixing Regularization에서 FID 스코어가 향상된다. FID는 GAN의 생성분포와 진짜의 데이터 분포의 거리를 표시하는 지표이다. 수치는 낮을수록 좋은 의미이다. 아래의 표는 style GAN의 발전 단계이다.

(A) Baseline으로써 설정된 것은 Progressive GAN으로 네트워크와 하이퍼 파라미터의 변환을 변경하지 않고 제안된 그대로 사용한다.

(B) Baseline의 개선으로써 bilinear up / downsampling과 하이퍼 파라미터 튜닝을 한다.

(C) Baseline을 더욱 개선하는 것으로써 mapping 튜닝과 AdaIN처리를 추가하였다. 이 시점에서 기존의 것대로 최초의 convolution층에 대체변수를 전달하는 네트워크에서는 개선의 여지가 없다는 견해에 이르렀다.

(D) 기존의 입력층을 제거하고 4x4x512의 constant tensor로 이미지 생성을 시작하는 심플한 구조로 만들었다.  synthesis network(Generator)은 AdaIn을 제어하는 스타일만이 입력에서 멋진 생성 할 수 있는 것을 알게 되었다.

(E) 노이즈를 입력하는 것으로 더욱 개선했다.

(F) mixing regulatization을 도입하여 인접한 스타일의 상호관계를 없애고, 더욱 정교한 이미지를 생성하는 것이 가능해졌다.


3. Mixing Regularization (Style mixing)

 StyleGAN에서는 학습중에 Style로써 랜덤 잠재변수가 아닌 두 가지 잠재변수를 혼합하는 Mixing Regularization이라고 부르는 정규화 방법을 사용하고 있다. Synthesis network의 랜덤으로 선정된 곳에 잠재 변수를 다른 것으로 전환한다. 예를 들면, 잠재변수z_1, z_2로부터 mapping된 w_1, w_2라는 스타일 벡터가 있다고 한다면, 4x4 이미지를 생성할 때 w_1를 사용하고, 8x8의 이미지를 생성할 때는 w_2를 사용하는 느낌이다.

 구체적으로는 Mapping network에서 z1, z2라는 두 개의 잠재적 변수를 실행하는 것이고, Synthesis network에서는 w1을 적용하여 그 후에 랜덤으로 선정된 곳에 w2를 적용한다. 이러한 정규화 방법에 의해 인접한 스타일은 상호 관련되어 있는 부분를 네트워크가 가정하지않고 생성하는 것이 가능하다. 

 위에서 설명한 두 가지의 이미지의 Style을 혼합하여 아래와 같은 이미지를 만드는 것도 가능하다. 

 위 그림은 Source A, Source B의 이미지를 각각 생성하는 잠재변수로써, 제일 처음으로는 A의 대체변수를 사용하고, 어느 해상도부터는 B의 잠재변수를 사용하면 어떠한 이미지가 될지 실험한 결과이다. 전환한 해상도를 저해상도(4² ~ 8²)중간 해상도(16² ~ 32²)・고해상도(64~1024²)의 3개로 실험을 하고 있다.

- 해상도가 낮은 단계에서 합쳐진 경우 (4x4~8x8)

 얼굴의 방향, 머리 모양, 안경과 같은 대략적인 source의 요소가 이미지로 표현되는 한편, 눈, 머리, 명암과 같은 색이나 얼굴의 특징은 destination의 요소가 표현되어 있다.

- 해상도가 (16x16~32x32)의 경우

 얼굴의 특징, 머리 모양, 눈의 특징이 source요소로, 머리의 방향이나 얼굴형이나 안경은 destination의 요소로 구성되어 있다.

- 고해상도(64x64~1024x1024)의 경우

 배색이나 상세한 디자인은 source유래가 되어 있다.

 기본적으로 저해상도로 입력된 Style의 영향이 커지는 경향이 있고, 저해상도부터 B의 잠재변수를 사용한 얼굴의 형상이나 피부의 색, 성별연령 등이 B에 가까워진다. 그러나 고해상도로 입력되면 배경이나 머리카락의 색정도밖에 영향을 주지 못한다.


4. 노이즈의 효과

 

1) 확률적 특징

올바른 분포에 따라 생성된 경우, 랜덤으로 생성되어도 이미지의 겉모습에 커다란 영향을 미치지 못하는 특징

(예) 머릿결이나 머리의 흐름, 수염, 주근깨, 피부

기존의 generator이 확률적 특징을 생성한 경우, 입력층에만 입력이 되기 때문에, 네트워크는 필요해지면 이전의 activation에서부터 공간적으로 변화하는 유사 난수를 생성하지 않으면 안 된다. 그러나 이러한 방법은 네트워크 용량을 소비하므로, 주기성이 없는 진짜로 랜덤한 난수를 생성하는 것은 곤란하다.

 이 연구의 구조는 각 convolution층의 뒤에, 픽셀마다의 노이즈를 추가시킴으로써 위의 문제를 해결한다.

[예1]

 위의 그림은 베이스가 되는 생성 이미지에 같은 노이즈만을 바꾼 결과이다. 노이즈는 확률적 특징(머리의 흐름)만을 변화시키며, 다른 고레벨 특징(얼굴의 특징이나 방향 등)은 그대로이다. 위 그림의 흑백 이미지는 어떤 부분이 노이즈의 영향을 받고 있는지를 표시한 것이다. 하얀 부분이 노이즈의 영향을 받고 있는 부분이다. 대부분 머리카락, 윤곽, 배경이지만 눈의 반사도 하얗게 되어 있다.

[예2]

 위 그림 역시 노이즈가 어느정도 생성 이미지를 변화시키고 있는지에 대한 것이다. 남성의 생성 이미지도 똑같이 (a) (b) (c) (d)로 나눠서 봐줬으면 한다.

 (a) 모든 층에 노이지를 추가한 경우

 (b) 노이즈를 전혀 추가하지 않은 경우

 (c) 노이즈를 해상도가 높은 층(64x64~1024x1024)에만 추가한 경우

 (d) 노이즈를 해상도가 낮은층(4x4 ~ 32x32)에만 추가한 경우

(a)와 (b)를 비교하면 알 수 있듯, 노이즈가 추가되지 않는 것으로 특징없는 그림같은 (리얼하지 않은) 이미지가 생성된다. (d) 노이즈를 해상도가 낮은 층에만 추가한 경우, 머리카락 색깔 요소가 커지게 되거나 배경의 특징이 크게 표현된다. (c) 노이즈를 해상도가 높은 층에만 추가한 경우, 머리카락의 색깔, 배경, 피부가 깔끔하게 표현된다.

 

2) 스타일과 노이즈의 정리

스타일을 변화하는 것으로 전체적인 영향(자세, 방향, 얼굴의 특징을 변화시키는)을 미치는 반면, 노이즈는 그렇게 까지 중요하지 않은 부분(머리카락의 흐름이나 수염)에 영향을 미친다.

 스타일이 이미지 전체에 영향을 미치는 것은 채널 각각에 스케일 변환, 바이어스 변환을 시키기 때문이다 (AdaIN처리) 그러므로 이미지 전체에 영향(머리, 명암, 배경)은 일관되게 컴파일된다. 

 한편 노이지는 독립적으로 픽셀 각각에 더해져, 확률적인 특징을 컴파일하는 것이 이상적이다. 만약 생성 이미지의 자세를 변화시키고 싶을 때는 노이즈를 사용했다간 모순된 선택이므로 Discriminator에 의해 간파당해버리고 만다. 네트워크는 명확한 지시가 없어도 적절한 스타일과 노이즈를 사용하는 것을 학습한다.


5. StyleGAN의 해석

 지금까지 봐온 것처럼 StyleGAN에서는 예쁜 이미지를 생성해냈지만, 몇 가지 노이즈나 부자연스러운 부분이 발생한 부분이 있다는 것도 확인하였을 것이다.

 먼저 아래의 그림에서 발생한 물방울과 같은 노이즈(droplet)에 대해 살펴보자.

 이러한 노이즈는 보통 이미지를 출력했을때 나오는 것은 아니지만, 64x64정도의 해상도로 모든 특징량 map에서 발생하는 문제이다.  학자들은 이러한 문제의 원인으로 정규화층(AdaIN)에 있다고 생각하고 있다. 작은 스파이크형의 분산을 가진 특징률 map이 입력되면, 원래의 값이 작아도 정규화에 의해 값이 커져 큰 영향력을 갖게 된다. 실제로 정규화를 제거하면 droplet은 사라지는 것 같다. 

 다음은 특징의 일부분이 얼굴의 움직임을 추적하지 못하는 문제이다. 아래의 그림에서는 얼굴이 가로 방향으로 변화가 생겼지만 치열은 그렇지 않아 부자연스러워져버렸다. 학자들은 이러한 문제는 Progressive Growing형식의 학습을 하기 때문에 발생된다고 보고 있다. 각 해상도의 이미지는 대응하는 Generator로 독립해 생성되기 때문에, 자주 나타나는 특징이 나타나고 만다는 것이다. 

 또한, StyleGAN에 도입된 Perceptual Path Legth에 대한 것인데, 이미지의 질과 관계가 있는 분석 결과 알게 되었다. StyleGAN2의 학자들은 Generator가 Discriminator의 선별을 받아가면서 고품질 이미지의 생성하기 위해서는 고품질 이미지를 만들어내는 잠재공간을 넓힐 필요성이 중요해지고, 저품질 이미지를 만드는 잠재변수는 급변하는 공간에 밀려들어가 버리기 때문이 아닌가하는 가설을 세우고 있다. 

PPL vs Image Quality

 물방울 노이즈, 추적하지 않는 모드를 개선하고, 더욱이 PPL의 성질을 이용한 이미지 생성의 품질을 개선하는 것이 바로 StyleGAN2이다. StyleGAN2에 대해서는 시간이 된다면 다뤄보도록 하겠다. 


(cf) StyleGAN을 Tensorflow2.0로 작성한 깃허브

https://github.com/manicman1999/StyleGAN-Tensorflow-2.0

https://github.com/taki0112/StyleGAN-Tensorflow?fbclid=IwAR3gos-uQrb1tGd0m-JVD6nXpRkkjBOb7oXVlxUzQAraG79onKMmK879h0w


참고자료

https://qiita.com/Phoeboooo/items/7be15acb960837adab21

https://medium.com/@akichan_f/gan%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89stylegan2%E3%81%BE%E3%81%A7-dfd2608410b3

 

728x90