728x90
728x90
개요
- 논문 제목: Learning a model of facial shape and expression from 4D scans ( https://ps.is.mpg.de/uploads_file/attachment/attachment/400/paper.pdf)
- FLAME은 SMPL 기반 3DMM (얼굴 모델)이라고 보면 된다
- FaceWarehouse같은 3DMM과 다르게 PCA 사용. FACS 기반 blendshape은 중복적이기 때문에 더 효율적이라서 이렇게 했다고 함 (FACS 기반 blendshape은 비슷한 mesh를 다른 blendshape 조합으로 만들 수 있음)
모델
- linear blend skinning 사용
- N = 5023 vertices
- K = 4 joints (neck, jaw, eyeballs)
- 미분 가능한 함수 M으로 FLAME 모델을 요약할 수 있다
- M은 shape (사람 모양), pose (neck 같은 joint의 각도), expression (사람 표정)을 받아서 vertex들이 어떻게 움직이는지 표현하는 함수라고 생각하면 된다. 구체적인 내용은 FLAME 논문과 SMPL 참고. joint가 있기 때문에 nonlinear 모델이다 (예를 들어서 턱이 움직일 때 비선형적으로 vertex들이 움직인다). 반면 FaceWarehouse같은 논문에서는 표정과 모양에 대해서 선형적인 모델이다.
Temporal registration
- 이 단계에서는 3D 데이터를 mesh로 바꿔준다.
- 3D 데이터에 어떻게 template mesh를 fitting 하는지가 중요한 요소 중 하나다. 사실 단순히 3D 모양만 잘 맞추면 되는 것이 아니다. 이유는 3차원적인 모양은 같아도, 표면이 다른 방식으로 stretch 되어있을 수도 있기 때문이다. 예를 들어서 눈을 감았을 때 3차원적인 모양은 그렇게 많이 바뀌지 않는다. 하지만 눈꺼풀은 늘어나거나 축소하게 되고, 이런 변화는 단순히 3차원 모양만 맞춰서 모델링할 수 있는 것이 아니다. 2D landmark와 optical flow를 자주 사용한다. FLAME에서는 optical flow는 사용하지 않았지만 여러 frame에 sequential하게 fitting해서 비슷한 효과를 얻기는 한다.
- FLAME에서 우선 initial 3DMM 모델을 만들어서 3D 데이터에 (point cloud + 대응되는 multi-view 이미지) fitting을 한다. 이렇게 fitting한 mesh를 기반으로 refined 3DMM 모델을 만들고, 이 프로세스를 반복해서 최종 FLAME 모델을 만든다.
single frame registration 방법.
우선 single frame이 있을 때 여기에 모델을 fitting하는 방법을 알아보자. initial 3DMM / refined 3DMM 모델이 있다고 하자. Single frame registration에서는 3개의 단계를 밟는다.
1. 우선 3D 데이터에 맞는 모델 파라미터들을 구해준다.
- 여기서 \( E_L\)은 2D landmark와 mesh를 이미지로 projection했을 때 거리에 대한 L2 loss. 49개 landmark 사용
- \( E_P\)는 pose, shape, expression parameter (각각 \( \theta, \beta, \psi\))가 너무 커지지 않도록 해주는 L2 regularization
2. 이렇게 3DMM 파라미터들을 fitting한 후 3D 데이터에 잘 맞도록 현제 3DMM에서 3D 데이터에 더 잘 맞도록 deformation이 가능하도록 제어를 일부 풀어준다. 구체적으로 3DMM 파라미터 + template mesh T를 수정할 수 있도록 제어를 풀어준다 (이전 단계에서는 3DMM 파라미터만 fitting이 가능했다). 구체적으로 다음 loss function을 최소화한다
- \( T,\beta,\theta,\psi\)를 동시에 optimize한다
- 여기서 \( E_D,E_P\)는 이전과 같다
- \( E_C\)는 다음과 같다. 여기서 e는 edge를 의미. T가 초기 모델 M이 기술하는 범위에서 너무 많이 벗어나지 않게 제동을 걸어주는 역할을 한다.
- \( E_R\): 이것도 T에 regularization을 해주는 역할을 한다.
3. 마지막으로 photometric loss (\( E_T\))를 추가한다. 실제 이미지와 texture이 잘 맞도록 하는 loss. 이 부분은 밑에 sequential registration 설명을 보면 좀 더 이해가 될 것이다. 이 loss가 sequential registration 단계에서 일종의 optical flow 역할을 해준다.
sequential registration
- single frame registration 방법을 써서 무표정인 frame들에 대해서 template mesh T를 구하고, 평균 낸다.
- 이 단계에서 무표정인 데이터를 랜덤하게 골라서 texture map도 계산한다. 이 texture map을 기반으로 위에서 설명한 photometric loss를 계산하게 된다.
- 이렇게 계산한 template을 기반으로 single frame registration을 한다 (이때 \( \beta=0\)으로 고정한다). 각 frame에서 이전 frame에서 fitting한 값들로 모델을 초기화하고 mesh를 fitting해준다.
- 이렇게 모든 frame에 대해서 mesh를 fitting한 후 새로운 FLAME 모델을 만든다 (initial 모델을 교체). 새로운 FLAME 모델로 같은 프로세스를 반복 (총 4번 반복했다고 한다)
- FLAME 모델 만드는 방법은 논문 section 6 참고
데이터
CAESAR dataset 기반으로 shape을 학습
D3DFACS dataset& 자체 수집 데이터로 표정 학습
pose자체 수집 데이터로 pose 학습
728x90
728x90
'논문 리뷰 > face' 카테고리의 다른 글
[논문 리뷰] Few-shot Geometry-Aware Keypoint Localization (0) | 2023.08.10 |
---|---|
[논문 리뷰] HiFace: High-Fidelity 3D Face Reconstruction byLearning Static and Dynamic Details (0) | 2023.08.01 |
[논문 리뷰] Facial Retargeting with Automatic Range of Motion Alignment (0) | 2023.06.12 |
[논문 리뷰] FaceScape (0) | 2023.05.17 |
[논문 리뷰] FaceWarehouse (0) | 2023.04.27 |