[논문 리뷰] One-Shot Free-View Neural Talking-Head Synthesis for Video Conferencing (OSFV)

Hanbong Yoo
KLleon
Published in
13 min readSep 15, 2022

Intro

이번에 소개드릴 논문은 2021년 CVPR에서 oral paper로 선정된 “One-Shot Free-View Neural Talking-Head Synthesis for Video Conferencing”입니다.

해당 논문은 아래 그림에서 볼 수 있듯이 source image의 얼굴과 driving video의 머리 움직임을 합성하는 motion transfer 작업을 다루고 있습니다.

논문에서 이야기하는 contribution은 3가지입니다.

  1. A novel one-shot neural talking-head synthesis approach.
  2. Local free-view control of the output video, without the need for a 3D graphics model.
  3. Reduction in bandwidth for video streaming.

요약하면 사진 한 장으로 sota 성능의 talking-head를 합성할 수 있고, 3D 그래픽 모델 없이도 talking-head의 시점과 모션을 바꿀 수 있다는 것입니다.
비디오 전송을 위한 대역 폭도 감소했다고 하는데, 앞서 말한 talking-head 합성을 어떻게 구현했는지를 중점적으로 알아보도록 하겠습니다.

Idea

논문 내용은 복잡하지만, 아이디어는 간단합니다.

아래 그림처럼 source image에서 얼굴 detail에 해당하는 생김새 정보를 추출하고, driving video에서 머리 포즈와 표정 정보를 추출해 talking-head를 합성합니다.
driving video의 머리 포즈 대신 임의의 머리 포즈 정보를 입력하여 원하는 포즈의 talking-head를 만들 수 있습니다.

Method

우리의 목적은 source image의 얼굴에 driving video의 motion을 입히는 것입니다.
모델 학습을 위해 reconstruction task를 사용하는데, driving video의 한 frame을 source image로 사용합니다.
이를 위해 제시된 방법은 크게 3단계로 구분되어 있습니다.

  1. Source image feature extraction
  2. Driving video feature extraction
  3. Video generation

1. Source image feature extraction

먼저 source image에서 어떤 정보들을 어떻게 추출하는지 확인해 보겠습니다.

첫 번째로, 얼굴 생김새 정보를 의미하는 appearance feature를 뽑습니다.
Face recognition 작업에서는 보통 2차원의 feature를 뽑아내지만, 여기서는 3차원 값을 갖는 feature를 뽑아냅니다.
나중에 나오겠지만, 3D warping 작업을 하기 위해 feature를 3D로 추출합니다.
아래 모델은 여기서 사용하는 feature extractor입니다. 2D conv로 down-sampling을 하고, 2D→3D projection을 진행한 뒤 3D conv로 이루어져 있는 residual block을 통해 3D feature를 뽑아냅니다.

두 번째로, canonical key point를 뽑습니다. canonical key point에 대한 예시는 아래에 있습니다.
Source image에 해당하는 keypoint가 아니라, source image를 정면으로 align 한다고 가정했을 때, 정면 얼굴의 key point를 의미합니다.

그리고 여기서 말하는 keypoint는 facial landmark라고 생각하면 편한데, 기존에 알던 landmark와 다른 점은 model이 unsupervised 하게 landmark의 위치를 학습한다는 것입니다.

아래 예시로 key point가 어떻게 생겼는지 참고하시면 됩니다.

Canonical key point 역시 3차원 좌표값을 가지고, 아래 U-Net 구조 모델을 통과하여 얻을 수 있습니다.
보통의 U-Net 구조와는 다르게 down-sampling을 할 때는 2D conv를, up-sampling을 할 때는 3D conv를 사용하여 20개의(K=20) 3D key point를 뽑아냅니다.

세 번째로, Head pose Expression deformation을 추출합니다.
두 개를 한꺼번에 쓴 이유는 아래 그림과 같이 동일한 모델에서 head만 다르게 하여 추출되기 때문입니다.
아래 그림에 명시된 fc는 fully connected layer이고 뒤에 숫자는 output 차원을 의미합니다.

Head pose 정보엔 rotation matrix와 translation vector가 있습니다.
Rotation matrix는 위에서 언급한 canonical view에서부터 머리가 얼마나 회전했는지를 나타내는 행렬입니다. Source image를 위 모델에 통과시켜 yaw, pitch, roll 값을 구하고, 그 값을 사용해 3 x 3 rotation matrix를 만들어냅니다.
Translation vector는 canonical view로부터 머리가 얼마나 이동했는지를 나타내는 3 x 1 벡터입니다.
Expression deformation은 표정 변화에 의해 keypoint가 얼마나 움직여야 하는지 알려주는 값입니다.
논문에선 keypoint가 20개이고 3차원이므로 expression deformation을 뽑기 위해 fc60(3x20) head를 사용했습니다.

아래 수식을 통해 source image keypoint를 계산합니다.

Canonical keypoint x_c, k에 keypoint 회전을 나타내는 rotation matrix R_s를 곱해주고, keypoint 이동에 해당하는 translation vector t_s와 expression deformation delta_s, k를 각각 더해줍니다.

2. Driving video feature extraction

가장 먼저 driving video를 frame으로 나누고, frame마다 아래 과정을 진행합니다.
Driving image에선 다행히도 아래 그림과 같이 head pose(rotation matrix, translation vector)와 expression deformation만 추출합니다.

우리의 목적은 source image의 얼굴에 driving image의 모션을 입히는 것이기 때문에 canonical keypoint는 source image에서 구한 값을 가져와서 사용합니다.
Source image keypoint와 마찬가지로, driving image의 keypoint를 구하는 과정은 아래와 같습니다.

아래 그림은 driving image keypoint를 구하는 과정을 시각화해서 보여주고 있습니다.
맨 오른쪽 그림 (d)는 같은 사람의 다른 포즈 canonical keypoint는 동일하지만 다른 사람의 같은 포즈 canonical keypoint는 다르다는 것을 확인시켜줍니다.

3. Video generation

논문에서는 video generation 부분이 가장 짧지만 앞서 설명한 다른 단계들보다 복잡하고 어려운 내용인 듯합니다.

앞서 구한 source image keypoint 20개와 driving image keypoint 20개를 20개의 source-driving keypoint 쌍으로 대응시킵니다.

각각의 keypoint 쌍에 대해 source keypoint에서 driving keypoint로 mapping 해주는 3D warping flow map w_k를 first order approximation을 사용하여 구할 수 있습니다.

앞서 구한 source image의 3D appearance feature를 warping flow map의 input으로 넣어, 20개의 warping 된 3D feature를 구합니다.
20개의 warping된 3D feature를 concatenate하면 아래 그림에서 motion field estimator에 들어갈 input이 만들어집니다.

Motion field estimator을 통과하게 되면, Flow composition mask와 Occlusion mask를 구할 수 있습니다.
Flow composition mask는 3D mask로, 20개의 warping flow map에 대해서 어떤 map을 얼만큼 사용할지 결정해 주는 softmax를 통과한 weight라고 생각하시면 됩니다.
Occlusion mask는 source image를 warping 했을 때, source image에서 보이지 않던 부분 즉 generator에서 생성해야 될 부분을 표시해 주는 2D mask입니다.

20개의 warping flow map이 concatenate 된 벡터와 flow composition mask의 선형 결합으로 final warping flow map w를 구할 수 있습니다.

Source image appearance feature를 다시 final warping flow map에 넣어서 구한 warping feature w(f_s)은 아래 generator의 input으로 들어갑니다.
먼저 warping feature를 3D→2D로 projection 후 앞서 구한 occlusion map을 곱하고, up-sampling을 통하여 driving image를 복원합니다.

Loss

학습에 사용되는 loss는 아래 수식과 같이 6개 loss term들로 이루어져 있습니다.
가장 앞 2개의 term은 output image가 ground truth와 비슷하게 만들어 주고, 다음 2개 term은 keypoint를 일관성 있고 잘 추정하도록 만들어 주며, 마지막 2개 term은 head pose와 expression deformation을 제어합니다.

Perceptual loss L_P
Pre-trained VGG 모델 통과한 output image와 ground truth의 feature를 L1 loss를 사용하여 비교합니다. 또한, 기존 image를 down-sampling 해서 multi-scale loss를 계산하고, single-scale perceptual loss와 더한다고 합니다.

GAN loss L_G
“High-resolution image synthesis and semantic manipulation with conditional GANs” 논문에 소개된 hinge loss와 feature matching loss를 사용합니다.

Equivariance loss L_E
Keypoint의 일관성을 보장하기 위한 loss입니다. Image에서 detect 된 keypoint는 임의로 affine 변환된 image에서 detect된 keypoint를 다시 affine 역변환을 했을 때 동일해야 된다는 내용입니다.

Keypoint prior loss L_L
xy 평면에서 keypoint 끼리 거리가 너무 가까우면 안 되며, z 값은 비슷해야 한다는 조건을 거는 loss입니다. 본 논문에선 threshold D_t를 0.1, z_t를 0.33으로 설정했습니다.

Head pose loss L_H
사전 훈련된 pose estimator(hopenet)을 통해 나온 pose를 ground truth라 생각하고 계산된 loss입니다. Euler angles의 합으로 계산됩니다.

Deformation prior loss L_∆
Expression으로 인해 keypoint가 너무 많이 변하면 안 된다는 제약을 주는 loss입니다.

마지막으로 6개의 각 loss에 대한 weight는 10, 1, 20, 10, 20, 5로 설정했습니다.

Experiments

Dataset

VoxCeleb2 중 bit-rate가 높은 280K의 데이터와 TalkingHead-1KH dataset을 사용했습니다.

Fine-tuning

256x256 image로 100 epoch 학습한 뒤 512x512 image로 10 epoch 동안 fine-tuning 했습니다.

Results

평가 지표로나, 정성적으로나 기존 sota 모델들보다 OSFV가 더 잘 구현하는 것을 확인할 수 있습니다.

Reference

Wang, Ting-Chun, Arun Mallya, and Ming-Yu Liu. “One-shot free-view neural talking-head synthesis for video conferencing.” Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2021.

--

--