IT/AI\ML

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

개발자 두더지 2020. 4. 24. 12:01
728x90

1. StyleGAN2

 이전 포스팅에서 소개한 StyleGAN을 개선한 것이 StyleGAN2이다. 변화된 특징은 아래와 같다.

1) AdaIn에서 변화된 정규화 방법

 AdaIn은 실제로 입력된 데이터의 통계량을 사용하여 정규화하지만, 이것이 이전 포스팅에서 말했듯 droplet현상을 야기한다. 그러므로 학자들은 실제의 데이터의 통계량이 아닌 추정 통계량을 사용하여 Convolution의 가중치를 정규화하여 droplet현상을 예방하고 있다. 모식적으로 표시하자면 아래의 그림과 같다.

 먼저, StyleGAN의 핵심인 Style block(그림 b의 회색 부분)을 단순화하는 것으로 시작한다. AdaIn을 상세히 기술하자면,  두 가지 방법이 있다. 첫 번째 방법은 콘텐츠 정보를 자신의 통계량으로 정규화하는 것, 두 번째 방법은 정규화된 콘텐츠 정보를 스타일의 정보를 이용하여 선형 변환하는 것이다. StyleGAN(a)의 AdaIn부분을 적절하게 확장하면 (b)와 같은 그림이 된다. AdaIn 내부의 조작으로는 콘텐츠의 정규화 → 스타일 벡터에 의한 선형변환으로 이루어지지만, Style block의 중간에서는 스타일 벡터에 의한 선형변환 → (Conv→) → 콘텐츠의 정규화의 순서가 된다는 점을 주의하자.

 다음으로 평균치를 사용한 조작은 불필요하다고 생각해, 정규화의 조작을 표준편차에 따라 나눗셈하는 것으로 그치기 때문에 스타일의 선형변환도 계수를 곱하는 것뿐만 한다. 그리고 노이즈 삽입부분이 Style block 내부에 위치할 필요가 없기 때문에, Style block 밖에 존재한다(c).

 이것으로 Style block내의 조작을 단순화시킬 수 있다. 여기서 제일 처음의 Style 벡터에 의한 선형변환을 Convolution 내부의 처리로 실시하는 것을 고려한다. Style block안에서는, 스타일 벡터 W를 선형변환한 y_s라는 계수를 곱하고 잇다. 콘텐츠 이미지인 s를 곱한 것을 Convolution의 가중치 w_ijk로 처리하는 조작은 콘텐츠 이미지를 가중치w_ijk과 s의 곱으로 Convolution한 것과 동등하다. 위의 설명에 대해서는 아래와 같이 바꿔 작성할 수 있다. (위 그림(d)의 Mod의 조작)

다음은 정규화의 조작(여기서는 표준편차로 나누는 것만 한다)를 Convolution 내부에서 처리하는 것으로 한다. 여기서 입력은 표준정규분포에 따른다고 가정한다면 입력 이미지의 표준편자는 가중치의 L2 로그가 된다.

 하고 싶은 것은, Convolution한 출력에 표준편자의 역수를 곱하는 조작이다.  그리고 Convolution한 출력에 표준편자의 역수를 곱하는 조작은 가중치 w_ijk에 표준편차의 역수를 곱한 것과 같다. 이러한 설명은 아래의 식으로 표현할 수 있다. (위 그림(d)의 Demod)

 이것으로 스타일에 있어서 선형변환 → Convolution → 출력의 정규화라는 Style block의 조작을 하나의 Convolution처리로 표시하는 것이 가능해졌다. 정규화의 부분은 출력이 정규 분포라고 가정하여 정규화하는 처리를 하므로 여기서 분포의 가정을 하고 있다. 즉 droplet을 유발하는 실제의 분포를 사용한 정규화가 아닌 가정한 정규화를 사용하며 문제를 예방할 수 있다. 실제로도 사용하면 droplet현상이 나타나지 않는 것을 확인할 수 있다.

 

2) Progressive Growing에서 변화한 고해상도 이미지 생성방법

 원래의 Style GAN의 Generator은 skip connection등이 없는 단순한 구성이다. 이대로 고해상도 이미지를 생성하려고 하면 잘 되지 않으므로 Progressive Growing을 사용하였으나, Generator과 Discriminator의 표현력을 향상시켜 Progressive Growing을 사용하지 않고도 고해상도 이미지를 생성할 수 있도록 하고 있다.

 Progressive Growing은 점차 고해상도용의 Generator과 Discriminator를 추가시켜가는 방법으로 고해상도 이미지를 생성하는데 빈번히 이용되는 방법 중 하나이다. 그러나 각각의 Generator가 독립적으로 있으므로 자주 등장하는 특징을 생성하는 경향에 있으므로 그 결과 얼굴이 움직여도 치아가 추적하지 못하는 결과물로 이어진다. 

  그러므로 학자들은 Progressive Growing을 사용하지 않고, 즉 이미지의 해상도를 향상시키기 위해 조금씩 Generator과 Discriminator을 추가해나가는 방법이 아닌, 고해상도이미지 생성 방법을 제안하고 있다. 아래의 그림과 같이 MSG-GAN과 비슷한 기관을 갖는 네트워크이다.

 여기 (b)-type의 Generator/Discriminater, (c)-type의 Generator/Discriminator, 전부의 조합으로 실험을 실시를 한 결과가 좋은 것을 채용한다고 말하는 전략을 취하고 있다. 실험결과는 아래의 표와 같다.

 이 결과를 봤을 때, (b)-type의 Generator를 사용하면 Perceptual Path Length가 크게 개선되었고, (c)-type의 Discriminator를 사용하면 FID가 개선되는 방향으로 감을 포착할 수 있다. 학자들에 의해 이 네트워크를 채용되고 있다.

 Progressive Growing에는, 먼저 저해상도 이미지를 생성하는 것으로 부터 점점 고해상도 이미지를 생성해나가는 학습 방법이다. 그러나, 새로운 네트워크는 이러한 학습을 따르고 있을까? 그것은 아래의 실험 결과 그림에서 확인할 수 있다.

 (b)-type의 Generator은 각 해상도의 생성 이미지를 서로 더하기 때문에 최종적으로 생성된 이미지로의 공헌도를 각 해상도마다 산출하는 것이 가능하다. 이런 해상도마다의 공헌도를 세로축, 학습시간을 가로축으로 표시하고 있다. 새로운 네트워크를 채용한 (a)에서는 훈련시간의 경과에 따라 점점 고해상도 쪽의 공헌도가 커지고 있으며, 보다 네트워크사이즈를 크게 한 경우(b)는 학습의 마지막 쪽에서 더 고해상도 쪽의 공헌도가 상승하고 있음을 확인할 수 있다. 

  이런 기관을 사용해 생성한 이미지는 아래의 그림과 같다. StyleGAN에서는 눈이나 이가 부자연스러운 것에 비해, 새로운 기관에서는 얼굴의 방향 변화와 함께 눈이나 이가 자연스럽게 이동하고 있음을 알 수 있다.

Style GAN(Progressive Growing을 사용한 경우)
새로운 학습 방법(Progressive Growing을 사용하지 않음)

 

3) 잠재 공간을 부드럽게하는 Path Length Regularization

 잠재공간의 지각적인 부드러움을 나타내는 Perceptual Path Langth와 이미지의 품질에 상관 관계가 있을 것이라고 알고 있었기 때문에, 이것을 정규화 항으로 모델에 통합한다. 수식은 아래와 같다. a는 정수이고 y는 정규분포로부터 생성된 랜덤한 이미지이다. 

 이러한 정규화는 잠재변수의 섭동(;주요한 힘의 작용에 의한 운동이 부차적인 힘의 영향으로 교란되어 일어나는 운동)에 대해 Generator의 출력값의 변화가 가급적 작도록 하는 방향으로 유도하고 있다. 정수 a는 제1항목의 이동평균에 의해 동적으로 변화시키면서 학습을 하고 그에 따라 최적의 값이 학습 중에 설정되도록 하고 있다.


2. StyleGAN2에 대한 실험 결과

 먼저 각각의 방법 도입에 대한 스코어의 변화를 두 개의 데이터 세트로 살펴보자. 

 (A) Baseline StyleGAN, (B) AdaIn에서 변화된 정규화의 도입, (C) 잠재공간을 부드럽게 하기 위한 정규화 도입, (E) Progressive Growing 을 사용하지 않은 이미지 생성이다. 각각의 방법이 좋은 기록을 내고 있는 부분이 어디인지 알 수 있을 것이다.

 C에 대한 설명은 생략했지만 정규화 항의 변경은 자주 실시 않아도 괜찮으므로 이것을 "Lazy"한 정규화라고 부른다. 결과를 보면 Lazy해도 스코어에 나쁜 영향을 미치지 않는다는 것을 알 수 있다. F는 지금까지 설명한 방법 전부를 더한 네트워크의 모식을 크게한 수준이다. 

 Lazy한 정규화와 AdaIN을 Convolution내부에 입력하면 학습시간이 좀 더 짧아지며(37→61 images/sec), 그 덕분에 네트워크 규모를 더욱 크게하는 것이 가능한 것 같다. (31 images/ sec)

 PPL의 분산을 살펴보자. 'PPL이 작다'라는 것은 생성이미지의 질이 좋다는 것이므로 StyleGAN2에서는 이미지의 질이 전반적으로 개선고 있음을 알 수 있다.

 다음의 생성 이미지를 살펴보자. 매우 좋은 고품질의 생성이미지이다.

 최종적으로 이미지로부터 잠재변수에 떨어 뜨리는 수법으로 분석해본 결과이다. 아래의 히스토그램은 LPIPS거리로, 원본 이미지와 한 번 잠재적 공간에 투영한 후 다시 Generator를 통해 최적의 결과를 생성한 것을 의미하며, 이것을 실제 이미지, StyleGAN, StyleGAN2로 가시화한 결과이다. (실제 이미지도 유사하게 잠재공간으로 떨어뜨리는 것이 가능하다)

 StyleGAN2는 StyleGAN, 실제 이미지보다도 잠재공간에의 투영이 잘 되고 있다는 것을 알 수 있다. PPL에 관해서 정규화 항에 잠재공간을 부드럽게 하는 것으로 이러한 결과가 나타났다고 생각된다. 실제로 원본 이미지 → 잠재공간으로의 반영 → Generator로 재구성한 프로세스를 거친 이미지가 바로 아래의 이미지이다. StyleGAN, 실제 이미지는 원본의 곳곳과 다른 특징을 가지고 있지만, StyleGAN2는 꽤 정확하게 재현하고 있음을 알 수 있다. 


3. 결론

 StyleGAN2에서는 정규화의 개선과 잠재공간의 부드럽게하는 제약을 추가하여 이미지의 품질을 향상시키고 있다. 그러나 8GPU(V100)를 사용한다고해도, FFHQ데이터 세트는 9일, LSUN CAR은 13일의 학습시간이 필요하다. '파라미터의 많음 = 성능'이라는 것은 BigGANs등에서도 입증되었지만, 개인 PC에서 취급할 수 있도록 고성능 GAN가 나와서 개인적으로 기쁘다. 


(cf) StyleGAN2관련 Tensorflow 깃허브

https://github.com/NVlabs/stylegan2

 

NVlabs/stylegan2

StyleGAN2 - Official TensorFlow Implementation. Contribute to NVlabs/stylegan2 development by creating an account on GitHub.

github.com


참고자료

https://medium.com/@jonathan_hui/gan-stylegan-stylegan2-479bdf256299

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