Paper/Human

Preface: A Data-driven Volumetric Prior for Few-shot Ultra High-resolution Face Synthesis

침닦는수건 2024. 7. 8. 11:48
반응형

내 맘대로 Introduction

 

제목 그대로 2~3장 갖고 4K 해상도 NeRF 학습시키는 방법. 핵심 아이디어는 사람 1450 명으로 사전 학습시킨 prior model, NeRF를 초기값으로 쓰는 것. 초기값이 엄청 정확하게 잡아주기 때문에 4K 이미지 몇장으로 튜닝만 하면 큰 노력없이 위와 같은 결과를 얻을 수 있다고 보여줬다. 

 

어떻게 보면 head NeRF foundation model급 초기값이 존재하면 문제가 쉬워진다고 보여준 것. 역시 데이터, 데이터, 데이터.

 

그나저나 이 논문 쓰려고 1450명이나 스캔 뜬 건 아닐텐데, 무슨 일을 하려고 스캔 떴을까 궁금하다.

 

메모

그냥 무식하게 2~3장으로 학습하면 당연히 overfitting 돼서 novel view synthesis가 안된다. 왼쪽 그림처럼

하지만 위 그림처럼 엄청 많은 사람 이미지로 사전 학습해둔 (identity conditioned) 모델이 있다면 이걸 초기값으로 써서 돌파할 수 있다고 보여준다.
구체적으로 보면 3 단계임

1) low resolution + identity conditioned NeRF를 1450명 갖고 사전학습함. 

2) prior model freeze해두고, identity condition을 inversion으로 찾아냄

3) identity condition 고정한 채, prior model finetuning.




MipNerf 360을 기본 구조로 차용. loss도 차용

다만 unbound space가 아니므로 공간을 압축하는 내용은 뺌. 

identity를 표현하는 latent vector 하나가 모든 단계 feature에 concat으로 추가되는 형태로 condition 추가.


해상도는 512 768 세로가 길다.
카메라는 당연히 사전에 캘리브레이션 해뒀고, 3D keypoint도 2D keypoint triangulation으로 찾아뒀다. 

캘리브레이션을 마커보드 놓고 하는게 아니라 keypoint 이용해서 했나봄.


굳이? 더 정확하게 해둘 수 있는데 라는 생각이 든다.
prior model 학습이 완료된 후, high resolution으로 tuning할 이미지가 주어진다면,

이 새 이미지(새 사람)에 해당하는 identity latent가 뭔지 찾아내야 한다. 

prior model이 갖고 있는 identity latent space 내에서 새로운 사람을 표현하는 가장 가까운 latent를 찾아내는 것.

-------------
prio model freeze 하고 identity latent를 learnable로 열어두어서 찾는다.  inverseion하는 것.

이 때 새 이미지는 4k 이미지이므로 이미지 전체를 하면 당연히 터진다. 따라서 patch 단위로 이미지를 잘라서 loss를 줄여나가는 식으로 최적화 한다.

512 768 patch 사용.



그리고 나서는 4k 이미지 몇 장 가지고 fine tuning 

이 때 normal smoothness나 parameter regularization 추가 함.




대머리면 대머리지 I don't have any hair ... 너무함 ㅋㅋ 


예시 사진은 위와 같고 1450명이나 찍었다. 


데이터가 깡패긴 하다.
반응형