본문 바로가기

Data-science/논문 읽기

[논문 읽기] StyleGAN2 Distillation for Feed-forwardImage Manipulation - 2

728x90

3.1 Data collection

Style mixing 이란?

- regularization 기법이다. 다른 스케일에 입력되는 w_1, w_2의 latent code를 사용한다. Face morphing (얼굴이 서서히 변하게 만드는 것)은 이런 w들 사이의 linear interpolation과 관련돼있다. 

- 각 task 마다 5만장의 샘플을 만들었다. 각 샘플은 2장의 source 이미지와 target 이미지로 이루어진다. 이미지 샘플 생성 과정은 이렇다. 정규 분포에서 임의의 z를 샘플링하고, w로 맵핑 후, stylegan2를 이용해 이미지를 생성한다. 이렇게 각 source 이미지 2장을 생성한다. target 이미지는 대응하는 w에 연산을 수행하고 그 결과 stylegan2에 feeding 하여 생성했다.

얼굴 특성들 (연령이나 성별)은 지explicit하게 인코딩 되지 않는다. z나 w차원으로... 이걸 극복하기 위해 사전학습된 별개의 얼굴 분류 네트워크를 사용했다. 이 네트워크는 이미지에서 얼굴을 탐지했는지, 연령대 bin들, 성별에 대한 확률값을 출력한다.  이 네트워크가 저작권이 걸려있단다. 그래서 이를 이용해 생성한 합성 데이터 셋만 공개한다고 한다... 이런...

4가지 단계로 성별, 연령별 데이터셋을 생성한다.

- 우선 Fig2에 묘사된 대로, latent vector(z)를 target의 특성으로 맵핑 시키는 intermediate (w)데이터셋을 만든다.  

- 두 번째로는, 특정 특성과 관련된 latent space에서 방향을 찾는다.

- 세 번째, 위에서 생성한 vector를 이용하여 raw 데이터셋을 만든다. 아래 Fig3에서 보는 것처럼.

- 마지막으로 이미지들에서 필터링하여 최종 데이터셋을 구성한다.

이 방법은 아래에 자세하게 나타냄.  

1. 임의의 latent vector z_i를 w_i로 맵핑 시키고 대응되는 이미지 샘플 g(w_i)를 stylegan2를 이용해 생성한다.

2. 사전 학습된 네트워크 f로 부터 이미지의 특성 예측값(attribute predictions)을 얻는다. 해당 식은 다음과 같다. f(g(w_i)) = c(w_i). w_i와 대응되는 클래스를 예측하는 f일 것이다. (이미지가 입력으로 들어가니 분류과제에 쓰이는 일반 CNN일듯. c는 클래스를 의미)

3. 얼굴이 낮은 확률로 포착된 이미지들은 제외시킨다. 그리고 나서 높은 분류 확률 값을 가진 이미지들만 선택한다.

4. k 클래스에 속하는 모든 w_i들의 중심 C_k 각 클래스 k마다 다 찾는다. 그리고 한 클래스에서 다른 큰래스로의 transition 벡터를 클래스 중심 C_k간의 차이로 정의한다. 해당 벡터 델타 : delta_(C_i, C_j)를 찾는다.

5. random sample z_i를 생성하고 맵핑 네트워크에 통과시킨다.

  • gender swap 과제를 위해, 다섯 종류의 이미지 세트를 만든다. 아까 생성한 delta를 빼주거나 더해준 후 맵핑 시키는 방식이다.
  • aging/rejuvenation 과제를 위해, 우선 얼굴의 특성들 c(w_i)를 예측한다. 그리고 c(w_i)에 대응하는 벡터  delta_(c_w_i)를 이용하여 나이 든 모습, 어려진 모습 두 가지 얼굴을 생성한다.

6. raw 데이터셋에 있는 모든 이미지에 대해 예측하고 confidence에 따라 필터링 한다.

7. 분류 결과에 근거해서, 모든 이미지에서 한 쌍을 선택한다. 각 이미지는 높은 확률로 대응하는 클래스에 속해야 한다.

 

As soon as we have aligned data, a paired image-to-image translation network can be trained.

위에 데이터를 paired하게 구성한후 image-to-image 네트워크를 훈련한다!!!

 

 

모든 task에 맞는 가장 좋은 방법을 설명하기 위한 게 아니다. 일반적인, 모두 통용 가능한 방법 (연령, 성별, 모핑 등에 모두)을 원했기에 pix2pixHD를 통합 프레임워크로서 훈련시켰다. 이 모델도 blob artifact를 가지고 있는데. 가벼운 녀석들은 stylegan2에서 해결했다. 그래서 pix2pix2HD에도 유사한 방식을 적용하면 이걸 치료할 수 있을 거라 생각했다.

운이 좋게도 그냥 생짜 pix2pixHD만 써도 퀄리티가 아주 좋았다! artifact없이 말이다!! 그래서 pix2pixHD 네트워크를 좀 더 다듬거나 하는건 안 했으니 니들이 나중에 알아서 하길 바란다. 기존 다른 실험들이랑 비교하려고 512x512만 주구장창 하긴 했다. 그래도 성별쪽엔 1024x1024도 시도했다.

스타일 믹싱이랑 얼굴 평균 내는 과제는 입력 이미지가 동시에 2장이다. 그래서 input 채널을 6으로 두고 채널 축으로 input을 연결 시키는 것으로 입력값 이미지 2장을 잘~ 했다.

데이터 셋 생성 방법 그림 설명

정규 분포에서 z를 임의로 샘플링해서 이미지 세트를 생성한다. 한 facial attibute(성별, 연령 등)에 대응되는 delta 값에 따라 이미지를 추가 생성한다. 분류 결과값을 기준으로 각 이미지 세트에서 최상의 샘플을 pair로 뽑는다.

 

pix2pixGD가 다른 인코더보다 더 미세한 변화도 잘 담아냈다. 좀 더 쉬운 과제를 해결한다. 한 벡터에 이미지의 모든 정보를 인 코딩하는 다른 인코더와는 달리.

le Fig. 4: Gender transformation: comparison with image-to-image translation approaches. MUNIT and StarGAN v2* are multimodal so we show one random realization t

위 논문 방법을 distilled transformation이라고 하기로 했나보다. 이게 다른 결과들 보다 질적으로 좋다고 말하는 중이다.

stylegan2에선 공식 project method가 있다. 이 방법은 W에서 동작하는데, 실제 세계의 이미지가 아닌, 이 모델에 의해 생성된 얼굴만 허용한다. 그래서 비교를 위해 W+에 해당하는 유사한 방법을 구축했다. 각 제너레이터의 레이어에서 w를 개별적으로 최적화 시킨다. 이건 주어진 이미지를 더 잘 reconstruct 하게 해준다. w를 찾고나서, 위에 설명한 방법대로 transformation vector를 더 해줄 수 있다. 그래서 변형된 이미지를 만드는 것이다.

또 latent code를 찾는 걸 비교하기 위해 다른 project method도 실험했다. 얘내들은 styleGan2가아니라 1로 만든거다. perceptual loss를 이용한 거고. 피터 베이리스의 방식은 백그라운드 마스킹을 이용하고, 최적화 시작점을 근사치로 forwarding 해서 더 정확한 방법으로 알려져있다.

unpaired 방법 성능이 상당히 구려서 optimization으로 임베딩을 찾는 다양한 방식들을 비교하는 데 더 노력했다! 그리고 FID는 이미지 품질을 제대로 측정 못한다. 그래서 실제 사람한테 설문 조사를 돌림!

우리 방법이랑 각각 다 비교했는데! stylegan encoder (니킷코) 빼고 우리 방법이 다 좋았다!

latent code 최적화 하는 방식이랑 비교한 것. 인풋 샘플은 실제 FFHQ 이미지이다. 이상한 물체는 (마이크 같은거) optimization 과정에선 없어진다. 그런데 img-to-img 방식에선 안 없어짐.

성별이 완벽하게 w 공간을 분리시키진 못했다. 성별이랑 미소랑 좀 섞인 걸 볼 수 있다.

pix2pixHD에도 좀 문제가 있다. 작은 블랍이 반복돼서 나타나고, 1024 해상도는 아직 어렵다.

Stylegan2에는 18개의 AdaIN 입력값이 존재. 얘들은 각기 다른 해상도에 작동한다. 각 해상도 input을 변화 시켜주면 그 해상도의 detail이 변할 것이다. 저자는 3가지 그룹으로 스타일을 나눴다. 4~8 해상도의 성긴 스타일, 16~32의 중간 스타일, 64~1024의 미세 스타일.

성긴, 중간, 미세 세부사항을 변화 시키는 것. 이건 stylegan만의 유니크한 특징이다.

두개의 소스이미지와 그들의 믹싱 데이터셋  이렇게 3개로 데이터셋을 수집했다. 그리고 각 변환에대해 우리 모델을 학습시켰다. 두개의 이미지를 6개의 채널로 이어 붙여서 pix2pixHD에 feeding했다.

다른 간단한 방법은 두 개의 w를 평균하는 거다. 그건 영상처리에서 모핑하는 것. 두개의 랜덤한 코드와 평균 데이터 셋을 모았고 7(d)에 나타냈다.

조건없는 이미지 생성과 paired한 이미지변환 GAN을 하나로 합쳤다. 특정 이미지 조작에 일종의 증류를 한건데. stylegan2의 latent code w를 조작하는걸 단일 img-to-img translation으로 증류한 것이다. 결과 기술은 더 빠르고 퀄리티도 더 좋다! 기존의 unpaired한 img-to-img translation 보다 FID score도 좋고, StyleGan Encdoer 보다 성별 조작 테스크에서 설문 조사든, 인퍼런스 타임이든 우리 것이 더 좋았다.

몇가지 한계점 있다. 

pix2pixHD 밖에 안 사용했다. 게다가 보편적인 단일 모델로 훈련될 수 있었는데도 불구하고, 모든 변환을 각기 모델로 만들었다. (성별 변환 모델, 연령 변환 모델, 모핑 변환 모델 등) 보편적인 모델은 니들이 조사해라!!