Paper/Human

3DGH: 3D Head Generation with Composable Hair and Face

침닦는수건 2025. 8. 6. 10:56
반응형

내 맘대로 Introduction

GGHEAD, GSGAN, CSG-GAN을 보면서 아무것도 없는 pointcloud에서 시작할 것이 아니라 UV가 됐든 mesh가 됐든 머리통을 초기값으로 시작하면 훨씬 잘될텐데 라는 생각으로 한 번 뭐 해볼까 싶었는데 찾아보니 바로 있었다. 역시 사람 생각하는 것 다 똑같고 빠르다. 이건 심지어 메타에서 인턴이 쓴 것이라 퀄리티가 높음.

 

핵심은 UV texel 별로 3DGS를 generation하는 3DGAN을 학습시킨 것. 이 때 face에 해당하는 UV map 외에 hair 파트에 해당하는 UV map을 추가로 디자인해서 따로 따로 생성할 수 있도록 했다는 점. 결과적으로 같은 얼굴에 다른 헤어스타일을 만들어낼 수 있게 된다. 

 

구현적으로 Neural Jacobian field를 활용한 surface regularization이나, PCA로 hair template mesh를 만들어서 활용한 점이 눈에 띈다.

 

메모

기본 표현법은 다른 것들과 같음 UV texel 별로 gaussian primitives 총 13개 차원을 예측한다. 색상을 RGB로만 해서 13차원

UV map 해상도는 256 256으로 대략 13만개 GS가 생성된다고 함.

얼굴+헤어스타일을 하나로 안하고 얼굴  / 헤어 스타일 따로따로 할 거기 때문에 기존 대머리 template mesh 외에 hair template mesh를 만들었다. 

displacement로 구현할 수도 있지만 자유도가 너무 높기 때문에 생성 퀄리티를 염려한 것 같음. displacement 한 해서라도 초기값을 강하게 만들어줄 무언가를 생각하다가 template mesh를 그냥 만들자는 생각으로 이어진 것 같다. 

1) Multivew calibrated setting에서 hair mesh를 취득
-> 사람을 찍은다음 얼굴을 파내는 식의 전처리를 했을지 아니면 가발 같은걸 따로 찍어둔 걸 활용했는지 모르겠지만 저자에 남길주 박사님이 들어있는 걸로 봐서는 헤어 데이터셋이 따로 있었을 것이라고 생각된다. 

2) 여기서 hair template mesh 피팅
-> 넙적한 호떡 모양으로 만들어서 썼지 않을까. 

3) 변형이 워낙 심한 애들이기 때문에 단순히 laplacian 정도로는 제대로된 피팅이 힘들었을 것
-> NJF에서 사용한 poisson solver랑 J jacobian matrix를 활용해서 억제하면서 피팅했다고 함
-> 이 아이디어 좀 좋은 듯 NJF 다시 봐야겠다. 



총 283개 registered mesh를 얻은 뒤 32개 linear basis로 표현되는 모델을 만듦.
구조적으로는 pseudo GT를 공급하는 역할의 PanoHead가 독립적으로 존재하고, 

styleGAN2 generator + dual discriminator (EG3D)가 달려있는 구조 

face latent에서 face UV map 그대로 채우고

hair latent에서는 바로 hair UV map을 뽑는 것이 아니라 중간에 hair linear coefficient regression 한번 뽑아주고, face latent랑 같이 나머지 residual을 채워주는 구조

왜 굳이 hair latent할 때 face도 관여하느냐. 사람 인상마다 할만한 머리가 있기 때문에 (예를 들면 할머니가 레게머리를 자주하진 않으니) face latent가 어느정도 가이드를 제공한다는 가정. 






hair generator의 경우 입력은 당연히 hair latent고 

face latent가 중간에 cross attention으로 끼어들어가는 구조.

다른 3DGAN과 다르게 panohead를 psedoGT로 활용하기 때문에 직접 reconstruction loss가 있다. 

image랑 mask가 panohead 결과물과 일치하도록 loss

추가로 생성된 3DGS를 렌더링할 때 hair 부분과 face 부분이 나뉘어있으니 hair mask를 생성할 수 있는데 이게 panohead 결과물과 일치하는지도 비교 
-> hair 영역이 hair답게 잘 있도록 유지시켜줌 영역을. 

mesh 버전도 있는 이유는 hair emplate mesh를 중간에 추정하기 떄문에 template mesh로만 hair mask를 만들었을 때도 잘 나오도록 해야 template mesh regression 파트에 피드백을 줄 수 있음

이렇게 안하면 hair template mesh에서 널찍이 떨어져서 수렴해버릴수도 있으니까.
3DGAN 수렴시키기 어려운거야 유명하니 regularization 텀들이 빠질 수 없다. 

기본적으로 position들은 residual 형태로 유지했으며 모두가 0에가깝도록 억제당한다. mesh surface에서 멀리 떨어지지 않도록

그리고 scale도 적정 범위 안으로 머물도록 억제

너무 작은 값들은 l1 loss로 바로바로 피드백
너무 큰 값들은 l2 loss로 증폭 피드백


이 쯤 되면 panohead가 대단한걸까 이게 대단한 걸까. 3DGS 힘이기도 한데 실제 geometry랑 일치하지 않아도 좋은 렌더링을 만들어낼 수 있으므로 hair 파트는 대략적인 형상만 잘 잡는다. 
mesh를 쓰는게 효과적이긴 하지만 표현법 자체가 hair를 mesh로 표현하기엔 한계가 있으므로 긴머리일 경우 뒷통수가 좀 깨진다고 함.
반응형