Paper/Human

HeadCraft: Modeling High-Detail Shape Variations for Animated 3DMMs

침닦는수건 2024. 12. 27. 13:17
반응형

내 맘대로 Introduction

 

NPHM이 고가의 레이저 스캔 장비로 기존 데이터셋과 다르게 머리카락을 포함한 데이터셋을 공개한 것에서 출발해서, FLAME 모델에서 부재하는 hair 표현력을 보강한 논문이다. 한마디로 FLAME에 갖다붙일 수 있는 hair 모델이다.

 

핵심 아이디어는 3D SCAN - registered FLAME = displacement를 학습 데이터로 사용해서 displacement generative model을 만든 것. 요즘 대세인 UV domain representation을 사용해서 displacement를 2차원으로 다루었다는 것도 눈에 띈다. (확실히 요새 UV가 대세인 것 같다.)

 

2D UV 도메인으로 오는 순간 CNN의 spatial inductive bias를 누릴 수 있으니 인접할수록 값이 비슷한 시나리오에 잘맞는다. 확실히 장점이 명확한 듯.

 

아쉬운 점은 얼굴 영역에 대한 표현력은 없다는 것. 오로지 hair다. 논문에서는 구체적으로 얼굴 영역을 다루진 않는데 얼굴을 포함하는 순간 경쟁 상대가 너무 방대해져서 scope를 줄이기 위해 의도적으로 안한 것 같다. 

 

메모

1) 3D scan <-> FLAME 간에 registration 정확하게

2) displacement 값 계산 -> UV domain unwrap

3) styleGAN2 학습

4) FLAME에 V+D로 변형

1) FLAME rigid fitting

2) FLAME subdivision 

3) FLAME non rigid fitting + displacement 최적화

only hair region이라고 적혀있음 <-얼굴은 registration 믿고 간다는 것이고 실제 inference할 때도 얼굴은 알아서 찾아왔다고 가정하는 것.

-----
chamrfer distance + laplace가 핵심 최적화 텀이고 (원래 하듯이)

FLAME edge lenght에서 크게 벗어나지 않도록 억제 (역시 smoothness 강조하는 듯)
   


나도 해봐서 아는데 이렇게 심혈을 기울여도 잘 안된다. 특히 머리카락처럼 두피에서 멀리 벗어나야 하는 경우, regularization을 걸어두면 잘 못 찾아감.

따라서 최대한 non rigid fitting 한뒤에 normal 방향으로만 방향으로 제한하고 한 번 더 displacement는 더 찾아줬다. 

이 때는 변형량이 적을수록 안전하니까 weight를 낮춰서 최적화



UV 로 unwrap. 참고로 uv는 기존 flame UV mapping 대신 직접 다시 정의해서 했다고 함

기존 UV map은 안면에 집중하다보니 뒷통수, 측면이 엄청 낮은 해상도로 표현됨. (왜곡도 커서 구겨져 있음)

뒤통수가 더 잘보이도록 front, back으로 나누어서 함 ( 뒤통수가 핵심)

 


데이터가 완성된 이후에는 StyleGAN2 사용

1) 적은 데이터 상황에서 훌륭한 generative model
2) UV domain으로 옮겨왔으므로, 2D 모델이 좋음


이것도 경험해보니가 엄청 큰 문젠데, 머리통이 3D인데 2D UV map으로 쪼개는 순간 지구본을 세계 지도로 펼칠 때 발생하는 문제처럼 왜곡 + 불연속 문제가 생긴다.

이게 UV map에 그대로 드러나는데 CNN을 처리한다면 해당 경계부분에서 갑자기 값이 튀기 때문에 학습에 악영향을 줄 수 있음

-> 따라서 불연속이 발생하는 경계 부분을 dilate하듯이 주변 값으로 채워넣어줌
-> CNN이기 때문에 알아서 smooth하게 배우길 기대함.

얼굴 말고 머리만 봐야한다.


stylgeGAN이 좋단 소리.


기존 FLAME uv map 쓰면 측면/뒤통수가 왜곡이 심하고 해상도도 낮기 때문에 잘 안되는 걸 실험적으로 보여준 것. 
-> FLAME에 정수리 부근으로 3갈래로 쪼개지는데 그게 그대로 드러남.


animatable하다고 하는데, 얼굴 부분은 그대로 FLAME 쓰는 것이고 머리는 표정에 따라 안보이니까 그냥 FLAME <-> hair가 decouple 되어있다는 것만 보여주는 듯.

stylgeGAN이 좋단 소리 22


얼굴은 주어진 데이터에 registration 한 것. 모델에서 찾은 것 아님. 역시나 hair만 봐야 한다.



자꾸 얼굴이랑 같이 보여줘서 헷갈리는데 >>

얼굴은 per-vertex interpolation한 것이고, 

머리는 latent에서 interpolation해서 더한 것.

반응형