논문 리뷰/face

[논문 리뷰] Implicit Warping for Animation with Image Sets

curious_cat 2024. 8. 17. 22:43
728x90
728x90

개요

어떠한 reference 이미지가 주어졌을 때 motion을 입히고자 할 때 한 가지 인기가 있는 방법은 feature warping을 하는 것입니다.

Monkey-Net, FOMM, face-vid2vid, headGAN 이 이쪽 방법 중 잘 알려져 있는 방법들인데 이들의 단점은 multiple reference image를 사용하는 것이 용이하지 않습니다. Free-HeadGAN 같은 경우 warping 된 feature을 soft-max 기반 평균으로 섞어주는데 자세히 보면 defect가 있습니다 (밑에 그림에 빨강 동그라미로 표시). 원인은 여러 reference 이미지를 warping 해서 생성할 때 취합이 잘 안 되어서 그렇다고 추정이 됩니다.

따라서 저자들에 의하면 explicit warping 방법은 여러개의 reference image를 처리하는데 적합하지 않은 방법이고 이것을 해결하기 위해 implicit warping 방법을 제시하였다고 합니다. Implicit warping을 했으면 개인적으로 성능을 기대하기 어렵다고는 생각이 들었지만 (설명은 뒤에) NIPS에 accept 되었기에 혹시 기발한 아이디어가 있나 해서 읽어봤습니다.

페이지: https://deepimagination.cc/implicit_warping/

논문: https://arxiv.org/pdf/2210.01794

방법

Implicit Warping의 의미

  • 디테일은 좀 복잡하지만 방법 자체는 단순합니다.
    1. reference image & reference image의 keypoint정보에서 feature extraction을 하고
    2. driving image의 keypoint 정보를 기반으로
    3. attention을 사용해서 reference image의 feature 정보를 가져오고 (=implicit warping...)
    4. 이미지를 생성하겠다
    입니다.

디테일

전반적인 구조

헷갈릴 수 있으니 밑에 그림 중간중간 참고.

  1. FOMM과 비슷하게 이미지로부터 keypoint 예측을 합니다. 여기서 FOMM과는 다르게 keypoint 위치와 (x, y 좌표 정보) keypoint strength (0~1)을 예측하는데 대략적으로 keypoint visibility라고 생각하면 된다고 합니다.
    • Keypoint는 위치에 대해서 고정된 표준편차를 갖는 Gaussian distribution으로 표현합니다
    • 얻은 keypoint heat map을 keypoint strength로 곱해줍니다.
  2. Source image같은 경우 image & keypoint를 UNet 같은 구조로 encoding 해줍니다. 단, 256x256 -> 64x64 resolution으로 4배 downsampling이 된다고 합니다. 비슷하게 driving keypoint map도 encoding 해줍니다.
    • source / driving image와 무관한 400개의 key & value를 추가합니다. 이유는 source image에 모든 얼굴 정보가 없을 수 있기 때문에 (예을 들어 입을 다물고 있으면 이빨이 안보임) 이러한 정보를 encoding해주는 key & value로 해석하면 됩니다.
    • 이러한 extra key들이 잘 학습되도록 semantic dropout을 해줍니다: 얼굴의 주요 부위에 해당하는 key들을 dropout 해줌
    • source image의 feature을 flattening 해주면 k x d  (k: flatten 된 feature 수, d: embedding dimension)
    • driving keypoint의 feature을 flattening해주면 q x d (q: flatten된 feature 수)
    • feature에 learnable positional embedding을 더해줍니다
    • 이 두 feature map들로 얻은 attention map = A (dot product & scaling & softmax). Dimension: q x k
  3. UNet을 사용해서 source image에서 feature extraction을 해서 k x d' feature map을 얻음. 이것을 KQV attention에서 value로 사용 (참고: K, Q는 2에서 얻었고 이것을 사용해서 attention map A를 얻음). 이렇게 q x d' dimension의 (implicit) warped feature (일부)을 얻음.
  4. 추가로 원본 source image를 flattening 하고, key와 concatenate를 하고,  attention map A와 곱해서 q x (d+3) feature map을 얻고, query와 concat을 하고, MLP를 통과시켜서 3에서 얻은 feature이랑 더해줌. 이게 최종 (implicit) warped feature.

Loss

GAN loss, perceptual loss, equivariance loss, 

Optimization

8 A100 (40GB). Batch size = 8. Adam optimizer, beta = (0.5,0.999)

-> 학습할 때 메모리 많이 잡아먹는 편

실험 결과

metric들은 큰 의미가 없어서 논문 참고.

논문 페이지에서 비디오를 보는 것을 추천하는데, 걱정했듯이 implicit warping이라 얼굴 형태가 잘 보존되지 않음. Explicit warping 같은 경우 고정된 얼굴 feature들을 움직여주는 형태로 얼굴을 만들다 보니 얼굴 형태가 잘 보존되는데 이 방법론은 무식하게 얼굴 feature을 불러오다 보니 얼굴이 전반적으로 미세하게 일그러지는 경향이 있음. 특히 얼굴 경계선을 유심히 보는 것을 추천.

https://deepimagination.cc/implicit_warping/

Attention 기반이다 보니 reference 가 여러 개 들어왔을 때 쉽게 reference들의 feature들을 추가로 보고 생성하게 일반화가 가능하기는 함.

Explicit warping의 답은 아니라고 개인적으로 판단.

 

728x90
728x90