stylegan이든, stylegan2든 projection 속도가 상당히 느리다.
projection?
1. 이미지를 w 차원으로 embedding 시키기
2. w를 generator를 통해 다시 합성하여 이미지 생성하기
실제 이미지를 z, w, w+와 같은 embedding vector 차원으로 인코딩 후 다시 generator를 거쳐 그와 유사한 이미지를 생성하는 것이다.
generator를 G라는 함수로, 실제 이미지는 R이라 하면,
projection은 G(z), G(w) 혹은 G(w+) 가 R가 최대한 유사하게 되는 z, w, w+를 찾는 과정이다.(latent code를 w 만 생각해보기로 하겠다.) 실제 이미지와 유사하게 만들어야 하므로, opitmization 과정에 쓰이는 Loss는 percetual length, mse 등을 쓴다.
이 과정에 G(w), 즉 generated image 에 대해 optimizing이 일어나, w를 미세하게 조절해간다.
이게 상당히 무거운 연산이다. projection 마다 매번 back propagation 단계가 들어가니 그렇다.
그러면 이런 단계를 skip할 수는 없을까?
Encoder
있다. Stylegan에서 합성한 이미지를 G(w) 라고 하자. 그러면 G(w)를 encoding 시켜서 w가 나오게끔 학습을 시킨다. 이렇게 학습 시킨 네트워크를 이용해서 projetion 하는 것이다.
이런 네트워크를 Encoder라 하자. 실제 이미지를 이 Encoder에 넣으면 학습한 분포에 맞게 유사한 w를 출력하게 된다. "1. 이미지를 w 차원으로 embedding 시키기" 앞서 설명한 projection 1번 과정에서 back propagation이 일어났는가? 일어나지 않았다. 그냥 feed fowrading만 일어났다. 그래서 훨씬 빠르다.
다시 이미지로 합성하는 데 드는 2단계 과정은 같다.
실제 서비스에 projection 과정을 이용해야 한다면 속도가 문제가 된다. 그럴때 encoder는 아주 좋은 선택이다.
이 논문은?
이 논문은 기존 stylegan projection 방법보다 성능이 더 좋다고 한다. w+ encoder 네트워크 구조로 pSp(pixel2style2pixel) network github.com/eladrich/pixel2style2pixel
란 걸 이용했는데, 이 encoder를 이용하면 보다 실제 이미지에 가깝게 inversion이 가능하다. 또한 style간의 disentanglement(특징들끼리 구분, 구별이 잘 되어 있다. 가령 나이 스타일끼리, 성별 스타일끼리 경계가 뚜렷하다는 얘기)가 더 큰지 여러 style 조정도 더 자연스럽다.
위에 설명한 내용에 더해서 이 pSp가 기여한 점은 identity loss를 사용했다는 것이다. 이게 이미지 reconstruction시 성능 향상을 가져왔다. 또 이 네트워크는 image-to-image translation 과제에도 사용될 수 있다고 한다. 이걸 쓰면 국소적인 픽셀을 일치시키려고 이미지가 일그러지거나 하는 게 덜하다. 보다 전체적인 이미지의 스타일을 잘 잡아내 다양한 task에 이 기술을 이용할 수 있다고 한다. (얼굴 각도 변화시키기, segmentation map으로 이미지 생성하기 등등)
그래서 어떤 네트워크를 이용했는가?
네트워크 구조는 이러하다.
1. 피쳐맵 추출 (Resnet backbone에 feature pyramid 구조를 이용)
2. 0~2 단계 해상도의 작은 피쳐맵, 3~6 단계 해상도의 중간 피쳐맵, 7 ~18 단계의 큰 피쳐 맵에서 각 각 단계의 style을 추출한다. 3. 맵핑 네트워크는 제일 오른쪽 위 그림에서 보는 것처럼 convolutional network로만 이루어진 네트워크다. stride를 2로 줘서 매번 해상도를 반으로 줄여 최종적으로 한 스타일 당 1x1x512 w latent intermediate vector를 추출하는 것이다.
4. 그게 기존 stylegan 논문의 generator에 들어간다. 각 layer 별 vector가 Affine 변환을 거쳐 스타일을 생성하고, upsampling을 거쳐 최종 이미지를 합성한다.
특정 image-to-image translation 과제에서 아래 그림과 같이 seg mask를 입력했다고 치자.
그런데 출력 이미지가 되게 모호하거나 이상한 게 나온다면? 실망할 것이다. 그러면 어떻게 해야하나? output을 여러개 뽑고 거기서 좋은 걸 샘플링 하면 된다.
그 방법은 전체적인 이미지 스타일 특징은 유지하되, 미세한 (fine) 특징들은 random한 스타일을 이용하는 것이다. layer 마다 style이 다른데, 이 style을 섞어서 학습하는 게 style mixing이다. 여기선 low resolution layer에 해당하는 1~7은 encoder에서 나온 w 값을 유지했다. 반면 high resolution에 해당하는 8~18 layer의 경우 랜덤하게 w를 생성하였다. fine layer의 w 샘플마다 이미지의 미세한 스타일이 조금씩 변하니 여러 장의 이미지를 얻을 수 있는 것이다.
image inversion에서 부터 이 논문이 시작됐다. 다른 방법들과 이 성능을 비교해본다.
IDInvert가 처음 글에 설명했던 stylegan 논문에 있는 projection 방식이다. ALAE는 auto encoder와 관련된 방식인 것 같은데 잘 모르니 skip.
로다쥬 사진을 보면 pSp만이 inversion 결과 로다쥬의 특징을 남겨놨다. 확실히 pSp projection 성능이 제일 좋다.
ablation study
- 단순한 encoder와 비교하기. 마지막 layter에서 512 style vector를 출력하게 만든다. 그리고 이걸 18 x 512로 expand 시키는 추가적인 layer를 둔다. 이렇게 하면 detail을 살려내지 못한다고 한다. (pSp에서는 미세한 세부 특징들까지 잘 생성했다.)
- identity loss 가 없으면 identity가 잘 보존되지 않는다고 한다. identity loss가 있어야 reconstruction에서 identity가 보존된다.
'Data-science > 논문 읽기' 카테고리의 다른 글
[논문 읽기] End-to-end Recovery of Human Shape and Pose 핵심 정리 (0) | 2021.02.16 |
---|---|
[deep learning 논문 읽기] Stylegan2 ada 이해하기 (1) | 2021.02.04 |
[논문 읽기] StyleGAN2 Distillation for Feed-forwardImage Manipulation - 2 (0) | 2020.11.26 |
[논문 읽기] StyleGAN2 Distillation for Feed-forwardImage Manipulation - 1 (0) | 2020.11.26 |
[논문 이해] Image Based Virtual Try-on Network from Unpaired Data 설명 - 1 (0) | 2020.10.25 |