본문 바로가기

Paper Review/Generative Model

[Paper Review] StyleGAN : A Style-Based Generator Architecture for Generative Adversarial Networks (1)

StyleGAN ( A Style-Based Generator Architecture for Generative Adversarial Networks ), CVPR 2019에 소개되었으며 추후 다양한 후속 연구 및 생성 모델 연구에 큰 기여를 한 논문입니다. ProGAN 혹은 PGGAN으로 불리는 논문의 저자들이 progressive growing의 아이디어와 함께 style transfer의 architecture로부터 영감을 받아 혁신적인 generator를 고안해냈습니다. 최근에 언급되는 stylegan은 대부분 stylegan2를 의미하고 활용되지만 전체적인 연구의 흐름을 따라가기 위해서 읽어보기를 추천하고 이에 앞서 AdaIN의 개념을 간단히 알고 ProGAN을 읽어봤다면 좋을 것 같습니다.

본 논문에서 얻어갈 수 있는 부분이 무척 많다고 생각하기에 꼼꼼히 리뷰를 작성해보도록 하겠습니다. 그럼 시작하겠습니다. :) ( 잘못되거나 부족한 부분이 있다면 언제든지 말씀해주세요! )

 

1. Abstract


본 논문에서는 기존의 GAN들과는 다르게 generator architecture에 초점을 맞춘 새로운 네트워크를 제시합니다. 즉, 기존의 gan에서 discriminator나 loss 등은 건드리지 않고 오로지 generator architecture만( 당시 GAN관련 연구들은 discriminstor의 개선에 초점을 맞추는 경우가 많았습니다.) 특히 style-transfer에서 주로 사용되던 AdaIN을 최초로 generator architecture에 도입했습니다. 저자들은 생성 모델이 만들어내는 영상이 우리가 아는 다양한 스타일들의 조합이라고 생각할 수 있기 때문에 이러한 구조를 고안했고, 효과적이지 않았나 싶습니다. 결국 생성되는 사람의 얼굴은 머리스타일, 성별, 피부색 등등 다양한 style들의 조합으로 이루어지기에 영상을 생성함에 있어서 style-transfer처럼 다양한 style을 반영해서 이러한 style들의 조합으로 새로운 fake image를 생성해낼 수 있는 것입니다.

또한 기존의 ProGAN의 아이디어를 가져와 progressive growing training을 함으로써 다른 스케일들에서 이미지의 스타일을 컨트롤할 수 있습니다. (coarse feature  : 성별, fine feature : 머리키락 등등) 뿐만 아니라 실제 구현체에서도 progan에서 사용했던 eqaul learning rate 등등 다양한 테크닉이 구현되어 있는 것을 확인할 수 있습니다. 이뿐 아니라, GAN에서의 Randomness와 noise에 대한 고찰과 이를 통한 stochastic variation에 대한 좋은 내용을 전달하고 있습니다.

더 나아가서 기존의 gan 구조는 필연적으로 entanglement할 수밖에 없음을 다시 확인해주며 disentanglement를 재정의하고 좋은 퀄리티의 이미지를 생성하고, high-level attribute들의 seperation을 통한 gan에 대한 controllability를 높이기 위해서 disentatnglement에 초점을 맞춥니다. 특히 고화질의 이미지 생성에서 빠른 발전이 이루어지면서, 생성되는 이미지를 컨트롤하는 데에 많은 관심이 쏟아졌고, 이를 위해서 latent space를 잘 만들어내는 것이 무척 중요했습니다. 그렇다면 좋은 latent space란 무엇이고, 이를 어떻게 이해하면 될지에 대한 답을 던지고 있다. 특히 기존의 연구들처럼 encoder를 추가적으로 필요하게 하거나 interpolation된 결과들을 보면서 정성적인 평가를 하는 것이 아닌 합리적인 정량적인 평가지표도 제시하고 있습니다.

마지막으로 high quality( high resolutoin & high variation )의 human faces 데이터셋 FFHQ를 제시합니다.

 

2. Style-based Generator


앞서도 말했듯 stylegan은 generator의 architecture에 초점을 맞춘 논문입니다. 그렇다면 이 network를 어떻게 구성했기에 어떻게 이렇게 powerful한 논문이 되었던 것일까요? stylegan은 generator architecture에서 주목할만한 부분은 다음과 같습니다. 하나하나씩 살펴보도록 하겠습니다.

  1. Mapping Network
  2. AdaIN
  3. Noise Injection ( stochastic variation )
  4. Constant Input
  5. Progressive Growing
  6. Style Mixing

 

앞서도 말했지만, stylegan이 generator architecture에 초점을 맞추고 있다는 것을 다시 한 번 인지하도록 합시다. 따라서 전체적인 StyleGAN의 학습 구조는 다음과 같습니다.

https://m.blog.naver.com/phj8498/221979205703

 

2.1. Mapping Network

Mapping Network의 경우 Mapping Network에 대해서는 disentanglement의 개념과 같이 보는 게 좋다고 생각해 여기서는 간단히 설명하고 아래 3.Disentatnglement에서 다시 이야기해보겠습니다. 뒤에서 언급하게 될 Constant Input과도 연관이 있지만, Style-based Generator의 구조를 보면 기존의 generator의 구조와는 다르게 latent code로부터 이미지가 생성되지 않고 constant input으로부터 이미지가 생성되면서 latent code로부터 스타일을 만들어 이러한 스타일을 이미지 생성과정에 주입시켜줌으로써 새로운 이미지를 생성해냅니다.( 여기까지의 내용은 어차피 천천히 설명될 내용이니 일단 읽으시고 3까지 읽으시고 다시 한번 가볍게 읽어보셔도 좋을 것 같습니다.)

이때 기존처럼 그냥 latent code로부터 style을 반영하는 것보다 먼저 mapping network를 통해서 latent code z를 intermediate latent code인 w로 바꿔주게 될 경우 entanglement한 latent space Z가 아니고 좀 더 data distribution에 가깝고 disentanglement한 latent space W로부터 생성되므로 더 좋은 이미지 샘플들을 얻을 수 있고 high-level attributes의 seperability또한 얻을 수 있습니다.

https://jonathan-hui.medium.com/gan-stylegan-stylegan2-479bdf256299

 

2.2. AdaIN

먼저 AdaIN에 대해서 간단히 설명하고 넘어가겠습니다. 일반적으로 딥러닝에서 네트워크를 통해 데이터로부터 feature를 학습합니다. AdaIN은 style-transfer를 위한 Normalizaton Method로 위의 풍경과 같은 입력 영상에서 딥러닝 인코더 네트워크로부터 추출된 high-level feature map가 아래의 화풍과 같은 style 이미지의 통계적 특성을 따르게하도록 한다면 입력 풍경 이미지에 예술적인 화풍과 같은 style이 입혀진 style-transfer된 이미지를 얻을 수 있습니다. (보다 자세한 내용은 추후 업로드될 Normalizatoin Family에 대한 게시글이나 AdaIN에 대한 좋은 글 혹은 영상 등을 참고하시기 바랍니다.)

https://jonathan-hui.medium.com/gan-stylegan-stylegan2-479bdf256299

이러한 방식을 Image Generation에 도입한 것입니다. 앞서도 설명했지만, 생성모델이 만들어내는 영상은 우리가 아는 다양한 스타일들의 조합으로 생각할 수 있습니다. 따라서 서로 다른 scale에서 다양한 style들을 받아 다양한 style을 반영해 새로운 fake image를 생성해낼 수 있는 것입니다. 

이때 논문에서 정의되는 style은 intermediaten latent vector w를 affine transformation을 거쳐 style 정보인 y ( scaling factor & bias factor )로 변환한 것입니다. 따라서 해당 y가 AdaIN의 ys, yb라는 scaling factor, bias factor로 들어가게 될 것입니다.

Learned affine transformations then specialize w to styles y = (ys, yb) that control adaptive instance normalization (AdaIN)
...
We choose to reuse the word “style” for y because similar network architectures are already used for feedforward style transfer [27], unsupervised image-toimage translation [28], and domain mixtures [23]

 

 

2.3. Constant Input

지금까지 살펴봤다면 대략적으로 어떻게 이러한 네트워크 구조가 style-transfer로부터 영감을 받아 이미지를 생성하는 네트워크인지 이해할 수 있습니다. 그런데 1. constant인데 learned라는건 무슨 모순된 말이고, 2. 굳이 random noise를 input으로 받는 기존의 generator architecture와는 다르게 synthesize network의 input으로 learned constant input을 받는 이유는 무엇일까요?

1. why name 'learned constant' ?

우선 learned constant input이라고 명명된 이유를 알아보겠습니다. learned로 보아 learanble한 값인데 constant라는데 모순된 것처럼 느껴집니다. 이는 synthesize network의 input으로 StyleGAN이 Train되는 과정에서는 learnable하게 학습되고, Test( 혹은 generation) 과정에서 새로운 이미지를 생성해낼 때는 고정되어 있는 값이기에 Constant Input이라고 명명되었습니다. 즉 generation과정에서 고정된 c만을 사용하기에 learned constant input이라고 합니다.

2. why use 'learned constant input' not 'random noise' ?

그렇다면 굳이 이러한 방식을 사용하는 이유는 무엇일까요? 즉, 기존과 다르게 이러한 learned constant input을 학습, 추론 과정에서 사용하는 이유는 무엇일까요? 그 이유는 기존처럼 random noise로부터 바로 네트워크를 통해서 이미지를 생성하는 것은 비교적으로 학습하기 어렵기 때문입니다. 그렇다면, learned constant input을 사용하면 더 학습이 비교적 쉽고 잘 된다는 걸 텐데 어떻게 이럴 수 있는 걸까요?

이때 과연 저 learned constant c가 학습됨에 따라서 무엇으로 수렴할지를 생각해보면 좋습니다. StyleGAN은 앞으로 style들을 받아서 이미지를 생성해낼 텐데 초기의 4x4의 영상 constant가 무엇이어야 더 잘 이미지를 생성해낼 수 있고 네트워크가 더 쉽게 잘 학습할 수 있을까 생각해본다면 데이터의 전체적인 identity혹은 특성 등을 배우는 것입니다. 예를 들어 논문처럼 사람의 얼굴 데이터셋을 학습시킨다고 생각해보면 constant가 배울 것은 전체적인 얼굴 형태와 같은 것을 배울 것입니다. 즉, 앞으로 style이 주입됨에 따라서 사람 얼굴 이미지를 만들기 위한 가장 좋은 베이스, 스타팅 포인트를 구축하는 것입니다. 만약 고양이 데이터셋이라면 그에 맞는 좋은 베이스 고양이의 전체적인 형태 등을 학습할 것이겠죠. 반면에 기존처럼 그냥 noise 예를 들어 왼쪽은 4x2픽셀은 그냥 흰색 오른쪽 4x2 픽셀은 그냥 검은색인 noise값이나 혹은 완전 random noise값을 사용한다면 이러한 노이즈를 바탕으로 그냥 이미지를 생성해내는 법을 네트워크가 배워야 하다 보니 네트워크의 부담이 커지는 것입니다. 따라서 learnable input을 넣어줌으로써 네트워크가 학습하면서 이미지를 생성함에 있어서 좋은 일종의 initalizatoin을 학습해 constant c를 구축하고 이를 generation과정에서 고정해서 사용하는 것입니다.

Left : Random Noise Input& Right : Learned Constant Inpur

 

2.4. Noise Injection ( stochastic variation )

2.4.1. Noise Injection

 

또한 본 논문에서는 Synthesis Network g에 명시적인 노이즈를 줬을 때 영상이 더 사실적으로 잘 만들어진다는 것을 통해 stochastic variation에 대한 내용을 무척 잘 설명하고 있습니다.

그런데 이미지를 생성함에 있어서 중요한 부분 중 하나는 randomness입니다. 이미지는 사실적이면서도 다채로움을 가져야 합니다. (Fidelity and Diversity) 물론 StyleGAN에서 다채로움은 latent vector에서부터 오기도 합니다. 여기서 말하고자 하는 바는 noise injection을 통해서 생성모델은 사람 얼굴에서 머리카락이나 수염, 주근깨, 모공과 같은 stochastic 한 특성을 가지는 부분들이 생성된 fake image의 identity나 인지적인 특성에 영향을 주지 않고 randomness를 가지고 바뀌게 함으로써 생성되는 이미지의 사실성과 다양성을 증대시키는데 도움이 된다는 것입니다. 실제 Architecture에서는 노이즈를 g의 각 convolution layer뒤에서 주입시켜주면서 이미지를 만들게 됩니다.

coursera gan

이때 전통적인 generator들과 다른 부분을 인지하는 것이 중요합니다. 일반적인 generator들에서는 이러한 stochastic variation을 네트워크가 학습하도록 했습니다. 즉, 수염과 같은 생성되는 이미지의 randomized aspects들의 randomness를 generator network가 구조적으로 이미지를 만드는 것을 학습함과 동시에 사실성과 다양성을 위한 randomness또한 학습해야 했던 것입니다. 저자들은 이럴 경우 network capacity또한 불필요하게 소모되고, 생성된 이미지에서 반복적인 패턴처럼 보이도록 randomness를 패턴처럼 잘못 학습할 수도 있기에 적절하지 못한 방법이라고 생각했습니다. 따라서 어차피 random한 부분이라면 굳이 네트워크가 학습할 필요 없이 외부에서 줌으로써 이러한 문제를 피하고자 했습니다. 

2.4.2. Seperation from global effects

그런데 어떻게 노이즈가 stochasticity를 global effects로부터 분리할 수 있었을까요? 즉,  noise가 사람 얼굴에서 머리카락이나 수염, 주근깨, 모공과 같은 stochastic한 특성을 가지는 부분들을 생성된 fake image의 identity나 인지적인 특성에 영향을 주지 않고 randomness를 가지고 이러한 세세한 부분을 바꿀 수 있는 걸까요?

앞서 살펴봤듯 synthesis network에서 style정보는 feature map에 AdaIN을 통해서 전체 featrue map에 scaling, biasing이 됩니다. 그렇기에 global effect를 가집니다. ( 이러한 내용에 대해 더 알아보고 싶다면 style-transfer문헌을 다시 보는 것도 좋은 방법입니다. StyleGAN 구조가 style-transfer에서 영감을 받았다는 것 또한 다시 한번 떠올려봅시다. ) 즉, 이러한 image의 style과 같은 global한 effect는 gram matrix나 channel-wise mean, stylegan에서의 style y = ( ys,yb)와 같은 spatially invariant statistics에 의해서 발생하고(spatially invariant -> 특정 style factor가 전체 feature map에 연산됩니다.), 주입되는 noise map과 같은 spatially varying features는 beard같은 stochastic한 특성을 가지는 specific instance에서의 stochastic variation이 되는 것입니다. ( spatially varying -> 각 픽셀마다 다르게 독립적으로 주입됩니다.) 따라서, 이러한 global effects로부터 분리되어 noise가 stochastic variation을 통제할 수 있는 것입니다. 

This observation is in line with style transfer literature, where it has been established that spatially invariant statistics (Gram matrix, channel-wise mean, variance, etc.) reliably encode the style of an image [20, 39] while spatially varying features encode a specific instance.

2.4.3. Results

하지만 위 내용은 사실 실증적으로 확인한 것에 대한 해석에 가깝습니다. 저자들은 아래와 같이 서로 다른 노이즈를 같은 identity를 가진 ( 같은 latent vector로부터 생성되는 ) 이미지에 바꿔서 넣어주면서 결과를 확인했습니다. 그 결과 다음과 같이 머리카락의 세세한 방향, 구부러짐 등등 local한 부분에 stochastic variaton을 가져옴을 확인할 수 있었습니다. 이를 100번 반복해서 noise에 의해 영향을 받는 부분들을 이미지들의 픽셀 간 표준편차를 통해서 (c)와 같이 머리카락, 실루엣, 배경 부분 등과 같은  stochastic한 특성을 가지는 local한 부분들이 노이즈의 영향을 받는 반면 identity나 pose와 같은 global한 부분들은 영향을 받지 않는다는 것을 보였습니다.

또한 저자들은 noise injection을 다양한 scale level에서 해보면서 결과를 확인해봤는데 모든 레벨에서 노이즈를 주입한 (a)가 가장 사실적인 이미지를 만들어냈습니다. 반면 노이즈를 전혀 주입하지 않은 (b)는 painty look과 같은 흐릿한 이미지를 만들어냈고, fine level에 noise를 주입한 (c)는 fine scale curling이나 fine한 background detail 등의 fine한 stochastic variation을 이미지에 주고, coarse level에 noise를 주입한 (d)는 large scale curling이나 background 같은 coarse한 local 부분에 영향을 주는 것을 확인할 수 있었습니다.

즉, (b)->(a)로 간다고 생각했을 때 머리의 더 큰 curl은 coarse level에서 noise를 준 (d)에서 보이고, 더 작은 curl은 fine level에서 noise를 준 (c)에서 보이는 것을 확인할 수 있습니다. 다시 한번 강조하지만, noise로 global한 effect ( Identity 등 )은 바뀌지 않고, local한 부분의 stochastic variation이 보장되는 것을 확인할 수 있습니다.

 

2.5. Progressive Growing

앞서도 말했듯 pggan의 저자들이기에 pggan의 좋은 테크닉들은 그대로 가져오면서 거기에 새로운 generator architecture를 합치는데, 2장에서 살펴보게 될 실제 구현체를 보면 pggan에서 제시되었던 다양한 테크닉들이 묻어있는 것을 확인할 수 있습니다. 따라서 지금까지 살펴봤던 구조들이 pggan에서의 progressive growing의 학습 구조에 합쳐지게 됩니다. 그렇다면 pggan의 메인 아이디어인 progressive growing은 뭘까요?

 

low resolution image( eg. 4x4 )부터 학습을 시작해서 progressive하게 layer를 추가해가면서 resolution을 올려가며 ( growing) 학습을 해나감으로써 gan이 처음에는 상대적으로 단순한 문제를 풀고 점진적으로 상대적으로 어려운 문제를 풀어나가기에 학습이 안정적이고, 고해상도 이미지를 잘 만들어내게 됩니다. ( 그 외에도 학습시간이 주는 등의 장점이 존재합니다.)

We observe that the progressive training has several benefits. Early on, the generation of smaller images is substantially more stable because there is less class information and fewer modes (Odena et al., 2017). By increasing the resolution little by little we are continuously asking a much simpler question compared to the end goal of discovering a mapping from latent vectors to e.g. 1024 images. … Another benefit is the reduced training time. With progressively growing GANs most of the iterations are done at lower resolutions, and comparable result quality is often obtained up to 2–6 times faster, depending on the final output resolution.

이러한 progressive growing이 stylegan의 generator architecture에 그대로 반영됩니다. 따라서 처음에는 4x4 resolution에서 학습을 하고 후에는 8x8 resolution에서 학습을 하고 점진적으로 resolution을 growing해가면서 학습을 진행합니다. pggan의 구조를 그대로 따르면서 2-1,2,3,4의 architecture를 generator에 반영한 것입니다. 물론 설명을 돕기 위한 상단의 이미지에는 4x4와 8x8이 모두 있지만, 만약 4x4 resolution에서 학습이라면 위 이미지에서 첫 번째 style block으로만 학습될 것이고, 8x8 resolution에서 학습이라면 두 번째 style block까지 학습이 될 것이고, 점진적으로 style block이 resolution에 맞게 붙으면서 학습될 것입니다. 결국 pggan의 progressive growing구조를 거의 따라간다고 생각하면 됩니다. ( 실제로 저자는 official implementation github에서 synthesis network를 'AdaIN + Progressive GAN' 이라고 표현하기도 했습니다. )

 

2.6. Style Mixing

지금까지의 살펴본 stylegan의 구조를 한 번 정리하고 가자. 우리는 학습 과정에서 learnable한 constant input을 학습하고, latent code z를 mapping해서 얻은 intermediate latent code w를 style로 변환해 progressive growing한 학습과정에 주입함으로써 새로운 이미지를 생성합니다. 

이때 기본적으로 하나의 z를 w로 mapping한 후 style로 사용하고 있는데, resolution에 따라서 style은 coarse한 정보를 control할 수도 있고, middle혹은 fine한 정보를 control할 수도 있습니다. 따라서 서로 다른 style들의 조합으로 이미지가 만들어지는 것인데, 이 때 하나의 w만으로 학습하다보면 붙어 있는 레벨의 style들 간의 correlation이 생길 수 있습니다. 즉 64x64 level에서 feature가 얼굴의 모양과 같은 attribute를 받고, 128x128에서 얼굴의 포즈와 같은 attribute를 받는데  이 둘가의 상관관계가 생기면 두 특징이 독립적이지 못하고, localization을 잘 못하게 되어 모양이 바뀌면서 pose가 바뀔 수 있는 것입니다.

이러한 상황을 줄이기 위해서 Mixing Regularization을 진행합니다. Mixing Regularization은 서로 다른 이미지를 생성해내는 intermediate latent vector w1과 w2를 특정 level ( crossover point)을 기준으로 이전까지는 w1의 style정보를 이후부터는 w2의 style정보를 넣어 이미지를 생성하도록 학습시키는 것입니다. 즉 현재 예시에서는 상대적으로 coarse한 정보는 w1의 style이 상대적으로 fine한 정보는 w2의 style이 반영되는 것입니다. 이렇게 함으로써 인접한 두 level의 style간의 correlation이 생기는 것을 막도록 하는 일종의 Regularization을 해줌으로써 localization이 개선되고 실제로 FID에서도 성능적 향상을 보였습니다. ( 이러한 학습이 가능한 것 또한, Stylegan이 intermediate latent code w를 style로 변환해 progressive growing한 학습과정에 주입함으로써 새로운 이미지를 생성하는 architecture를 가졌기에 가능한 것임을 상기하면 좋을 것 같습니다. )

용어적인 정리를 하고 가자면 이렇게 일종의 regularization기법처럼 mixing을 학습과정에서 사용하는 것을 mixing regularizatoin이라고 하고, 동일한 mixing을 test과정에서 사용함으로써 서로 다른 두 이미지의 style을 섞을 수 있는 것을 style mixing이라고 합니다. 학습과정에서 mixing을 하는 것인지  test 과정에서 mixing을 하는 것인지에 따라서 용어가 구분됨을 확인해주세요.

어쨌든 이러한 기법을 통해 학습하고 이를 다양한 level에서 style mixing을 한 결과를 확인해봄으로써 style들의 subset이 이미지의 high-level attribute를 컨트롤한다는 것을 다시 한번 확인할 수 있었습니다.  

Method Results 

따라서 앞서 살펴본 각 방법들을 추가해가면서 성능적 개선을 FID를 통해 살펴본 결과, ( pggan저자들이고 일부 pggan을 따라가는 부분이 많기에 baseline으로 pggan을 사용합니다. ) C에서 살펴볼 수 있듯이  mapping network(2.1)와 AdaIN(2.2)을 통해 style정보를 조합하는 구조를 사용한 결과 유의미한 성능 향상이 있었고, D에서 살펴볼 수 있듯이 기존의 random noise input이 아닌 Learned Constant input(2.3)을 사용하게 된 결과 조금 더 성능 향상이 있었습니다. 또한, E를 통해 Noise Injection(2.4)F를 통해 Mixing Regularization(2.6)의 영향 또한 확인할 수 있었습니다.

 

 

 

3. Disentanglement


조금 늦었지만, 생성 모델에서 중요한 문제인 Entanglement와 지향점인 Disentanglement에 대해서 살펴보겠습니다. 다양한 정의가 존재하지만 번역을 해보자면 '꼬여있는 것'과 '풀려있는 것'입니다. 주로 생성모델에서 말하는 Entangle과 Disentangle은 다양한 특징들이 서로 꼬여있는(얽혀있는 ) 것과 풀려있는 것을 말합니다.

이미지 생성에 있어서 특징이 얽혀있다는 것은 무슨 말일 까요? 예를 들어 어떤 남성의 이미지를 만들기 위해서는 머리카락, 눈, 코, 수염 등등 다양한 특징을 학습해야 한다. 이때 주로 데이터로부터 기인되어 발생하는 Entanglement는 학습에 사용된 데이터에서 특징들이 완전히 독립적이지 않고 서로 연결, 얽혀 있어 학습된 모델에서 조차 이러한 특징들이 꼬여있는 상태를 말합니다. 즉, 어떤 남성 이미지를 생성한다고 할 때 주로 남성에 대한 데이터는 짧은 머리를 가지고 수염이 있는 데이터가 많기에, 머리가 짧고 수염이 있는 이미지가 생성되는 것입니다. 다시 말해, 성별이라는 특징과 수염, 머리카락의 길이 등의 특징이 얽혀있는 상황인 것입니다. 다르게 표현하자면 feature간의 correlation을 가지고 있는 것입니다.

예시를 통해 좀 더 구체화해보겠습니다. 이러한 여성의 사진이 있을 때, 해당 여성이 수염을 기른 모습의 이미지를 생성해내고 싶은 상황입니다. 만약 feature들이 얽혀있지 않은 상황(Disentanglement)이라면 상단의 이미지처럼 여성에서 수염만 추가된 ( 수염이라는 특징만 변화한 ) 이미지가 나와야 합니다. 하지만 얽혀있다면(Entanglement) 아래와 같이 수염을 추가했지만 남성의 사진을 만들게 되는 것입니다. 즉, 수염이라는 특징이 성별, 머리카락 등의 특징과 얽혀있기 때문입니다.

 

본 논문의 저자들은 기존의 GAN의 구조는 필연적으로 entanglement할 수밖에 없음을 다시 확인합니다. 기존의 GAN은 학습 데이터의 분포를 따르도록 학습이 됩니다. 따라서, 학습 데이터에서 보기 힘든 데이터들을 잘 생성해내지 못하고, 그러다 보니  전형적인 데이터셋 및 입력 잠재 분포로부터 featrue가 완전히 disentangled하게 학습할 수 없는 것입니다.

이를 보다 잘 설명하기 위해서 저자들은 학습 데이터 공간과 latent space에서 2개의 feature에 대한 특징 분포를 illustration 합니다.(2 factores of variation ) 여기서 (a)는 trainig set의 feature 분포를 시각화한 것이고, 그 두 개의 factor가(축이) 머리카락의 길이와 성별 ( 논문에서는 masculinity:남성성 - continuity를 고려할 때 논문에서 언급한 대로 남성성이 더 적절해 보이긴 합니다. )이라고 가정하겠습니다. 이때 (a)의 시각화된 모습에서 좌상단 부분은 비어있습니다. 그 이유는 실제 데이터셋에서는 머리카락이 긴 남성은 존재하지 않기 때문입니다. 즉 학습 데이터셋에서 확인하기 어려운 데이터의 밀도가 적은 부분인 것입니다.

이러한 학습 데이터 분포를 학습해서 Z latent space에서의 2 factor variation분포를 시각화한다면 다음과 같이 원형의 모습을 보일 것입니다. 그 이유는 학습에 사용하는 latent vector z가 noraml distribution에서 샘플링되기 때문입니다. 학습 데이터 분포를, density를 이렇게 동그란 분포에 맞추려고 하다 보니 그림과 같이 왜곡이 일어나게 됩니다. 즉, 특정한 분포를 가진 Z-space에서의 각 factor들의 조합( 머리 긴 여자 - 머리가 긴 특징과 여자라는 성별 특징의 조합)의 확률은 학습 데이터에서 해당하는 density와 일치하도록 학습하기 때문에, 위와 같이 왜곡이 발생하고 각각의 factor(그림에서는 2 factor)가 완전히 분리되지 않는 entangled 상태가 발생하는 것입니다. 

However, the sampling probability of each combination of factors in Z needs to match the corresponding density in the training data. As illustrated, this precludes the factors from being fully disentangled with typical datasets and input latent distributions.2

 

따라서 저자들은 기존의 방식으로는 disentanglement를 만들어낼 수 없다고 생각했습니다. 그렇다면 disentangled한 space로 만들기 위해서 어떻게 해야 할지를 언급하기에 앞서 이를 위해서는 먼저 disentanglement를 명확히 재정의할 필요가 있다고 저자들은 생각했습니다.

저자들이 Disentanglement의 목적성을 고려해 정의한 바는 'latent space가 하나의 variation factor를 컨트롤할 수 있는 linear subspace들로 구성된 상태'입니다.

There are various definitions for disentanglement [54, 50, 2, 7, 19], but a common goal is a latent space that consists of linear subspaces, each of which controls one factor of variation.

즉, latent space상에서 하나의 variation factor가 linear하게 움직이고 이 때 다른 factor들은 컨트롤되면 안된다는 것입니다. 이러한 정의에 기반해서 위의 이미지를 다시 본다면 위의 이미지에서 (a)의 학습 데이터셋 처럼 2개의 factor가 각각 linear하게 움직이고 있는 상황이 disentangle한 상황이고. 왜곡된 (b)와 같은 latent space는 각각의 factor가 곡선으로 왜곡되어서 움직이는 것을 확인할 수 있고, 이는 entanglement한 상황이란 것입니다.

이에 저자들은 기존의 Z-space를 non-linear mapping을 학습하는 Mapping Network를 통해서 기존의 학습 데이터 분포의 density를 더 잘 반영하고 variation factor가 더 linear하게 움직일 수 있는 W-space로 mapping을 해주게 됩니다. 즉, 이미지를 더 잘 생성하기 위해서 학습을 하면서 이러한 z-space를 disentanglement한 latent space로 mapping을 해주는 방식을 mapping network가 학습하도록 하는 것입니다. 이렇게 함으로써 generator는 disentangled representation에 기반해 더 사실적인 이미지를 잘 만들도록 학습이 되는 것입니다. 물론 앞선 그림들과 예시들에서 남성성과 머리의 길이 등의 특성은 예시를 든 것이고, 실제로 unsupervised learning이기에 factor of variation이 어떤 것인지는 사전에 알 수 없습니다.

This mapping can be adapted to “unwarp” W so that the factors of variation become more linear.

 

*여기까지 와서 앞서 살펴봤던 mapping network 부분을 다시 한번 확인해보시기를 추천드립니다. 그렇다면 우리가 추가로 생각해볼 수 있는 점은 학습 데이터 분포가 훨씬 더 복잡해서 더 복잡한 분포를 representation해야하는 상황이라면 우리는 mapping network를 더 깊게 쌓아서 이러한 문제를 해결해 볼 수도 있겠죠?

 

4. Disentanglement Measure


그렇다면, 이렇게 실제 생성 모델을 학습함에 있어서 disentanglement가 중요하다면 이를 measure할 수 있는 방법이 있어야 하지 않을까요? 그래야 모델이 잘 학습되고 있는지 혹은 잘 학습되었는지 등을 disentanglement 관점에서 판단할 수 있을 테니까요.

기존의 연구들은 disentanglement를 Interpolation을 해보면서 정성적으로 평가하거나, 정량적으로 평가하기 위해서 gan inversion을 통해 measure하고자 했는데 이는 encoder를 추가로 필요로 하기에 저자들은 gan의 학습 지표 및 metric으로써의 목적성에 부합하지 않는다고 생각했습니다. 

따라서 저자들은 이러한 기존의 방식들에서 벗어나 새로운 정량적 평가방식을 2가지 제시합니다. 이 방식은 인코더도 필요 없고, 어떤 factor가 머리의 길이인지, 남성성인지 등도 알 필요 없습니다. (정성적 평가의 한계점)

4.1. Disentanglement Revisited

4.1.1. Linear Subspace

잠깐 두 정량적 평가 지표를 알아보기에 앞서 Disentanglement에 대해서 정의했던 바를 다시 한번 살펴보면 linear subspace란 말이 나옵니다. 이게 무슨 의미인지를 명확히 짚고 넘어갈 필요가 있습니다. 저희가 만들고자 하는 latent space는 각 linear subspace들로 구성되는데 이 linear subspace들은 각각 하나의 factor of variation을 컨트롤해야 한다는 것입니다. 즉, latent space에서 linear하게 움직인다면 실제 생성된 데이터셋의 분포에서도 linear하게 움직여야한다는 것입니다. 이 때 생성된 데이터의 분포가 학습을 잘해서 train data의 분포를 잘 모방했다고 가정하고, 학습 데이터의 분포를 통해서 이를 확인해보겠습니다.

There are various definitions for disentanglement [54, 50, 2, 7, 19], but a common goal is a latent space that consists of linear subspaces, each of which controls one factor of variation.

즉, 우리가 구성할 latent space의 linear subspace란, latent space (c)에서 linear하게 움직이면 생성된 데이터의 분포에서도 linear하게 움직이는 것입니다. 하지만 여기서 다시 앞서 (b)를 생각해보면 Z-space에서 linear하게 움직이는 것은 생성된 데이터 분포에서는 곡선으로 움직일 수밖에 없는 것이죠. 

 

4.1.2. Interpolation & Disentanglement

여기서 우리는 latent space에서의 interpolation이 가지는 의미를 disentanglement와 연결 지어서 생각할 수 있습니다. 즉, disentanglement의 정도가 약하다면 다시 말해 더 꼬여있는 상황이라면 generated image distribution상에서 interpolation path가 무척 왜곡되어 있고 곡선적인 반면에 disentanglement한 latent space라면 이러한 interpolation path가 보다 선형적이어야 한다는 것입니다.

각 latent space에서의 interpolation된 point들을 generator에 넣어서 face image를 생성한 후 생성된 이미지 분포에서 해당 face image들을 찍어가며 interpolation path를 비교해본 결과

그러다 보니 위의 그림들처럼 latent space인 Z-space에서 조금 움직인다고 생각한 transition이 실제 generated image distribution에서 확인해본다면 엄청 많이 왜곡되어서 길게 움직이게 되는 반면 disentangled한 latent space W-space에서의 transition은 실제 생성되는 이미지 분포에서도 선형적으로 유사한 길이만큼 움직이게 됩니다. 

 

4.2. Perceptual Path Length

그렇다면 이러한 disentanglement를 측정하기 위한 첫 번째 아이디어를 확인해봅시다. 이를 위해서 간단히 perceptual loss를 다시 상기시켜야 합니다.

4.2.1. perceptual loss revisited

perceptual loss는 두 영상이 얼마나 다른가를 measure할 때 사용하는 방법으로 용어 그대로 인지적으로 비슷하다는 거를 measure하기 위한 metric입니다. 이때 인지적으로 본다는 것을 학습된 모델이 해당 영상에 대해서 추출한 feature map들을 통해 정의합니다. 따라서 인지적으로 비슷하다는 것은 intermediate feature map들이 유사하다고 가정한 것이죠. 간단히 말하자면 딥러닝이 해석한 게 비슷하다면 유사한 이미지라고 생각한다는 것입니다. (더 자세히 살펴보고 싶다면 photo-realistic single image super-resolution using a generative adversarial network을 참고하세요. )

4.2.2. perceptual loss & disentanglement

이러한 perceptual loss를 disentanglement를 measure하는데 어떻게 활용할까요? 앞서 latent space에서의 interpolation과 disentanglement의 관계를 살펴봤습니다. 그러면 위의 상황에서 즉, latent space에서의 특정 벡터를 interpolation하면서 interpolation path위의 latent vector들을 generator에 넣어 이미지들을 생성해 생성된 이미지 분포상에서의 interpolation path를 그려봅시다. 만약 latent space가 disentanglement하다면 interpolation된 이미지들은 전반적으로 비슷한 느낌을 보이면서 변화해갈 것입니다. 즉 각 이미지들의 전체적인 feature가 유사할 것입니다.

예시 이미지처럼 두 이미지 사이의 interpolation path상에서 어린 아기와 같은 이미지가 생성되는 것을 통해 확인할 수 있습니다. latent space가 entangled하기에 latent space에서의 interpolation path상의 점들을 샘플링해서 generator에 넣어서 이미지를 생성해보면 다음과 같이 생성된 이미지 분포상에서 왜곡된 곡선을 그리면서 예상치 못한 이미지들이 생성되게 되는 반면에 disentangled하다면 이미지의 y-space처럼 비교적 linear한 path를 가지고 이에 따라 전체적인 feature가 유사하게 interpolation된 모습을 볼 수 있습니다.

4.2.3. Perceptual Path Length

즉, 우리는 latent space에서 interpolation을 할 때 이미지가 얼마나 극적으로 변하는지를 measure함으로써 disentanglement를 정량적으로 measure할 수 있는 것입니다. 따라서 이렇게 interpolation된 결과들이 인지적으로 주변 point들과 유사하면서 찬찬히 변해가는지를 보고 우리는 disentanglement를 판단하는 것입니다.

이러한 Perceptual Path Length라는 metric을 명확히 정의하기 위해서 저자들은 앞서 말한 것처럼 interpolation path를 그리고 그 위에 N개의 interpolation point를 샘플링합니다. 그리고 각 point 하나하나에서 interpolation path방향으로 아주 조금 움직이고 이렇게 움직인 후의 point와 움직이기 이전의 point 각각의 latent vector로 생성한 이미지 둘 간의 perceptual loss를 측정하고 이를 perceptual path length로 정의합니다.

즉 이러한 length가 크다면 두 이미지 간의 특징 차이가 크다는 것이므로 별로 유사하지 않다는 것입니다. 이러한 large PPL은 주로 entanglement한 latent space를 통해 이미지를 생성할 때 주로 발생합니다.

실제로 StyleGAN에서 이러한 PPL의 정의를 수식을 통해 살펴보고, 각 latent space에 대해서 PPL을 계산한 결과를 비교해보겠습니다.

 

$$ l_{\mathcal{Z}}=\mathbb{E}\left[\frac { 1 } { \epsilon ^ { 2 } } d \left(G\left(\operatorname{slerp}\left(\mathbf{z}_{1}, \mathbf{z}_{2} ; t\right)\right)\right.\right.\\
\left.\left.G\left(\operatorname{slerp}\left(\mathbf{z}_{1}, \mathbf{z}_{2} ; t+\epsilon\right)\right)\right)\right] $$

latent space Z에서의 PPL
( d는 perceptual distance )

$$ l_{\mathcal{W}}=\mathbb{E}\left[\frac { 1 } { \epsilon ^ { 2 } } d \left(g\left(\operatorname{lerp}\left(f\left(\mathbf{z}_{1}\right), f\left(\mathbf{z}_{2}\right) ; t\right)\right)\right.\right.\\
\left.\left.g\left(\operatorname{lerp}\left(f\left(\mathbf{z}_{1}\right), f\left(\mathbf{z}_{2}\right) ; t+\epsilon\right)\right)\right)\right]
 $$

Intermediate latent space W에서의 PPL

이렇게 latent space의 2개의 latent vector를 뽑은 후 latent space상에서 두 vector의 interpolation path를 만들고, path상의 점들을 샘플링해서 조금 움직인 후 움직이기 전과 후의 vector를 generator에 태워 각각의 interpolation point로부터 image들을 각각 생성하고 두 이미지 간의 perceptual distance를 구합니다. 그리고 샘플링된 모든 점들에 대해서 이러한 작업을 거친 후 평균을 내면 Perceptual path Length가 되는 것입니다. 

이때 latent space Z의 경우 그냥 latent vector를 사용하면 되기에 z1, z2이지만, latent space W의 경우 latent vector z를 mapping network인 f()를 통해서 w로 mapping 해줘야 하기에 f(z1), f(z2)입니다. 또한, Z-space는 Normal Distribution에서 샘플링된 것으로 noramlized input latent space입니다. 따라서 spherical interpolation(slerp)을 사용하는 반면, W-space의 경우 이러한 z를 non-linear mapping한 것이기에 normalized input latent space가 아닙니다. 따라서 그냥 linear interpolation(lerp)을 해주게 됩니다.  

* Lerp ( Linear Interpolation ) VS Slerp ( Spherical Interpolation )

그렇다면 Lerp와 Slerp는 뭐가 다른지를 간단히 리뷰하면서 왜 Normalized latent space에서 Slerp를 쓰는지를 확인해봅시다.

Linear Interpolation은 매우 간단히 우리가 고교 학습과정에서 배운 내용입니다. 두 지점을 직선으로 연결해서 두 점 사이의 중간 위치들을 파악하는 방법으로 다시 말해 두 점이 놓여있는 직선 상의 모든 점은 두 점에 대한 벡터들의 선형 보간으로 표현될 수 있다는 것입니다. 

$$ q(t)=(1-t) q_{1}+t q_{2} \\
(0<=t<=1)
$$

그렇다면 Spherical Interpolation 즉, 구형 선형 보간은 무엇이 다른 것일까요? 지구를 생각해보면 한국에서 런던까지의 거리를 직선으로 이어 잰 값을 d라고 할 때  d만큼 이동하면 런던에 도착할 수 있을까요? 아닙니다. 왜냐하면 우리가 존재하는 지구는 평면이 아니라 구면이기 때문입니다. 이렇게 곡면 위에 놓여 있는 두 점 사이의 보간을 함에 있어서 linear interpolation은 적절하지 못하기에 이와 같이 구체 평면 위에 놓여있다고 가정한 후 이 구체 평면 상에서 두 위치를 보간하는 방법이 구형 선형 보간법입니다. 실제로 사용할 때는 정규화를 해준다면 우리는 두 점 사이의 가장 짧은 호를 따라가는 보간을 얻을 수 있습니다.

$$ q(t)=\frac{(1-t) q_{1}+t q_{2}}{\left\|(1-t) q_{1}+t q_{2}\right\|} \\
(0<=t<=1) $$

따라서 Normalized latent space이면서 왜곡이 심한 z-space에서는 Slerp를 쓰는 것입니다.

4.2.4. Results

저자들은 이렇게 Perceptual Path Length를 통해 disentanglement를 measure함으로써 앞서 제시했던 style-based generator의 architecture와 mapping network등이 disentanglement관점에서 좋은 역할을 하고 있다는 앞선 주장들을 실증적으로 보여줍니다.

위 tabel에서 볼 수 있듯이 style based generator를 사용하고 W-space를 이용하며 noise input까지 더해줬다면 이전과는 비교도 안될 만큼 작은 path legnth를 가진다는 거 강조하면서 논문의 타당성을 다시 한번 강조합니다. 물론 Mixing Regularization을 적용했을 때는 성능이 하락했지만 이를 통해 Fidelity뿐 아닌 Diversity 또한 얻을 수 있기에 아주 적은 PPL관점에서 손해를 감수하고도 다른 관점에서의 성능 향상이 있기에 적절하다는 주장 또한 하고 있습니다. 

Method에 적혀져 있는 숫자는 mapping network의 depth입니다.

또한 이 시점에서 mapping network의 depth를 통해 disentanglement와의 관련성을 다시 한번 짚고 넘어가는데요. 위 결과에서 볼 수 있듯이 mapping network를 깊게 쌓음으로써, disentanglement와 FID관점에서 이득을 볼 수 있었고 이는 현재의 데이터를 표현하기에 적절한 depth를 쌓음으로써 보편적이게 깊게 네트워크를 쌓음으로써 표현력이 높아져 disentanglement와 fidelity가 개선될 수 있다는 것을 주장합니다. 

4.3. Linear Seperability

Linear Seperability는 앞서 정의했던 disentanglement의 정의를 다시 떠올려보면 좋습니다. 각 factor of variation이 linear subspace로 선형적 분리되는 정도를 measure함으로써 disentanglement를 measure하기 위한 방법입니다. 따라서 Linear Seperability는 결국 latent space의 점들이 ( generated image가 될 수 있는 ) 하나의 factor of variation을 binary attribute로 분류하는 linear hyperplane에 의해서 얼마나 잘 분리될 수 있는 지를 measure합니다.

이를 위해서 저자들은 전통적인 머신러닝에서 가장 좋은 선형 분류기로 알려진 SVM( Soft Vector Machine )을 통해 CELEBA-HQ에 대해서 40개의 binary attribute를 분류할 수 있도록 학습을 시키고, StyleGAN의 학습과정에서 이러한 binary attribute를 분류할 수 있는 discriminator와 같은 네트워크 구조를 가진 Auxiliary Classifier를 두고 학습합니다. 

$$ \exp \left(\sum_{i} \mathrm{H}\left(Y_{i} \mid X_{i}\right)\right) $$

X는 SVM에 의해서 예측된 클래스들 / Y는 사전 학습된 auxiliary classifier에 의해서 예측된 클래스들

그 후 각 attribute에 대해서 conditional Entropy를 계산함으로써 SVM에서 학습된 hyperplane에 비해서 얼마나 추가적인 정보 이득이 있었는지를 measure함으로써, StyleGAN의 Linear Seperability가 좋은지를 확인합니다. 즉, 이러한 conditional entropy 값이 작다면, 두 방법의 linear hyerplane이 유사하게 데이터 포인트들을 분류하고 있다는 말이므로 StyleGAN이 이러한 binary attribute를 잘 구분할 수 있도록 충분히 잘 학습되었다는 것이기에 linear seperability가 높아 disentanglement한 정도가 높다는 것을 의미합니다.

또한 이러한 Linear Seperability의 관점에서 본 논문에서 제안한 방법들이 disentanglement에서 유의미한 결과를 가져옴을 4.2.4에서 다시 한번 확인할 수 있습니다. 

5. Acknowledgements


5.1. Truncation Trick

앞서도 살펴봤지만, 보편적인 생성 모델의 문제점 중 하나는 학습 데이터 분포에서 밀도가 낮은 부분은 잘 생성해내기 어렵다는 것입니다.( 위에서 살펴봤던 장발의 남자 ) 생성 모델은 오히려 이러한 low density한 부분들에서 나쁜 품질의 이미지를 생성하게 됩니다. 이에 저자들은 이미지를 generate하는 단계에서 할 수 있는 일종의 trick을 제안합니다. 저자들은 latent vector들로부터 truncation을 한다는 의미로 truncation trick을 제안하는데 이렇게 함으로써 아주 약간의 variation을 잃지만 이미지 퀄리티의 향상을 가져옵니다. 즉, 저러한 low density 부분에서의 이미지를 정확히 만들어낼 수는 없지만 기존의 해당 부분들에서 나쁜 품질의 이미지를 생성하는 것만은 막자는 의도입니다.

그렇다면 truncation trick은 어떻게 하는 것일까요? Intermediate latent space W에서 $$ \overline{\mathbf{w}}=\mathbb{E}_{\mathbf{z} \sim P(\mathbf{z})}[f(\mathbf{z})] $$함으로써 다음과 같이 W space의 center of mass 즉 무게중심과 같은 곳을 계산합니다. 이 점은 우리의 데이터셋이 만약 human face dataset이라면 평균적인 얼굴이 되겠지요. 이때 W space에서 그냥 한 vector를 sampling한 후 특정 방향으로 움직여나갈 텐데 만약 그 방향이 밀도가 낮은 부분이거나 한다면 잘 생성되지 않을 것입니다. truncation trick은 W space의 무게중심 방향으로 w latent vector를 truncate함으로써 무게중심에 가까운 방향으로 가게 함으로써 더 좋은 퀄리티의 이미지를 만들어낼 수 있도록 합니다.

$$ \mathbf{w}^{\prime}=\overline{\mathbf{w}}+\psi(\mathbf{w}-\overline{\mathbf{w}}), \text { where } \psi<1 $$

따라서 다음과 같은 수식에 따르면 ψ( psi )의 값에 따라서 얼만큼 무게중심에 가까워지도록 강제하는지를 조정할 수 있습니다. 이를 샘플들을 생성해보면서 시각화해본다면 다음과 같습니다. psi값이 0이라면 모든 무게중심을 의미하므로 어떤 상황에서건 같은 이미지가 나올 것입니다. 반면 1이라면 w벡터에 해당하는 이미지가 생성될 것이고, 반대로 -1이라면 다음과 같이 그에 정 반대방향으로의 이미지가 생성될 것입니다. 

이는 이후에도 꽤나 많이 사용되는 trick이기에 기억해두는 것을 추천드립니다.

 

5.2. The FFHQ dataset

마지막으로 저자들은 기존의 범용적으로 사용되던 Human face dataset인 CelebA의 문제점을 지적하면서 새로운 데이터셋을 구축해 제시했습니다. 기존의 CelebA의 경우 전부 Celeb들의 이미지로 구성되어 있기에 variation측면에서 부족한 면이 존재했고 특히 나이대나 인종, 이미지 배경, 악세서리 등에 있어서 더 많은 다양성을 줌으로써 데이터셋 퀄리티를 높이기 위해서 고화질의 이미지들을 크롤링한 후에 AMT를 통해서 한 번 더 걸러냄으로써 고화질의 human face datast을 구축했습니다. ( Celeb들로만 이루어지지 않았다는 점에서도 데이터 퀄리티 향상- variation 등 )

참고로 기존의 데이터셋은 jpeg와 같은 압축 방식으로 이미지를 제공했는데 이러한 부분이 실제 성능적인 측면에서의 부정적인 영향을 준다고 생각해 압축하는 format이 아닌 png방식으로 이미지를 제공함으로써 이미지의 고화질과 다양성 등의 측면에서 high-quality의 데이터셋을 제공했습니다. 

 

 

 

 

Reference

https://m.blog.naver.com/phj8498/221979205703

https://blog.promedius.ai/stylegan_2/

https://www.coursera.org/specializations/generative-adversarial-networks-gans

https://github.com/andrewjong/Deep-Learning-Paper-Surveys/issues/17

https://www.sciencedirect.com/science/article/abs/pii/S1077314221001685

https://www.researchgate.net/figure/Illustration-of-the-perceptual-loss-used-in-our-pipeline-The-image-I-t-is-the-crop-t_fig4_334279687

https://machinelearningmastery.com/how-to-interpolate-and-perform-vector-arithmetic-with-faces-using-a-generative-adversarial-network/

https://www.researchgate.net/figure/Illustration-of-the-disentanglement-in-latent-spaces-of-GANs-a-and-b-show-the_fig2_359400181

https://velog.io/@uchang903/Unity-%EC%84%A0%ED%98%95-%EB%B3%B4%EA%B0%84%EA%B3%BC-%EA%B5%AC%EB%A9%B4-%EC%84%A0%ED%98%95-%EB%B3%B4%EA%B0%84Lerp%EC%99%80-Slerp

A Style-Based Generator Architecture for Generative Adversarial Networks

https://jonathan-hui.medium.com/gan-stylegan-stylegan2-479bdf256299