논문 리뷰

[논문 리뷰] Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric CNN Regression

망나 2021. 5. 1. 17:16

논문 링크

 

 

2017년에 ICCV에서 발표된 논문입니다. 현재 Paper with code의 3D Face Reconstruction 부문에서 Github 스타 수가 가장 높으며

3D Face Reconstruction (Florence dataset) 벤치마크에서 3등에 위치하고 있습니다.

 

작성된지 4년이나 지났지만 3D Face Reconstruction에 대한 많은 인사이트를 얻을 수 있을거 같아 자세히 읽고 핵심 내용에 대해서 정리해보도록 하겠습니다.

 

 

[1] Introduction

해당 논문은 이전의 컴퓨터 비전에서 3D Face Reconstruction을 수행할 때 고려해야 했던 얼굴 포즈, 표정, 조명 등의 다양한 문제들을 간단한 CNN 모델을 학습시킴으로써 해결하는데 초점을 맞춘 것 같습니다. 논문에서는 제안하는 모델을 활용하면 추가적인 데이터 필요없이 2D 이미지만을 입력으로 받아 3D facial geometry를 재구성할 수 있다고 주장합니다. 공식적인 코드와 모델 또한 저자의 블로그에 공개되어 있으니 추후에 직접 사용해보고 리뷰를 해보도록 하겠습니다.

 

 

[2] Method

[2-1] Dataset

제안하는 모델을 훈련시키기 위해 2D 이미지와 그에 해당하는 3D 얼굴 스캔 데이터가 필요로 합니다. 따라서 논문에서는 300W 데이터 (2D 얼굴 이미지)에 Basel, FaceWarehouse 모델을 사용하여 3D 얼굴 데이터를 얻어 훈련 데이터를 준비했다고 합니다. 그리고 얼굴 프로파일링을 통해 각 얼굴을 10~15개의 다른 포즈로 렌더링한 300W-LP 데이터셋을 생성했다고 합니다.

 

[2-2] Proposed volumetric representation

논문에서 만들고자 하는 모델을 CNN 구조의 회귀를 통해 2D 이미지의 얼굴에 대한 3D 스캔 정점들의 좌표를 예측하는 것 입니다. 하지만 표준 L2 손실을 사용하여 모든 3D 포인트의 직접 회귀는 예측이 어렵다고 합니다. 또한 이를 위해서는 모든 스캔을 고정된 차원의 벡터로 보간하는 전처리 작업이 필요하게 됩니다.

 

이 문제를 해결하기 위해서 논문에서는 3D face reconstruction 문제를 2D to 3D image segmentation 문제로 재구성하는 방법을 선택했습니다. 더 자세히 설명하자면, 3D 공간을 voxels {w, h, d}로 이산화(discretizing)하고 3D 얼굴 스캔으로 둘러싸인 모든 지점에 1 값을 할당하고 그렇지 않으면 0을 할당하여 각 3D 얼굴 스캔을 3D 바이너리 볼륨 \(V_{whd}\)로 변환합니다. 글로 보면 잘 이해가 되지 않을 수 있는데 아래 그림을 통해서 조금 더 쉽게 이해할 수 있을 것 같습니다. 이산화 과정을 통해 오류가 발생할 수 있는데, 192 x 192 x 200로의 이산화 과정에서 생기는 오류는 무시할 수 있을 정도의 작은 오류만 발생한다고 합니다.

 

[2-3] Volumetric Regression Networks

학습에 사용하는 CNN 구조는 skip connection들과 residual learning을 사용하는 "hourglass network"를 기반으로 하여 2개의 hourglass network를 쌓은 구조로 아래 이미지와 같습니다. 이때, 입력은 2D 이미지이고 출력은 192 x 192 x 200 볼륨의 실제 값 입니다.

 

 

모델은 아래와 같이 sigmoid cross entropy loss function을 활용하여 학습 됩니다.

 

모델 테스트에서 주어진 2D 이미지를 3D 얼굴 mesh가 복구되도록 3D 볼륨을 회귀시킵니다. 이때, 픽셀 수준의 hard 예측보다 soft sigmoid 출력이 추가되면 더욱 좋은 결과물을 얻을 수 있다고 합니다.

soft 예측의 결과물이 더욱 부드러운 것을 확인 할 수 있습니다.

VRN - Multitask.

VRN - Guided.

 

 

[2-4] Training

모델은 RMSProp을 사용하여 훈련시켰습니다. learning rate는 \(10^{-4}\)로 시작해서 40 epochs 이후에는 \(10^{-5}\)로 낮추어 훈련을 진행했습니다. 또한 훈련동안 무작위 augmentation (rotation / translation / scale)을 적용하였고, 20%는 수평으로 flip하여 학습을 진행했다고 합니다.

 

[3] Result

3개의 데이터 셋 AFLW2000-3D, BU-4DFE, 그리고 Florence에 대해서 2개의 sota 모델과 성능 비교 실험을 진행했을때, 아래와 같은 결과를 얻었다고 합니다.

수치가 낮을수록 정확도가 높다고 해석하면 됩니다.

아래 그림은 몇가지 까다로운 데이터에 대한 결과물입니다. 결과를 보면 알 수 있듯이 다양한 포즈와 표정에 대해서도 제대로 3D 얼굴 포인트를 예측한 것 을 확인 할 수 있습니다.

AFLW2000-3D 데이터 중 일부분에 대한 결과

실험 결과에 대해서 저자는 다음과 같이 결론을 내렸습니다.

 

  1. Volumetric Regression Networks (제안하는 모델)는 기존의 sota인 3DDFA와 EOS보다 모든 데이터 셋에 대해서 훨씬 좋은 성능을 보여준다. CNN 학습을 통한 3D 얼굴 구조 직접 회귀가 다른 방법들보다 쉽다는 것을 증명하였다.
  2. 다양한 얼굴 포즈, 표정 변화에도 좋은 결과물을 보이며 다양한 데이터들에 대해서도 일정하게 좋은 성능을 유지한다.
  3. VRN - Guided 모델이 가장 좋은 성능을 보이지만 landmark localization을 위한 hourglass network가 한 층 더 필요하기 때문에 그만큼 계산량이 증가합니다.
  4. VRN - Multitask가 항상 Plain VRN 보다 좋은 성능을 보이진 않습니다. 네트워크가 하나의 작업에 집중하도록 하는게 더 나을 수도 있습니다.