본문 바로가기

Paper Review/ETC.

[Paper Review] FFHQ-UV: Normalized Facial UV-Texture Dataset for 3D Face Reconstruction (CVPR' 23)

안녕하세요. :) 얼마 전 유명한 Human Face dataset인 FFHQ로부터 uv-texture를 추출한 FFHQ-UV라는 데이터셋이 공개되었습니다. 다양한 방향으로 활용이 가능할 것 같습니다만, 본 리뷰에서는 연구에서 제시하는 texture generation관점에서 서술해보고자 합니다. 그럼 시작하겠습니다 :)

1. Introduction

본 연구는 3D Face Reconstruction을 위한 Public & High Quality & High Fidelity UV-Texture Dataset를 공개했다는 것에 의의가 있다. 실제로 기존에도 비전 및 그래픽스 커뮤니티에서 Face의 3d shape( identity & expression )과 texture를 reconstruction하는 것은 꾸준히 관심을 받아왔고, 3DMM이 그 기반에 있었다. 그러나 3DMM은 Shape에 초점을 맞춘 연구에 가깝고 이를 통해 texture morphing 혹은 reconstruction하는 것 또한 제시하고 있지만, PCA에 기반해 combination을 통해 만드는 방법은 Facial Texture가 가진 다양한 특징을 고려하지 못했고, 나아가 in-the-wild 즉 uncontrolled recording conditoin하의 이미지들에 대해서 적용이 어려 실제로 texture를 reconstruction하는 방향은 크게 연구되지 않았다. ( 3DMM이 한계를 가졌던 이유는 texture basis는 facial texture들이 가지는 정보들을 모두 representation할 수 있을만큼의 large expressive capacity를 가지지 못했기 때문이다. )

1.1. Why Facial UV-Texture Dataset need?

이렇게 깊은 연구가 되지 않았던 이유는 크게 'Fidelity', 'Qaulity', 'Public' 3가지 관점에서 서술해볼 수 있다. 기존의 Face UV-Texture Dataset 들은 2d input image의 identity를 잘 보존하지 못하거나(Fidelity), Light Condition에 대한 일관성이 없거나 garmet 'Quality'가 떨어지거나, 좋은 데이터셋이라고하더라도 public하게 공개되지 않았다. 또한 데이터의 양 조차도 충분한 것이 없었다. ( 충분한 identity가 존재하지 않음 ) 저자들은 이러한 이유로 large scale, publicaly available facial UV-Texture dataset인 FFHQ-UV를 제시한다. 저자들이 제시한 FFHQ-UV또한 위와 같은 3가지 관점에서 논해볼 수 있다.

Quality
Texture map의 quality는 여러 관점에서 서술될 수 있지만, 여기서는 1. evenly illuminated 2. without undesired facial assests 등의 관점에 주목했다. 즉 귀걸이나 머리카락 같은 부분들을 제외하면서도 균등한 light condition하에서 texture 데이터셋이 구축되어야한다는 것이다.

우선적으로 저자들은 FFHQ 데이터셋의 single image로부터 UV-texture recovery를 함으로써, FFHQ dataset의 data diversity를 상속받았다. 'Fidelity'관점에서는 single view의 face image로부터 complete facial texture를 추출한다는 것은 어려웠고 ( 즉, 주어진 사진이 측면 사진 뿐인데, 전체 얼굴에 대한 texture를 추출하기는 어렵다. ) identity의 보존이 어려웠다. 따라서 이를 해결하고자 multi view를 활용하고자 했다. 'Qaulity'관점에서는 'in-the-wild'하게 수집된 즉 uncontrolled condition에서 수집된 각각의 이미지 데이터로부터 texture를 추출할 때 각각 다른 표정을 짓거나 illumionation condition이 제각각인 등인 점을 배제해야했고 이를 위해서 각 이미지를 normalized시켜서 uv-texture를 추출하게 된다. 마지막으로 이렇게 large-scale의 high quality를 가진 UV-texture dataset을 공개했는 점에서 'Public'관점에서도 좋은 기여를 했다고 생각할 수 있다.

2. Dataset Creation

FFHQ in-the-wild image로부터 UV-texture map을 구성하는 과정은 다음과 같다. 우선 StyleGAN2 및 Inversion Model을 활용해 Image를 Normalize 및 Multi-view 결과를 얻고, 각각의 view ( left / front / right )로부터 얼굴 부분에 해당되는 texture map만 unwraping을 진행한다. 전체 얼굴에 대해 high quality texture map을 얻기 위해서 각 view를 view에 맞게 face parsing 후 linear blend해 facial texture를 얻게 된다. 그러나 texture unwraping을 하는 과정에서 single image의 3d shape을 estimation해 사용하게 되는데 이러한 imperfect shape으로부터 texture unwraping을 진행하는 것은 artifacts를 유발하게 되고 이를 개선시키기 위해서 artifact correct부터 template texture까지 활용해 최종 texture UV-map을 얻게 된다. 지금부터는 각 component에서 어떤 작업을 했는지 상세히 살펴보도록 하겠다.

2.1. Normalization

본 논문에서 말하는 face image를 Normalization한다는 것은 face image를 editing해서 evenly illuminated & neutral expression and pose를 가지면서 동일한 identity인 normalized image로 만드는 과정을 의미한다. ( 추가적으로 accesories와 같은 것들을 지우는 no occulsion 상태로 만들어주는 editing또한 포함된다. )

조금 더 구체적으로 저자들은 e4e를 통해서 image에 대한 latent code를 inversion하고 그 latent code를 SVM을 활용해 class에 따라 attribute vector를 찾고 이를 바탕으로 이미지를 editing하게 되다. 이때 앞서 언급했듯 lighting, occulsion, facial expression 등의 attribute들을 noramlizatoin해주게 된다. 즉 균등한 lightning condition에서 찍힌 이미지처럼 editing해주게되고, 머리나 안경과 같은 액세서리들을 지워주고 표정은 neutral 즉 무표정으로 만들어주는 것이다. 물론 이때 lightning normalization같은 경우 다른 attribute들과는 다르게 latent code를 건드리는 것이 아 SH Coefficients를 활용해 degree가 0인 상태만 uniform lightning을 가지고 나머지 degree는 모두 0이 되게 함으로써 evenly lightning condition으로 만들어주게 된다.

2.2. Multi view

Multi View 이미지 또한 Normalization과 유사하게 GAN Inversion Model을 활용해서 latent code editing을 통해서 multi view에서 찍힌 이미지 결과를 얻게 된다. 

위 두 과정을 모두 거치게 되면 다음과 같이 single image가 multi-view noramlized 상태로 만들어지게 된다.

2.3. UV texture extraction

UV Unwrapping & UV Mapping
UV 좌표계의 U, V 축은 0~1사이의 float값으로 주로 3d model을 2d 에 mapping할 때 사용된다.
UV Unwraping
UV Unwraping은 3d model을 2d image로 projectoin하는 것이다. 예를 들어 다음과 같이 vertex로 구성된 3d mesh sphere가 있다고 생각해보자. 이러한 3d mesh를 traingle mesh라고 가정하고 각각을 unwraping혹은 unfold하기 위해서는 3d space의 각 vertex를 UV map의 좌표에 대응시키는 것이다. 다시 말해 UV image plne안의 coordinate로 각 vertex에 담긴 위치 및 색상 정보를 저장하게 된다. 다만, 이렇게 진행하게 될 경우 어느정도 distortion이 발생할 수 밖에 없다는 것도 알아두자. 간단히 지구본과 종이로된 지도를 비교해보면 알기 쉽다. 실제로 지구본에서 북극의 영역을 그렇게 넓지 않다. 그러나 이를 종이 지도에 projection하게 되면 엄청나게 많은 부분을 차지하는 것처럼 보임을 알 수있다.
UV mapping or Texture mapping
UV texturing은 3d mesh의 polygon들이 실제 color로 painted되게 하는 역할을 한다. 즉 vertex로만 이루어진 mesh가 아닌 실제 texture를 가지는 형태로 만들어주기 위해서 3d object에 texture를 wraping해주게 되고 이를 UV or Texture Mapping과 같이 표현한다. ( 정확히 UV mapping은 UV plane to 3D 이다. ) 이는 UV image 즉 texture image의 각 pixel을 3d mesh의 surface에 있는 polygon에 assiging하는 것으로 일반적으로 uv map의 traingular piece를 mesh의 triangle에 대응해주는 방식으로 동작한다. 실제로 각 vertext에 대해서 UV map으로 부터 texture information을 뽑아 3d에 매핑해주는 universial function이 programmable하게 존재하고 이를 활용한다.

비전 및 그래픽스에서는 Texture를 UV-map을 통해서 표현하곤 한다. 여기에서 진행할 것은 UV unwarping이다. 즉 texture extraction을 하고싶은 것이다. 그런데 이를 위해서는 3d model과 uv map간의 mapping 관계가 필요하고 ( texture mapping ) 이를 위해서는 지금 가지고 있는 single image에 대한 3d face shape model이 필요하다. 따라서 저자들은 3d shape estimator를 활용해 pseudo 3d face shape model을 만들어낸다.

그러고나서 facial UV-Texture는 input texture image를 3d model에 projection함으로써 unwarping된다. 즉 2d uv image plane과 3d face model의 vertex간의 correspondence mapping관계를 얻은 후에 실제 2d uv image plane에 담긴 texture 정보를 face에 대해서 추출해내게 되는 것이다. 이렇게 얻은 face texture를 바로 사용하지 않고, face parsing을 통해서 left/ front/ right view에서 합성된 각각의 이미지에 texture map은 view에 맞게 parsing해서 linear blending을 시켜줌으로써 더 3d aware함이 잘 고려된 texture를 얻을 수 있게 된다. ( high fiedlity라고 생각해도 될 것 같다. )

2.4. UV texture refinement

그러나 어쨋든 estimated 3d shape model은 imperfect하기 때문에 artifacts를 수반하게 되고, 특히 눈, 입, 코 근처에서 심하게 발생한다. 즉 다시 말해 3d shape과 2d image사이의 각 코나 눈과 같은 특징이 잘 align되지 않기때문에 발생하는 artifact라는 것이다. 저자들은 이를 해결하기 위해서 artifacts가 발생하는 영역을 배제하고 이렇게 missing된 region을 template texture UV map으로 채우는 방식을 취한다. 

즉 저자들은 실제로 결과를 분석하며 눈, 입, 코 근처에서 artifact가 발생함을 확인했기에 face parsing 을 통해 해당 눈, 코 입 영역을 parsing하고 해당 부분을 UV Coordinates로 unwrap한다. 그러면 우리가 얻은 texture에서 artifact가 발생하는 영역을 얻게되고 이를 지워준 후에 Template texture를 통해 남은 부분을 채워준다.

이렇게 얻게 된 Final UV-Texture map들이 FFHQ-UV다. 저자들은 ablation stdudy를 통해 위 data creation pipeline의 각 components의 중요성부터 data diversity 등 다양한 관점에서 dataset의 quality를 evalution한다. 여기서는 살펴보지 않도록 하겠다.

3. 3D Face Reconstruction with FFHQ-UV

FFHQ-UV에서는 추가적으로 GANFit논문에서 진행한 것처럼 3d face reconstruction에 대한 실험 및 메소드를 제시한다. 두 논문은 공통적으로 Texture를 Generation하는 모델을 학습하고 이로부터 만들어진 Texture를 활용해 Face Reconstruction을 하고 있다. 지금부터 해당 프로세스를 살펴보도록 하겠다.

3.1. GAN-Based Texture Decoder

FFHQ-UV에서는 GANFit과 유사하게 texture decoder를 학습시키고 있다고 하기때문에 우선적으로 GAN Fit의 Texture GAN Model을 살펴보도록 하겠다. GAN Fit에서는 Texture를 PCA를 활용해서 combinationa을 통해서 얻는 것은 facial texture가 가지고 있는 high frequency detail을 capture하지 못한다고 생각했고 이를 개선하기 위해서 GAN을 활용했다. 그러나 GAN을 사용해 Texture를 generation할 경우 발생하는 근본저긴 문제는 3d coherency가 유지되기 어렵다는 것이다. 즉 생성된 texture가 3d shape에 align이 잘 되지 않는다는 것이다. 저자들은 이를 해결하기 위해서 저자들은 per pixel alignment가 가능한 real texture의 UV Representation을 가지고 GAN을 학습시켰다. 즉 Single Image에서 추출한 Texture가 아닌 "A 3D Morphable Model learnt from 10,000 faces"(CVPR` 16)에서 사용된 10000개의 real texture를 활용했다는 것이다. FFHQ-UV에서는 StyleGAN2의 architecture를 그대로 가져와서 학습을 진행했다.

3.2. 3D Face Reconstruction

두 연구 모두 그저 Linear 3DMM을 활용해서 Shape, Expression등을 fitting하고 illumination, camera 그리고 Texture Generatoin까지를 jointly optimizatoin함으로써 Reconstruction을 한다. ( 추후에 더 적어두도록 하겠다. )