Paper/Human

Reconstruction of Personalized 3D Face Rigs from Monocular Video

침닦는수건 2024. 7. 10. 13:36
반응형

내 맘대로 Introduction

 

개인적으로 또 역작이라고 생각하는 논문을 발견했다. 2016년 ACM에 게재된 논문이라 오래 되긴 했지만 그 깊이와 성능은 오히려 요즘 쏟아져 나오는 논문들을 부끄럽게 만들기 충분한 수준인 것 같다. 이 당시에는 디테일을 설명하지 않아도 모두가 이해하고 수준이어서 그런지 디테일이 빠져있어, 조금 논문이 어렵게 느껴지지만 그럼에도 불구하고 아이디어가 좋다는게 느껴진다. 

 

monoculde video로 부터 animatable head를 복원해내는 논문인데, 위 사진에서도 볼 수 있다시피 주름까지 잡아내는 정확도를 자랑한다. 더 대단한 건 딥러닝 한 방울도 들어가지 않은 최적화로 푼 논문이라는 점.

 

핵심 아이디어는 coarse-medium-fine 3 layer를 이용한 3단 복원이고 각각 3DMM fitting - update - refinement 과정을 담당한다. 요구되는 수학이 많아 정확히 이해하지 못했으나, 다음에 다시 읽을 때 빠른 따라잡기를 위해 메모를 남겨둔다.

 

위와 같은 표현들도 좋았다. 그냥 VR/AR 어쩌구 하면서 칸 채우기용 introduction보다, 조금 더 문제를 제대로 인식하려는 표현들이 섞여있는 introduction.

 

*200번째 논문 기록

 

메모


0) 2D 66 landmark detection + refinement (detail 안 나와있음.)

1) 3DMM 갖고 generic model fitting (shape, expression, light, albedo)

2) Manifold harmonic을 이용한 mesh update + albedo update

3) deformation gradient 를 이용한 detail update.

----------------
논문 구조가 재료를 소개하고, 방법을 소개하고, 디테일을 설명하는 순서다.

생략도 많아 조금 불친절하다고 느낄 수 있으나, 이 논문에서 생략이 많다고 느끼는 것은 내가 멍청하다는 뜻이므로 부끄러워 하는게 맞는 것 같다.



먼저 입력 비디오를 촬영한 1대 카메라의 intrinsic와 head pose를 풀어둔다. 

2d keypoint를 갖고 SfM 도는 것인데, 변화하는 2d keypoint를 갖고도 sfm을 풀 수 있는 이유는 3D model parameter도 같이 풀기 때문이다. 

reprojected 3d model keypoint와 2d keypoint가 맞아떨어지도록 강제하기 때문에 수렴할 수 있다. 

안그러면 2d keypoint 는 deform되므로 수렴 안함.

3DMM model fitting으로 문제를 풀어나가기 때문에 모든건 vertex 단위로 정의되어 있음.

vertex 별로 색상을 정의할 때 

1) albedo, c (reflectance) 1개
2) SH, b ( irradiance) 27개
3) normal, n 3개

로 정의함
가장 첫단계인 coares level은 기존 3DMM fitting 과정이다. 

이 때 사용한 과거의 모델은 지금의 faceverse와 비슷하다

shape parameter와 동시에 색상(albedo, reflectance)까지 담고 있는 모델이다.

따라서 shape, alpha / reflectance, beta로 정의되어 있고 원리는 PCA다. 

여기에 표정 정보를 추가해야 하므로, expression parameter, delta를 추가했다고 한다.

이 때 delta에 해당하는 PCA는 facewarehouse 데이터에 피팅한 결과로 만들었다고 함.

따라서 최종 alpha, beta, delta로 정의되는 3DMM

지금으로썬 FLAME+ texture 혹은 유사 faceverse라고 보면
될 것 같다. 

(faceverse는 shape과 expression이 합쳐져 있으므로 엄밀히 말하면 조금 다름)
3DMM fitting이 끝나서 coarse level이 완료된 이후에

alpha, beta, delta는 고정.

그리고 추가로 surface displacement(여기선 corrective)를 만들어 내는 작접을 한다. (medium level)

그 방식은 manifold harmonics를 사용한 방식

나도 이게 뭔지 정확히 모르는데 대충 직관적으로 이해하면, mesh 형상을 표현할 때 사용되는 일종의 basis집합이다. 

이 MH의 coefficient를 찾으면 mesh 형태를 알 수 있는 것. 마치 SH를 사용해서 color를 표현하는 것과 비슷한 원리.

MH를 이용하면 디테일까진 아니지만, mesh 표현할 때 사용하는 basis를 활용해서 업데이트하는 것이므로 조금 더 디테일한 부분을 잡을 수 있개 된다. 

--------------------
MH를 이해하려면 너무나 많은 것을 이해해야 하기 때문에 포기했다. differential manifold, riemann manifold까지 가야 한다.
---------------------
따라서 그냥 이해하길, MH basis는 주어졌고, 그 coefficient인 tou를 최적화로 찾아주는 것.

최적화 energy function은 나중에 나옴.


마지막 fine level detail은 이미지 1장 1장과 비교해가면서 최종 fine detail을 찾아내는 단계다. 여기서 주름을 잡아낸다. 

그 방법은 mesh face마다 deformation gradient를 이용하는 방식이다.




face 단위로 변화 전 후 3개 vertex가 만들어내는 jacobian을 뜻한다. 

이미지와 photometric consistency를 계산하는 과정에 이 jacobian을 계산해내고, 이 jacobian 방향대로 surface를 추가로 더 움직여주는 느낌.
최적화 순서는 fine detail 전까지 먼저 풀고, fine detail은 전부 다 고정하고 마지막에 풂.
energy function, 즉 loss 는 어쩔 수 없이 photo-consistency 밖에 없음. 정보가 이미지 밖에 없기 때문에 이미지갖고 풀어야 한다. 

현재 복원된 3D 모델을 이미지로 내려찍었을 때 각 이미지와 얼마나 유사한지 비교하는 data term과 각 파라미터가 neutral 값을 크게 벗어나지는 않도록 억제하는 prior term으로 구성되어 있다. 

delta, expression param.의 경우 0~1 범위로 한정짓는 prior도 추가.


3D 모델을 이미지로 내려찍었을 때 color 비교를 기본적으로 하고, 2d keypoint가 있으므로 이것도 사용함

현 3D 모델의 expression 파라미터만 바꿔가면서 렌더링을 하고 2D keypoint를 찾는다. 이걸 back project해서 3D keypoint를 찾아 사용함. 




이 때 사용한 모델은 gaussian mean, std로 정의된 parameter를 사용했기 때문에 std 대비 각 파라미터가 너무 크지 않도록 억제

요즘 크기 0으로 보내는 regularization하고 동일한 효과.

meidum level에서 찾아내는 새 파라미터 tou는 크기만 억제할 뿐 아니라, 이전 값과 temporal consistency를 유지하도록 강제함


expression은 크기 억제 + 0~1 값으로 억제



pose 먼저
3DMM 기본 파라미터 먼저
Manifold harmonic 파라미터 먼저


-> 여태까지 결과를 갖고 albedo update (pixel average)

albedo 바뀌었으니, pose, expression만 다시 풀어주고

포즈랑 manifold harmonic 다시 한번 풀어주고

최종적으로 fine detail 찾기.



마지막 단계는 모든 파라미터 고정하고 직접 point를 움직여서 이미지랑 맞도록 하는 fine detail.

이 부분은 shading을 쓴다고 표현할 수 있다. 앞서 계산한 face deformation gradient의 크기가, photo consistency 향상을 위해 발생하는 gradient 크기랑 유사하도록 하면서 face 를 업데이트하는 방식이라 그럼. 컨셉이.
이 때  expression 파라미터를 활용함.

그 이유는 이렇게 엮어서 풀어야 나중에 표정 변화시킬 때 기존하는 방식 그대로 3DMM expression 파라미터만 갖고 풀 수 있기 때문.

따라서 입력은 이미지들과 expression 파라미터다.

fine detail을 업데이트할 때 medium level, tou도 같이 풀어줌. 

tou의 표현력도 끌어올려서, fine detail p는 정말 최후의 residual만 계산할 수 있도록 도와줄 의도인 것 같음

-----------------
최적화 방법은 다음과 같다.

expression parameter를 모든 시간대다 모아서 row 방향으로 쌓음-> 전체를 한 번에 봐야 공통된 fine detail 찾을 수 있으므로.

1) medium level 먼저 업데이트할 때 H = tou 전체로 설정

수식 (18)을 풂. 그리고 tou = X* expression 파라미터로 업데이트
-> 이게 무슨 효과인지 잘 모르겠음
-> manifold harmonics의 물리적인 의미를 알아야 이해 가능하므로 패스

2) fine level 업데이트할 때 H = face deformation gradient로 설정

수식 (18)을 똑같이 풂.
-> expression parameter들을 어떻게 조합 변형해야 deformation gradient와 일치할지 expression <->gradient 간의 변환 관계 학습.

이 변환 관계 X를 각 expression parameter에 곱한 뒤, p=X*delta

이 p가 의미하는 transformation matrix를 vertex 단위로 찾아냄.
-> 이동
-> fine detail 업데이트 되는 것
---------------
이렇게 밖에 이해 못해서 아쉽다. ㅋㅋㅋ...

과정이 복잡하지만 1장 처리하는데 시간을 재보면

0.03s + 1.5s + 40s + 15s + 9s + 110s

CPU 치고 완전 무난한 듯.


결과 깡패.
빛 반사 때문에 실패. 

sequence가 너무 짧으면 실패, 입모양이 너무 다양하면 모델 subspace의 한계로 실패
반응형