본문 바로가기

Paper Review/Generative Model

[Paper Review] StyleGAN2 : Analyzing and Improving the Image Quality of StyleGAN

StyleGAN2 ( A Style-Based Generator Architecture for Generative Adversarial Networks ), CVPR 2020에 소개되었으며 추후 다양한 후속 연구 및 생성 모델 연구에 큰 기여를 한 논문입니다. 본 논문 이후에 언급되는 StyleGAN은 모두 StyleGAN2를 지칭합니다. 본 논문에서는 기존의 StyleGAN에서 관찰됐던 다양한 artifact들을 분석하고 해결합니다. 또한, 생성 모델의 Metric에 대한 고찰과 함께 이러한 metric을 학습에 녹여 더 개선된 이미지를 생성해내도록 하고 있습니다. 그럼 시작하겠습니다. :)

 

1. Abstract


본 논문에서는 State of Art를 달성했던 StyleGAN을 분석하며 찾은 2가지의 artifact를 네트워크의 아키텍처와 학습 방식의 변화를 통해서 해결하고자 합니다. 뿐만 아니라 추가적인 이미지 질 개선을 위해서 StyleGAN에서 metric으로 사용했던 Perceptual Path Length개념을 regularization에 녹였습니다. 이를 통해 본 논문에서는 몇몇 dataset들에서는 기존의 SOTA보다 상당히 개선된 퀄리티의 이미지들을 생성해낼 수 있었습니다.

 

 

2. Removing Normalization Artifacts


StyleGAN이 SOTA를 달성한 이후 많은 관심을 받으면서 동시에 StyleGAN이 가지고 있는 artifacts가 많은 관찰자들로부터 확인됐습니다. 저자들은 이러한 artifacts를 분석해 원인에 따라 2가지로 분류하면서 각각을 해결하기 위해서 네트워크 아키텍처의 변화와 학습 방법의 변화를 제시했습니다. 각각의 artifact를 분석하며 어떻게 이러한 artifact를 없앴는지 살펴보겠습니다.

 

2.1. common blob-like artifacts

First, we investigate the origin of common blob-like artifacts, and find that the generator creates them to circumvent a design flaw in its architecture. In Section 2, we redesign the normalization used in the generator, which removes the artifacts.

첫 번쨰 artifact는 common blob-like artifacts라고 하는 water droplets를 닮은 blob-shaped artifacts입니다. 쉽게 말해 물방울 모양을 닮은 artifact가 생기고 있다는 것입니다. 저자들은 이러한 artifact가 생기는 이유를 generator의 구조적 결함 때문이라고 지적했습니다. 이를 해결하기 위해서 normalization 부분을 새롭게 설계했습니다. 지금부터 차근차근 살펴보도록 하겠습니다.

what is common blob-like artifacts?

먼저 발생하고 있는 artifact에 대해서 분석해볼 필요가 있습니다. 상단의 이미지로부터 이러한 droplet을 확인할 수 있다고 하는데, 사실 최종적으로 생성된 이미지에서는 이러한 artifact가 명확하게 느껴지지는 않습니다. 하지만, generator에서 만드는 intermediate featrue map을 보게 된다면 다음과 같이 명확한 artifact가 존재하는 것을 볼 수 있습니다. 이러한 artifact들은 대부분 64x64 resolution의 feature map에서부터 생겨 progressive growing 되면서 더 강해집니다. 앞서 구조적 결함이라고 한 부분을 여기서 확인할 수 있습니다. 거의 모든 이미지에서 64x64 feature map부터 생기는 것을 통해 data-problem보다는 systemic problem이 확실하다고 생각한 것입니다. 한가지 이상한 점은 GAN이라면 이러한 공통적으로 생성되는 artifact가 discriminator에 의해서 없어지지 않고 있는 것은 이상하다는 것입니다. 이에 대해서는 저자들 또한 명확한 이유를 찾지는 못한 것 같습니다.

https://www.youtube.com/watch?v=c-NJtV9Jvp0

 

What cause these artifacts?

어쨋든 저자들은 이러한 artifact를 발생시키는 구조적 결함은 AdaIN으로 꼽고 있습니다. 조금 추상적으로 말하자면, 각 채널의 featrue map들 간의 강력한 연관관계가 있을 수 있는데, Instance Normalization을 통해서 채널별로 feature map을 각 feature map의 statistics( mean, variance)로 normalize 하게 되면 이러한 정보가 파괴된다는 것입니다.

좀 더 쉽게 생각하자면 상단의 이미지에서 activation map에서 다음과 같은 artifact가 생기는 부분들을 보시면 검거나 하얀것을 볼 수 있습니다. 분명 normalization을 통해서 원하는 범주로 값들을 가져왔는데, 각 채널마다 다른 값으로 scaling이 되다보니 나중에 채널들을 다시 합칠 때 다음과 같이 범주를 많이 벗어난 ( 너무 값이 작거나(검) 너무 값이 큰(흰 ) 부분들이 생기게 되는 것입니다.) strong, localized spike가 생기게 되는 것입니다.  즉 normalization을 통해 얻고 싶은 값의 범주가 예를 들어 -1,1이면 그걸 확 넘어가는 무한대 같은 값이 만들어지는 부분이 있는 것이고 feature map의 이런 부분은 generator를 타더라도 실제 칼라 값을 형성해내지 못하는 것입니다. ( Normalization이 값이 너무 증폭되지 않기를 바란다는 것을 다시 상기시킵시다. )

한 번 자세히 살펴봅시다. Normalizatoin은 다음과 같이 우선 conv연산이 적용된 뒤에 feature map에 적용됩니다. conv는  다음과 같이 특정 feature map의 전체 채널을 conv kernel을 통해 연산을 진행한 후 weighted average를 해서 최종 결과 픽셀 값 하나를 만들게 됩니다.( 마지막 붉은색 블록 ) 그런데 이러한 feature map을 각각의 채널별로 normalizaton 한다면 서로 다른 scale로 scaling이 된 값들을 이용해서 weighted avergae를 해서 픽셀 값하나를 만들게 되는 것인데, 그렇게 되면 값이 정말 커지거나 작아지는 local 한 부분이 생겨 spike값이 생길 수 있는 것입니다. 각 채널들이 모두 다른 스케일인데 그걸 wieghted average해서 한 값을 만들어내기 때문인 것이죠!

https://towardsdatascience.com/types-of-convolution-kernels-simplified-f040cb307c37

실제로 이러한 normalization이 artifact를 발생시키고 있다는 가설을 확인하기 위해서 저자들은 normalziation을 그냥 제거해봤는데요. 그 결과 이러한 droplet artifact가 깔끔하게 사라진 것을 확인할 수 있었습니다. 이를 통해 저자들은 blob artifact를 발생시키고 있는 것이 AdaIN이라는 것을 확신했습니다.

 

Goal

그래서 결과적으로 저자들이 하고싶은 것은 이러한 normalization의 효과는 얻고 싶으면서도 현재의 Instance Normalizaton이 유발하는 feature map들 간의 관계 파괴를 통한 spike발생 즉 특정 local 한 부분이 너무 강하게 부스팅되는 것을 막고 싶은 것입니다. 지금부터 저자들이 어떻게 이러한 목적을 달성했는지 살펴보도록 하겠습니다.

 

2.1.1. Revised Serveral Details

먼저 본격적으로 이러한 문제를 해결하기에 앞서, generator architecture를 조금 개정해 디테일한 부분을 좀 바꿈으로써 앞선 normalziation문제를 해결한 새로운 설계가 훨씬 더 잘 동작하게 했습니다. 하지만, 직관적으로는 generator에서 필요없는 부분들을 제거한 것에 가깝습니다. 

기존의 styleGAN은 bias와 noise를 style block안에서 적용하고 있습니다. 이러한 구조는 해당 scale에서의 style의 영향과는 반비례하는 상대적 영향을 유발합니다. 즉, 현재 스타일의 magnitude가 크다면  다시 말해 coarse 한 style정보에서 bais와 noise는 훨씬 적은 영향을 미친다는 것입니다. 이러한 관측 결과는 일반적으로 저자들이 생각했던 style이 커지면 bias, noise의 영향도 마찬가지로 coarse 한 영향을 줘야 한다는 것과 달랐습니다. 그리고 저자들은 이러한 문제가 발생하는 이유가 normalization이 되기 전에 bias와 noise가 들어가서 그렇다고 생각했습니다. 따라서 원래의 목적을 고려해 저자들은 bias와 noise가 더해지는 부분을 style block의 밖으로 뺐습니다. 즉, normalized 된 output에 이러한 operation을 적용한 것입니다.

또한, 기존의 AdaIN을 구분짓자면 normalization과 modulation으로 나눌 수 있는데 이 normalization과 modulation 두 개가 std에 대해서만 operation되는 걸로도 충분하다는 것을 확인했습니다. 즉, mean에 대한 연산이 없어도 충분히 원하는 normalization효과와 style modulation을 할 수 있었다는 것입니다. 즉, AdaIN에서 scaling factor에만 해당하는 부분들만을 사용해 normalization과 modulation을 하겠다는 것입니다. 

따라서, generator에서 몇가지 디테일한 부분들을 개선했습니다. bais와 noise operation은 style block 밖으로 뺐고, mean에 해당하는 operation은 전부 제거했습니다. 이러한 개선 이후 결과를 관측했을 때 모두 결함 없이 잘 개선된 것을 확인했습니다. 이렇게 한 revised servaral details는 뒤에서 하게 될 redesigned noramlizatoin의 좋은 스타팅 포인트를 제공하게 됩니다. 즉, 지금 살펴본 내용은 디테일한 개선 정도라고 생각하시면 될 것 같습니다. 앞서 언급했던 핵심적인 목표는 지금부터 살펴보도록 하겠습니다.

2.1.2. Weight Demodulation : Normalization Effect without artifacts ( Main Goal  )

The main idea is to base normalization on the expected statistics of the incoming feature maps, but without explicit forcing.

그래서 다시 돌아와서 저자들이 하고싶은 것은 noramlziaton은 효과는 얻고 싶으면서도 Instance Normalization이 유발하는 strong, localized spike로 인해 발생하는 artifact는 없애고 싶은 것입니다. 사실 해결책은 간단합니다. 각각의 채널별로 normalization을 하는 것이 문제였으니 각각 하지 말면 되는 것입니다. 하지만 이러면서도 기존의 normalization의 효과를 누려야 하니 즉 값의 증폭을 막아줘야 하니 복잡해지는 것입니다.

이를 위해서 저자들은 explicit statistics를 통한 normalization이 아닌 expected statistics를 통한 normalization을 통해서 이를 달성하고자 했습니다. 현재 문제 상황을 다시 정리하자면 값이 부스팅 되는 증폭되는 부분이 존재하고 있고 이것이 Instance Normalization으로부터 발생하고 있는 것인데, 저자들은 이러한 문제를 explicit statistics 즉 각 피처맵에서 계산된 통계치로 사용하는 것이 아니라, expected statistics로 해결하겠다는 것입니다.

이게 무슨 말일까요? 사실 저희가 결국 하고 싶은 것은 어느정도 범주로 들어오게 되는 결괏값을 만들고 싶은 것이고 이를 위해서 normalization을 사용하고 있는 것입니다. 값의 증폭을 막고 싶은 것이지요. 이를 위해서 기존에는 feature map들에 통계적인 변형을 가해줬는데, 이렇게 feature map별로 독립적이게 강제적인 normalization을 수행하게 되면 feature map 간의 관계가 깨질 가능성이 높아진다는 것입니다. 즉 값 자체를 직접적으로 건드리고 있는 것입니다. 그러다보니 관계가 깨질 수밖에 없게 되는 상황이 발생하는 것입니다.

따라서 저자들은 이러한 feature map에 통계적인 변형을 가하는 것을 지금처럼 직접적으로 하는 것이 아니라 weight에 대해서 통계적 변형을 함으로써 간접적으로 feature map에 통계적인 변형을 가하고자 했습니다. 즉, expected statistics 기대하는 통계적 변형이 feature map에 간접적으로 일어나도록 한 것입니다.

normalization 효과를 통해 값의 증폭을 막으면서도 서로 다른 채널들간의 관계가 깨지는 상황을 막기 위해서 저자들은 feature map을 직접 건드리지 말고 weight를 건드리는 방식을 제시합니다. 즉, 어차피 우리가 원하는 것은 값들에 대한 것이니 weight를 낮추게 되면 값의 증폭을 막을 수 있으면서도 앞서 살펴봤듯 conv 연산 자체가 채널들 간의 weighted average를 통해서 한 값을 결정하게 되므로, normalization의 효과를 가져가면서도 이러한 artifact문제를 해결할 수 있게 될 것이라는 겁니다. 즉 기존의 conv -> normalization하는 것은 normalization이 채널 간 관계를 깨트리고 있는데 어차피 normalization 목적은 값의 증폭을 막는 것이니 conv의 weight를 낮춤으로써 normalization의 효과를 줄 수 있도록 하면  이 channel 별로 normalization을 하는 것도 아니고 weighted average가 되어 정보가 고려되니 conv만으로 같은 normalization 효과를 낼 수 있으면서도 artifact 문제도 발생하지 않을 것이라고 주장한 것입니다.

즉 상단의 도식처럼 기존의 아키텍처는 대부분이 feature map에 직접적으로 변형을 가하는 방식으로 이루어졌다면, weight를 잘 건드리지 않았는데, 이번에 weight demodulation으로 대체함으로써 새롭게 제안하는 방법은 다음과 같이 feature map에서 직접적으로 modulation, demodulation같은 통계적 변형이 이루어지지 않고, weight에서 일어난다는 것입니다. 위 도식의 각 flow를 비교해서 확인하면 훨씬 이해가 잘 될 것 같습니다.

Style Modulation

따라서 앞으로 대체될 방법들은 모두 weight를 이용하게 될 것입니다. 그러면 여기서 들 수 있는 의문은 기존의 style 정보를 반영하는 style modulation을 어떻게 할 건데?라는 생각이 들 수 있습니다. 해당 부분까지 차근차근 살펴보도록 합시다.

w and w 0 are the original and modulated weights, and si is the scale corresponding to the ith input feature map,

우선 style정보를 반영하는 style modulation에서도 이러한 연산을 weight에 하는 것으로 대체함으로써 동일한 효과를 얻도록 대체했습니다. 앞서 mean을 사용하지 않아도 된다는 것을 실증적으로 확인했기에 style 정보 반영을 위해서 기존의 feature map에서도 style값으로 scaling만을 하게 됩니다. 여기서 주목할 점은 scaling입니다. 즉, multiplication만 한다는 것입니다. 이렇게 feature map에 직접 multiplication을 하는 것은 어차피 연산될 weight에 scaling을 해주는 것과 동일한 의미일 것입니다. 어차피 scaling 곱이니까요!  따라서 다음과 같이 weight에 scaling factor를 곱해줌으로써 대체됩니다.

The modulation scales each input feature map of the convolution based on the incoming style, which can alternatively be implemented by scaling the convolution weights

 

Weight Demodulation

하지만, 사실 주목할 부분은 이러한 modulation보다는 기존의 instance normalization에 해당하는 부분인 demodulation부분입니다. 기존에는 역시 feature map자체에 scaling을 통해 값을 줄여주는 normalizatoin 역할을 했다면 이번에는 weight값에 이러한 scaling을 적용해서 (역시 곱이니까 가능 ) feature map에 직접 normalization을 해주는 것과 유사한 효과를 이러한 weight를 통해서 feature map이 기대하는 통계적 변형이 일어나도록 할 수 있는 것입니다. 

기존의 feature map에 대해서 normalization을 할 때 revised architecture처럼 시그마 즉, std에 대한 값만으로 했는데 이를 고려해서 weight에 대해서도 Conv를 거쳐서 나온 feature map의 std를 다음과 같이 weight를 이용해서 정의할 수 있고 이를 이용해서 다시 demodualtion을 해주는 것입니다. 이렇게 함으로써 std가 1인 기존의 input의 statistics에 맞게 바뀌도록 하는 것입니다.

하지만, 이렇게 실제 feature map에 해주는 것과 weight에 해주는 것이 이론적으로 완전히 동일하려면 통계적 가정이 필요합니다.  input이 i.i.d. random variable이어야한다는 것입니다. 하지만, 실제로 이러한 가정을 만족하기는 어렵습니다. 저자들 또한 이 둘이 완전히 동일하지는 않다는 것을 인정합니다. 하지만, 어느 정도 간접적인 효과를 내고 있고 실제로 적용해보니 아래 테이블처럼 정량적 지표에서 좋은 결과를 가져오고 artifact도 사라졌기에 공학적인 접근일 수 있지만 유효한 방법이라는 것을 보인 것입니다. 

 

 

2.2. Removing Phase Artifacts ( Progressive Growing Revisited )

Second, we analyze artifacts related to progressive growing [23] that has been highly successful in stabilizing high-resolution GAN training. We propose an alternative design that achieves the same goal — training starts by focusing on low-resolution images and then progressively shifts focus to higher and higher resolutions — without changing the network topology during training.

두 번째 artifact는 Phase artifact라고 하는 것으로 StyleGAN이 가지는 Progressive Growing Training으로 인해 생기는 artifact입니다. 저자들은 Progressive Growing을 사용했던 이유인 low resolution에 집중해서 학습 후 점진적으로 더 높은 resolution에 집중하면서 학습해나감으로써 고해상도 이미지를 잘 생성해냄을 pggan처럼 위상을 변화시키지 않고 학습시킬 수 있는 네트워크인 Alternative Architecture를 제안합니다. 사실 제안보다는 같은 목적으로 연구되었던 기존의  works를 여러 조합으로 실험해보면서 가장 좋은 것을 선택했습니다. 지금부터 차근차근 정확히 어떤 artifact가 progressive growing으로 인해 생기고 있으며 alternative architecture를 통해서 어떻게 해결할 수 있었는지를 살펴보도록 하겠습니다.

what is phase artifact?

phase artifact란 teeth와 같이 특정 부분이 이미지에서 카메라 pose를 변형시키더라도 pose에 따라 변하지 않고, 이미지 상의 특정 부분에 완전히 align 되어 있어 고정되어 있는 것입니다. 위 이미지에서도 여성에 대해서 다른 카메라 포즈에서 찍은 사진으로 변형시키더라도 blue line이 이미지 자체에 고정되어 있는 것을 확인할 수 있습니다.

what cause these artifacts?

이러한 phase artifact는 progressive growing training으로 인해 발생합니다. progressive growing 학습방식은 한 resolution학습이 끝나고 그걸 trgb로 바꾼 다음에 다음 resolution으로 넘기게 됩니다. 그러다 보니 maximal fequency detail을 생성하도록 강제하고 이러한 high frequenct detail을 네트워크가 충분히 학습하도록 하는데 대신에 shift invariance를 동반하게 됩니다. 다시 말하자면 이러한 progressive growing 방식은 저 해상도에서 얻어진 특징이 고해상도로 전파될 때 저러한 hjgh freauency detail에 집중하다보니까 특정 위치로 전파되고 그렇기 때문에 최종적으로 보이는 이미지의 어떤 특징이 한 부분에 고정된다는 것입니다. 즉, 돌린 그림에서 blue line은 저해상도에서 고정된 위치이기에 이걸 고해상도로 전파시켜도 위치가 계속 똑같이 나오는 것입니다. 이렇게 high frequency detail에 대한 strong location preference 즉 high frequency 부분을 학습하고자 해서 이러한 부분이 강하게 고정되어서 점진적으로 고해상도로 전파되기에 특정 위치에 고정되어 있다가, 다음 high frequency로 넘어가는 즉 new preferred location으로 넘어가면 smooth하게 이미지가 변하는 것이 아니라 확확 점핑하듯이 바뀌게 되는 것입니다. 아래의 동영상에서 간단히 확인해보실 수 있습니다. 저는 우측의 눈이 점핑하듯이 변하는 것이 훨씬 와닿았습니다.

https://youtube.com/clip/Ugkx-5nN7qwukrOAhHFYn5UTWgHG-MMGLvoc

 
https://www.youtube.com/watch?v=c-NJtV9Jvp0

 

2.2.1. alternative architecture for progressive growing

이러한 artifact를 해결하기 위해서는 간단히 progressive growing을 사용하지 않으면 됩니다. 하지만, 그렇게 되면 고해상도 이미지를 생성해낼 수 없게 될지도 모르게 됩니다. 저자들은 기존의 연구들 중에서도 고해상도 이미지를 성공적으로 만들어내는 증명된 연구들을 바탕으로 실증적으로 progressive growing없이 고해상도 이미지를 만들어낼 수 있는 alternative architecture를 찾게 됩니다.

저자들은 기존 연구들 중에서도 Skip Connection / Residual network / Hierarchical method 등의 키워드에 집중했습니다. 그래서 search할 space에 있는 3가지 방법 a, b, c 또한 이 3가지 키워드 중 일부를 만족합니다.

(a) : generator 와 discriminator의 skip connection ( each resolution matching )

(b) : each resolution의 rgb output을 upsampling혹은 downsampling을 한 후 skip connection을 통해 다음 resolution의 RGB Image로 전달해서 정보를 반영하게 한다.

(c) : each resolution마다 residual connection

저자들은 고해상도 이미지를 만들어내는 이러한 3가지 방법들을 genertor와 discriminator 각각에 적용으로 9가지의 조합으로 모두 실험해보면서 결과를 확인하게 됩니다.  그 결과가 위 도식에서 초록색으로 색칠된 부분입니다. 9가지 조합을 실증적으로 실험해봤을 때 generator에서는 output skip connection을 적용하는 것이 PPL을 모든 조합에서 개선시켰고, discriminator에서는 residual connection을 사용하는 것이 FID에 대해서 명확히 좋았습니다. 결과는 아래 table에서도 확인하실 수 있습니다.

따라서 다음 두 조합을 사용하는 alternative architecture가 pggan처럼 위상을 변화시키지 않고 고해상도 이미지를 생성해낼 수 있어 이러한 phase artifact도 개선해줌과 동시에 FID와 PPL의 관점에서도 좋은 결과를 만들어주는 학습 방법으로 제시되었습니다.

2.2.2. Resolution usage 

저자들은 정말로 이러한 alternative architecture가 progressive growing처럼 잘 작동하는지 확인하기 위해서 training할 때 tRGB layer를 통해서 만들어지는 pixel 값들의 standard deviation을 plot했습니다. 이를 통해 저자들은 512x512 해상도에서 이미지의 pixel value를 거의 결정하고 즉, 다양성 있는 결과들을 만들어내고 있고, 1024로 넘어가면서는 그냥 해상도만 늘리는 식으로 학습이 되고 있다는 것을 확인했습니다. 

progressive growing처럼 잘 작동한다면 1024 해상도에서 가장 다양성 있는 결과를 만들어내야할 것입니다. 따라서, 저자들은 이러한 문제상황의 원인을 generator가 1024해상도를 'fully utilize'할 만큼의 network capacity를 가지고 있지 못해서라고 생각했습니다. 따라서 feature map의 수를 늘려서( trainable parameter 수 증가 ) 다른 부분은 유지하면서 network의 capacity를 늘렸고 그 결과는 오른쪽과 같습니다. FID나 PPL의 관점에서 명확한 개선을 가져온 것입니다!  즉, 현재 high reolution을 충분히 활용하지 못하고 있기에 size를 증가시키는 것이 추가적인 개선을 가져온 것입니다.

3. Image quality and generator smoothness


3.1. GAN Metric

기존에는 생성모델의 Metric으로 FID 또는 Precision and Recall을 많이 사용했습니다. 하지만, 이 두 개가 생성 모델에 대한 적절한 Metric이라고 할 수는 없습니다. 그 이유는 다음과 같은 예시에서도 확인이 가능한데요. 하단의 두 모델은 유사한 FID와 P&R을 가집니다. 하지만, model 1 같은 경우에는  이미지를 잘 생성했다고 하기에는 깨져있고 퀄리티가 떨어지는 이미지들이 많이 발견되고 있습니다. 즉, 이러한 정량적 평가가 인지적인 정성적 평가와 다른 것이므로 그 정량적 평가가 정말 좋은 정량적 평가가 아니라고 저자들은 주장하고 있습니다.

그래서 새로운 metric으로 StyleGAN에서 주장했던  latent space로부터 이미지를 생성하는 mapping의 smoothness를 정량적으로 측정하는 metric인 PPL (Perceptual Path Length)과 인지적인 이미지 퀄리티 사이의 상관관계가 관측되기에 PPL이 더 좋은 metric인지에 대한 고민을 시작합니다. 

물론 low PPL을 가진다고 해서 image quality가 좋아지는 것으로 직결된다고 하기는 어렵습니다. PPL이 완전 좋은 metric임을 증명하는 것 또한 어렵고, 실제로 그렇지도 않습니다. 예를 들어 GAN이 하나의 고양이 이미지만 계속 생성해낸다면 PPL이 0입니다.( 하나만 만드니까요 ) 즉, diversity가 없어지는 것이지요. 따라서 low PPL이 완벽한 gan metric이라고 하기는 어려운 것입니다. 하지만, 앞서 관측되었듯이 다른 것들과 함께 쓰인다면 어느정도 image quality를 평가하기에 적절한 metric이라고 저자들은 생각했습니다. 그래서 저자들은 이러한 좋은 metric이지만 같이 고려되어야하는 PPL을 평가 지표로써만 사용하는 것이 아니라 학습과정에 녹인다면 이러한 image quality가 고려된 적절한 이미지가 생성될 것이라고 생각했습니다. 따라서 저자들은 이러한 PPL을 regularization term으로 학습 시에 녹여서 더 좋은 학습을 하게 됩니다.

 

3.2. Background : Jacobian

이러한 내용을 본격적으로 설명하기에 앞서 자코비안에 대한 이해를 해야 합니다. 다시 한번 짚고 넘어갑시다.

자코비안은 다변수 함수의 미분이라고 생각하면 됩니다. ( 물론 엄밀히 미분은 아닙니다. ) 다변수 함수를 생각해봅시다. 다만, 저희는 지금 GAN을 다루고 있으니 GAN에 맞춰서 각 factor들을 이해해봅시다. 다변수 함수는 다음과 같이 다변수 입력과 다변수 출력을 가지게 됩니다. 이때 f() function이 generator라고 생각해봅시다. 저희는 latent code들을 입력으로 넣어 새로운 1024x1024 이미지를 만들어내게 됩니다. 즉, w1 , w2, w3,... 이 입력 x1, x2,... 이 되는 것이고 출력인 f1, f2,... 은 생성된 이미지의 픽셀 값 하나하나가 되는 것입니다. 즉, Generator를 다음과 같이 다변수 함수로 이해할 수 있다는 것입니다.

https://research.yandex.com/news/what-deep-generative-models-can-do-with-images

이러한 다변수 함수의 미분을 생각해봅시다. 미분은 입력의 변화량에 대한 출력의 변화량입니다. 다변수 함수에서 입력 변수 중 하나하나를 바꾸게 되면 결과 값이 전체가 바뀌게 됩니다. 즉, latent code를 아주 살짝씩만 바꾸더라도 생성된 이미지의 아주 많은 pixel value들이 바뀌게 됩니다. 다시 말해, w1이라는 변수 하나가 바뀔 때 1024x1024개의 출력이 모두 바뀌게 되는 것입니다. 이렇게 입력 변수의 차원 하나하나를 변화시킬 때 출력이 어떻게 변하는지 ( 변화량 - gradient로 이해 가능 )를 모든 입력 변수 차원(가장 기본적이고 대표적인 입력 변수들에 대해서 )에 대한 변화량으로 모아서 matrix를 만들게 되면 J_w 자코비안 매트릭스가 됩니다.

즉 모든 입력 변수에 대한 gradient를 모아 둔 것이 자코비안 매트릭스가 되는 것입니다. 하지만 실제 space에서는 입력 변수 한 차원만 변화시키는 것이 아니라 여러 차원을 같이 변화시키는 것이 일반적입니다. 따라서 원하는 모든 vector에 대해서 어떻게 변화량을 구할 것인가에 대한 의문이 들 수 있습니다. 수학자들은 자코비안을 활용하면 원하는 모든 vector에 대한 변화량을 구할 수 있다고 했습니다. 어떻게 가능한 것일까요?

자코비안은 앞서도 말했듯 가장 기본적이고 대표적인 입력 변수들에 대해서 변화량을 미리 구해둔 것이라고 했습니다. 그렇다면 해당 space의 벡터들은 해당 입력 변수들의 선형합으로 표현될 수 있습니다. 따라서, 각각의 입력 변수에 대한 변화량에 scale factor가 들어간 matrix와 multiplicaton을 함으로써 특정 벡터에 대한 변화량을 구할 수 있게 되는 것입니다. 

예를 들어 다음과 같이 w1, w2를 입력으로 받는 예시를 들어봅시다. 다음과 같이 f라는 붉은색 function이 존재하고 이러한 f에 대해서 w1, w2에 대한 gradient를 각각 구해서 넣은 jacobian matrix는 가지고 있습니다. 이때 저희가 궁금한 것은 w1과 w2의 linaer sum으로 표현될 수 있는 초록색 vector V에 대한 gradient를 구하고 싶은 것입니다. 이를 위해서 저희는 jacobian matrix에 다음과 같이 각 w1, w2로 얼마큼 간 것이 V인지를 나타내는 vector를 multiplication을 해줌으로써 V로의 변화량을 w1으로의 변화량과 w2로의 변화량을 이용해서 구할 수 있는 것입니다.

https://pinkwink.kr/855

따라서 결국 자코비안은 내가 얻고 싶은 특정 미분 값을 얻기 직전의 형태로 가장 기본적인 도구인 것이고, 대표적인 변수들에 대한 gradient들이 담긴 matrix고 이 각 gradient들의 조합을 통해서 우리가 얻고 싶은 특정 미분값을 얻을 수 있다는 것입니다. 그래서 gradient는 vector인 것이고 자코비안은 matrix인 것입니다.

이러한 자코비안을 갑자기 왜 이야기했는지 Path Length Regularization에서 어떻게 등장하는지 살펴봅시다.

 

3.3. Path Length Regularization

앞서도 이야기했듯 이미지 질 개선을 위해서 StyleGAN에서 metric으로 사용했던 PPL을 regularization에 녹이고자 했습니다. 이 PPL을 사용하고자 했던 이유는 PPL을 통해서 확인, measure할 수 있는 것이 W space에서의 fixed-size step이 image에서 fixed-magnitude change를 만들어내는지이기 때문입니다. 즉 stylegan에서 살펴봤듯 다음과 같이 왜곡되지 않고 매핑될 수 있도록 하는 input w와 output image간의 관계를 만들어내고 싶은 것이고, 이를 위해서 이러한 관계에 대한 measure인 PPL을 regularization에 녹여서 사용하고자 하는 것입니다. 즉, 저희가 하고 싶은 것은 이렇게 방향에 관계없이 벡터의 길이가 보존될 수 있는 상황입니다. 

How do melting this effect to regularization?

그렇다면 어떻게 이런 방향으로 학습되도록 regularization을 할 수 있을까요? 

앞서 정의했던 문제 상황을 변화량의 관점에서 다시 서술한다면 input w가 변했을 때 output image가 변하는 정도가 모든 direction에서 equal에 가까워야 한다는 것입니다. 그렇다면 앞서 자코비안에 대해 설명하면서 예를 들었던 generator g(w)라는 다변수 w를 입력으로 받아 다변수인 output image를 만들어내는 다변수 함수 g로 정의하게 되면, 이러한 변화량이 간단히 자코비안을 통해서 얻어질 수 있게 되는 것입니다. ( 자코비안은 대표 방향들의 변화량이지만, 이를 이용해서 모든 방향에 대해서 얻을 수 있기 때문이죠 )

따라서 저자들은 random direction에 대해서 이러한 변화량이 일정하도록 regularization term을 걸어줌으로써 방향에 관계없이 벡터의 길이가 보존되어 왜곡 없이 깔끔한 매핑이 일어나도록 학습시킬 수 있다는 것입니다. 그렇게 제안된 regularization term은 다음과 같습니다.

앞서도 말했듯 random direction에 대해서 이므로 Random Normal로부터 뽑은 y를 이용하게 됩니다. 그리고 해당 direction에 대한 자코비안과 constant a 간의 거리를 measure 함으로써 매핑 후에도 서로 다른 방향에 대해서도 비슷한 length를 가지도록 하는 것입니다. ( 참고로 random direction의 경우 w를 random normal vector로 샘플링해서 사용함으로써 만족시켰습니다 ) 이때 이를 좀 더 수학적으로 정의하자면 Jacobian matrix가 즉 각 방향에 대한 변화량이 orthogonal matirx여야 한다는 것입니다. otrhogonal matrix는  어떤 차원에 대해서도 squeezing이 없이 length를 보존하고 때문입니다. 진짜는 아니지만, identity한 matrix여야 한다는 느낌으로 이해하셔도 괜찮을 것 같습니다. 이렇게 Jacobian은 하나하나 입력에 대해서 바뀐 것들을 모아놓은 것이므로 이러한 jacobian이 identity일수록 모든 방향에 대한 변화량이 일정한 것입니다. 그래서 결과적으로 랜덤한 방향으로 변화를 줬을 때 Jy 즉 length가 특정 constant a값에 유지되도록 한다면 w에 대해서 랜덤한 방향의 변화량들이 굉장히 균일한 것으로 잘 펴진 공간이 만들어진다는 것입니다.

Consideration for Code Implementation

이를 위해서 실제 Implementation에서 고려할 것은 2가지가 있습니다.

1. Jacobian을 어떻게 얻을지?

2. constant a를 어떻게 결정할 것인지?

1 같은 경우에는 backpropogation과정에서 이미 w에 대한 gradient를 구하고 있기에 이를 통해서 쉽게 얻어질 수 있습니다. 하지만, 2의 constant a가 뭔지를 결정하는 것은 어렵습니다. 정적인 값이라고 보기에도 무리가 있기도 하고요. 그래서 저자들은 training과정에서 특정 step size를 두고 n번  배치를 학습하고 나서 나온 length Jy값들을 평균을 내서 averaging값으로 사용하는 동적인 세팅 방식을 사용했습니다. 실제로 이렇게 학습을 하게 되니 점점 잘 펴진 왜곡이 적은 space가 만들어지게 되었음을 다음과 같이 PPL metric을 통해서도 살펴볼 수 있습니다.  

실제로 Implementation에서 어떻게 하는지 자세한 내용은 추후 Code Review 게시글을 통해서 정리하겠습니다.

 

3.4. lazy regularization

lazy regularization은 부수적인 내용으로 하나의 trick으로 살펴보고 넘어가도 될 것 같습니다. 일반적으로 GAN을 학습 시 loss function과 regularization term을 같이 사용하고 동시에 optimization을 진행합니다. 저자들은 regularizatioin term은 이렇게 빈번하게 계산될 필요가 없음을 주장합니다. 따라서 computational cost도 줄이고 전반적인 memory 사용량도 줄이면서 학습에 해를 끼치지 않는 선에서 regularization은 더 lazy하게 일어나도 된다는 것입니다. 본 논문에서 저자들은 16번의 미니 배치 학습 시마다 regularization을 적용하도록 합니다. 그 결과는 다음과 같이 기존과 성능의 차이가 없음에도 상당한 cost를 줄일 수 있었습니다. 

 

 

4. Conclusion


이렇게 weight demodulation을 통해서 blob like artifact를 제거하고, progreesive growing에 대한 alternative architecture를 통해서 phase artifact를 제거하고 다양한 정량적 지표에서 비약적 개선을 이뤘습니다. 또한, StyleGAN에서 metric으로 사용되던 Perceptual Path Length를 Loss에 regularization으로 녹여서 이미지 질을 더욱더 많이 개선할 수 있었습니다.

References

  • https://www.youtube.com/watch?v=c-NJtV9Jvp0