/StyleGAN_Project

Repo for StyleGAN_Project (2022 KUBIG Winter Study_CV 분반)

Primary LanguageJupyter Notebook

StyleGAN_Project

StyleGAN을 활용해 사용자가 원하는 사진에 대한 latent vector를 찾고, Interpolation 분석.

나아가 StyleCLIP을 통해 사용자가 입력한 텍스트를 반영한 이미지를 만들어 내도록 latent vector 업데이트.

STEP1: 특정 사진에 대한 latent vector 찾기 (Image2StyleGAN)

구현 코드: link
참고 논문: Image2StyleGAN: How to Embed Images Into the StyleGAN Latent Space?
A Style-Based Generator Architecture for Generative Adversarial Networks
참고 코드: link
방법: Pretrained StyleGAN, VGG16을 이용해 latent vector가 만들어내는 이미지와 원본 이미지와의 loss를 계산 -> latent vector 업데이트

Image2StyleGAN이미지를 representation하는 latent vectorPretrained StyleGAN을 사용해 찾는 것을 말한다.
이러한 과정을 통해 특정 이미지에 대한 latent vector를 찾게되면, 이를 조작해 이미지의 Style을 바꾸거나, 다른 이미지로 전환할 수 있음.

구글에서 많은 연예인들의 사진들을 찾을 수 있었고, 결과적으로 다양한 사진에 대한 latent vector을 얻을 수 있었음.
Latent vector들 중 상당수는 입력 이미지를 잘 represent했지만, 일부는 그렇지 못했음.

Example) 왼쪽은 구글에서 구한 원본 이미지고, 오른쪽은 Image2StyleGAN 방법론을 통해 찾은 latent vector를 통해 만들어진 이미지

<이미지를 잘 represent하는 Latent vector 찾은 경우>



<이미지를 잘 represent하지 못하는 Latent vector 찾은 경우>


많은 수의 이미지를 통해 여러번 실험을 진행함,
결과적으로 representation이 좋은 latent vector를 가지고 있는 원본 이미지는 다음과 같은 특징들 을 가지고 있다는 것을 확인함.

  • 보통 서양인임. (대체로 한국인 이미지보다 더 좋은 latent vector를 가졌음.)
  • input으로 들어가는 이미지에 noise가 거의 없음, 화질 좋음.
  • 사진에 얼굴이 차지하는 비율이 거의 80퍼~90퍼(얼굴외에 손이나 기타 다른 부위 혹은 배경들이 거의 보이지 않음)
  • 옆모습이나 측면보다 정면샷으로 찍은 얼굴이 더 잘 나옴.

STEP2: Latent vector를 변화시키면서 이미지의 변화 양상 관찰 (Latent Interpolation)

구현 코드: link
참고 코드: link
방법: STEP1에서 두 이미지에 각각 대응하는 latent vector를 찾음 -> 계수합이 1인 linear combination으로 표현 -> 계수값에 변화를 조금씩 주면서, 그에 따라 변하는 이미지 변화 확인

StyleGAN은 Mapper Network 등을 사용함으로써 모델 자체의 latent vector(W)가 이미지의 특징들을 disentangle하게 담아내도록 학습함.
이 말은 즉, latent space 상에서 비슷한 거리에 있는 latent vector들은 서로 비슷한 이미지의 특징을 담아내고, 멀리있는 latent vector들은 서로 구별되는 특징을 가질 수 있음.
Latent Interpolation은 이러한 latent space의 특징을 이용한 것임.

Example) STEP1에서 이미지를 잘 represent하는 latent vector를 통해 Latent Interpolation을 진행함.

<로제의 latent vector와 제니의 latent vector를 사용해 진행한 결과>
image


<오바마 대통령의 latent vector와 조커의 latent vector를 사용해 진행한 결과>

STEP3: 텍스트를 반영한 이미지를 만들어 내도록 latent vector 업데이트 (StyleCLIP)

구현 코드: link
참고 논문: StyleCLIP: Text-Driven Manipulation of StyleGAN Imagery
참고 코드: link
방법: STEP1에서 구한 latent vector가 만들어내는 이미지와 사용자가 넣어주는 textCLIP에 넣어서 loss계산 -> latent vector 업데이트

StyleCLIPStyleGANCLIP을 같이 쓴 모델임. CLIP은 이미지텍스트를 동시에 받아서 둘을 각각 인코더를 거친 후 같은 임베딩 스페이스상에서 거리를 측정하는 도구라 할 수 있다. 이러한 CLIP을 이용하면, 최종적으로 이미지와 텍스트사이의 일종의 유사도 를 계산할 수 있고, 이를 활용한 loss를 CLIP loss라 함. StyleCLIP에서는 이를 사용해 최종적으로 사용자가 넣어준 텍스트를 잘 표현하는 이미지를 만들어 낼 수 있도록 latent vector를 업데이트 함. 물론 기존 이미지의 전체적인 apperance는 유지함.

StyleCLIP 논문에서는 구체적으로 3가지의 방법을 제시하는데, 여기서는 이 중 가장 직관적이면서도 쉬운 "Latent Optimization"을 구현했음.
실험결과 대체로 어느정도 text를 잘 반영하는 이미지를 생성가능했지만, 일부 latent vector에서는 이미지 왜곡이 생기면서 잘 작동하지 않는 것을 확인할 수 있었음.

Example) STEP1에서 이미지를 잘 represent하는 latent vector를 활용해 실험 진행함.

Good case

<latent vector: Jablonski, Text Prompt: Really angry face>



<latent vector: 엠마스톤, Text Prompt: Smile face>


Bad case

<latent vector: 로제, Text Prompt: Really angry face>



<latent vector: 제니, Text Prompt: Smile face>


이외에도 여러가지 latent vector와 Text Prompt 조합을 통해 실험했고,
원본 이미지를 아무리 좋은 quality 로 representation 하는 latent vector를 사용하더라도, StyleCLIP에서 잘 작동하지는 않는 사실을 알았음.
이와 더불어 StyleCLIP Task에서 역시 한국인 이미지보다 서양인 이미지에서 더 잘 작동하는 것 을 확인할 수 있었는데, 아마도 StyleGAN을 pretrain할 때 사용한 데이터의 bias문제라고 판단됨.
향후 한국인 이미지 관련 프로젝트를 한다면 다른 pretrain dataset을 사용할 필요가 있어보임.(ex: 한국인 face dataset)