z StyleGAN2 : Analyzing and Improving the Image Quality of StyleGAN
본문 바로가기

Generative Model

StyleGAN2 : Analyzing and Improving the Image Quality of StyleGAN

728x90

StyleGAN1 모델이 소개된 이후 NVIDIA에서 해당 모델의 여러 문제점을 발견하고 보완한 결과를 제시한 논문입니다 :0

 

Abstract

기존의 StyleGAN 모델은 확실히 좋은 성능을 보였지만 여러 문제점들이 발견되었습니다.

본 논문에서는 이러한 문제점들을 characteristic artifacts, 혹은 artifacts라고 부릅니다. 이러한 artifacts 들을 해결하기 위해서 train하는 방법과 architecture 자체에 대한 수정을 통해 보완한 결과를 제시합니다.

 

Introduction

이전에 제시되었던 StyleGAN 모델을 통해 생성된 이미지에는 약간 이상한 부분이 발견되곤 했습니다.

첫번째로 생성된 이미지에 물방울과 같은 얼룩이 생긴다는 점(blob-like artifact)이고, 두번째로는 interpolation 과 같은 작업을 진행 할 때 이빨의 위치 같은 요소가 고정된 위치에 나타난다는 것입니다.

 

이와 같은 artifacts 를 해결하기 위해서 AdaIN 작업을 수정했고 Progressive growing 구조 또한 다시 수정했습니다.

 

그리고 FID나 Precision and Recall 과 같은 metric은 texture 위주 요소에 집중하는 경향이 있는데 인지학적 측면에 있어서는 shape 정보가 매우 중요합니다.

이를 측정하는 척도인 PPL metric을 제안합니다.

 

마지막으로 smooth mapping을 위한 regularizer를 제안합니다.

 

Removing Normalization Artifacts

StyleGAN에서 만든 이미지들에는 물방울과 같은 얼룩이 생기곤 했습니다. 근데 이에 대한 원인은 확실히 파악을 하지는 못했고, 보통 64 x 64 resolution의 feature map 단계에서 생겨나곤 햇습니다.

 

그래서 AdaIN에서 mean과 std로 Normalization 할 때 심각한 정보 손상이 일어나서 이게 원인이 된다는 가설을 하나 세웠고, 실제로 Normalization step을 없앴을 때 이러한 현상이 사라졌습니다.

 

Generator Architecture Revisited

위와 같은 문제점 때문에 AdaIN operation에 대해 다시 생각해야 할 필요가 있습니다.

 

AdaIN operation을 세부적으로 보면 두가지 부분인 normalization, modulation 으로 나눠볼 수 있습니다.

normalization은 input의 mean과 std 로 정규화 하는 부분이고, modulation은 style vector로 통계적 특성을 바꿔주는 부분입니다.

 

이 과정 중에서 scaling을 mean이 아닌 std로만 사용하여 진행해서 artifact를 없앨 수 있었습니다.

 

이 뿐만 아니라, normalized data에 적용하는 style block을 바깥으로 빼서 더 예측 가능한 결과를 내놓을 수 있게 되었습니다.

 

Instance Normalization Revisited

위에서 언급했듯이, artifacts를 없애기 위해 normalization의 scale 부분을 수정했는데 이러한 explicit forcing 없이 artifact 현상을 제어하는 방법을 하나 더 제안합니다. (좀 더 완화된 방법.)

 

 

위의 figure와 식들이 이를 잘 나타냅니다. 식의 오른편의 코드는 실제로 구현할 때의 코드를 나타냅니다.

 

강제적으로 input의 통계적 특성을 직접 조절 할 때와는 달리, weight 값 자체에 modulation을 진행합니다. 여기에서 s는 style을 의미합니다. 

 

이렇게 modulation을 적용한 weight에 demodulation, 식 (2), (3)을 적용해서 이 weight로 Convolution을 적용하면 됩니다.

 

이렇게 함으로써 feature에 직접적으로 작용하지 않고 통계적 예측을 하는 방식으로 바뀌게 됩니다. (학습되는 weight와 들어오는 style을 가지고 Mod, Demod가 진행되기 때문.)

 

그렇기 때문에 AdaIN보다 weaker 한 Normalization 방법이라 할 수 있습니다. 이 방법을 통해 AdaIN을 대체하면서 Droplet 현상을 제거할 수 있었습니다.

 

Image quality and generator smoothness

GAN의 metric으로 자주 사용되는 FID, Precision and Recall 같은 척도는 인지학적 측면에서 어긋나는 부분이 존재합니다.

 

인지학적 측면에서 사람은 대상의 "질감"보다는 "모양"에 더 집중하는 경향이 있습니다. 이러한 FID와 같은 metric이 texture에 집중하는 이유는 ImageNet 데이터셋으로 훈련된 Classifier의 경우 대상의 shape 보다는 texture에 집중하기 때문이라 볼 수 있습니다.

 

본 연구에서는 이전 StyleGAN1 논문에서 제안된 Perceptual Path Length가 이러한 shape 과 관련한 image quality를 잘 반영해줌을 발견했습니다. 하지만 이에 대한 이유는 명확하지 않지만, 대신 shape이 망가진 이미지에 대해 discriminator가 페널티를 줄 때 Generator가  취할 수 있는 가장 직접적인 방법이 latent space를 효과적으로 stretch 하는 것이기 때문이라고 가설을 세웠습니다.

 

이 말이 잘 이해가 안되실 수도 있는데, 실험적으로 발견한 사실에 대한 가설을 세운 것이기 때문에 그냥 그렇구나 하고 넘어가시면 될 것 같습니다.

 

(shape이 망가졌으면 discriminator는 generator에게 더 올바른 이미지를 만들라고 페널티를 주는데, 이 페널티에 대해 Generator가 취할 수 있는 가장 쉬운 행동이 latent space를 stretch 하는 것. -> 지각적으로 smooth 하게 만드는 것.)

 

위의 figure는 이 논문에서 제시한 모델이 전 모델에 비해 확실히 PPL에서 강점을 가짐을 보여줍니다. (tight하게 잡음.)

 

Lazy regularization

기본적으로 본 모델은 Lazy Regularization setting을 따릅니다.

Lazy Regularization이란 매번 Regularization을 적용하는 것과 몇 스텝마다 적용하는 것 사이에 큰 차이가 존재하지 않기 때문에 시간 복잡도를 줄여주기 위해 몇 스텝마다 적용해주는 것을 의미합니다.

 

Path Length Regularization

이 부분은 개인적으로 좀 신박했습니다.

Path Length Regularization은 PPL 수치를 줄이기 위한 Regularization 방법입니다.

 

식으로는 위와 같은데 두번째 식과 같은 방법으로 Regularization을 적용하는 이유는 직접적인 계산을 피하기 위함입니다. (autograd를 사용해서 자동으로 계산할 수 있으니까!)

여기에서 y는 normal distribution을 따르는 image이고 a는 상수입니다.

 

PPL 수치가 줄어들기 위해서는 들어오는 input, 즉 w 벡터가 움직이는 만큼 generated image도 일정하게 움직여야합니다. 여기에서 움직이는 방향은 모든 방향을 고려해줘야겠죠! 즉, w의 변화에 따라 모든 방향에 대해 변하는 magnitude가 일정해야 합니다.

 

위의 식은 뭘 의미하는 걸까요?

generator에서 w에 대한 Jacobian은 뭘 의미할까요? Jacobian은 w가 변화함에 따라 g(w)가 얼만큼 변하는지에 대해 나타냅니다. 그럼 w의 변화에 따라 모든 방향에 대해 변하는 magnitude가 일정하려면 모든 방향에 대해 Jacobian의 크기가 일정하면 되겠네요!

 

이러한 점을 고려해주기 위해 normal distribution을 따르는 random image y를 Jacobian과 내적해줍니다. 주어진 batch에 대해 진행하기 때문에 expectation 형식이 되겠네요 !

 normal distribution은 모든 방향이 될 수 있고... 그러면 일정한 크기면서 모든 방향에 대한 벡터를 내적해줬으니까 모든 방향을 고려해서 regularization을 적용해줄 수 있다는 거겠죠!

 

이를 다시 생각해보면 모든 방향에 대한 변화량의 크기를 일정한 상수에 맞추겠다는 뜻 입니다.

 

!! 그러면 원래 목적이었던

"PPL 수치를 줄어들게 하기 위해서는 w벡터가 변화하는 만큼 generated image도 모든 방향에서 일정하게 움직여야한다!"

를 고려해줄 수 있습니다.

논문에서는 Jacobian Matrix가 Orthogonal 할 때 라고 하네용

 

Appendix에서는 Jacobian을 SVD로 분해하고 U,V matrices는 rotation이라는 점을 사용해서 singular values 만이 해당 식에 개입함을 보이고, 이러한 특성을 통해 증명합니다. 한번 읽어보시는 걸 추천드립니다 : 

 

Progressive Growing Revisited

위에서 AdaIN operation을 수정하면서 blob like artifact는 해결했습니다.

하지만 하나의 문제가 더 남았는데요, 위의 Figure를 보면 interpolation을 진행함에 따라 전체적인 shape은 이동하나, 이빨의 위치는 따라가지 않음을 볼 수 있습니다.

 

이러한 문제점을 본 논문에서는 "Phase Artifacts" 라고 명명합니다.

 

이러한 문제점이 나오는 이유는 detail에 대한 강한 위치선호를 갖기 때문인데 이는 각 Resolution Step에서 to-RGB 연산을 적용하기 때문입니다. (PGGAN base라서..)

 

이렇게 각 Resolution step에서 toRGB를 적용하게 되면 각 Resolution step에서 가장 자주 발생하는 detail를 내놓도록 학습하게 됩니다. (Maximal Frequency detail)

 

이대로 훈련을 진행하게 되면 나중 step에서 중간 layer가 high frequency에 집중하려는 경향을 보여서 shift invariance한 image를 생성하게 됩니다.

 

이렇게 문제점에 대한 원인을 특정했으니 해결책으로 architecture를 재고해야함은 당연합니다.

(이전 포스트에서도 말했듯이 이러한 과정이 StyleGAN 시리즈에서는 굉장히 잘 나타나 있습니다. 그래서 지식 외에도 얻어가는게 굉장히 많더라구요 ㅎㅎ)

 

실험적으로 여러 아키텍쳐를 연구해서 위의 세가지 아키텍쳐를 이끌어냈습니다.

물론 데이터셋에 따라 다 다른 성능을 나타낼 수 있는데, 보통 Generator의 경우 Input-Output의 구조를, Discriminator의 경우 Residual net 구조를 따를 때 가장 좋은 성능을 냈다고 합니다.

 

이제 Generator를 통해 이미지를 생성해낼 때 올바르지 않는 현상이 나타났는데, 바로 학습에 따른 층마다의 기여도가 바람직하지 않다는 점이었습니다. 상식적으로 저희의 목적은 마지막 resolution(ex) 1024)에 대한 이미지를 생성하는 것이고 당연히 훈련이 되면 될수록 1024 resolution을 생성해낼 때 기여하는 바가 커야합니다.

(여기에서 각 block의 기여도는 input-output 구조에서 각 block의 toRGB layer로부터 생성된 pixel value의 표준편차를 구하여 측정했습니다.)

 

위와 같은 현상을 막기 위해 64-1024 Resolution block에서의 feature dimension을 두배로 늘렸습니다.

 

Projection of images to latent space

본 모델은 Inversion 과정 또한 소개합니다. 즉 Input image를 잘 표현하는 latent vector w를 얻는 방법을 소개합니다.

 

StyleGAN2 모델은 disentanglement가 굉장히 잘 표현되기 때문에 interpolation 작업을 통해 충분히 예측 가능한 이미지를 만들어낼 수 있습니다.

 

이러한 장점을 이용해서 Gradient Descent 방법을 통해 learnable w와 layer마다 Noise를 주어진 이미지에 대해 훈련시키는 방법을 제안합니다.

 

전에 만들었던 ppt가 있어서 가져왔습니다 ㅎㅎ..

위의 방법대로 진행하면 됩니다.

 

 

728x90