Paper/Human

High-Quality Facial Geometry and Appearance Capture at Home

침닦는수건 2024. 7. 31. 16:50
반응형

내 맘대로 Introduction

 

SDF + BRDF NeRF. 디테일이 추가된 차이가 있지 큰 그림에서는 기존 NeRF를 활용한 논문. 하지만 데이터 취득을 플래쉬를 켠 휴대폰으로 독특하게 설정한 점이 돋보인다. 조명을 다루는 것은 세팅이 워낙 필요해서 일반 사용자가 하는 것은 거의 무리라고 여겨졌는데, 핸드폰 조명을 이용했다는 점이 인정받은 것 같다. 내가 생각해도 좋은 시도인 것 같다.

 

휴대폰으로 25초 정도, 어두운 공간에서 플래쉬를 켠 채 영상을 촬영하는 식이다. 이 때 25초 정도 같은 표정을 최대로 유지해야 한다. 이부분이 좀 맹점이기 때문에 전체 성능이 조금 낮아졌을 듯 하다.

 

메모


어두운 공간에서 플래쉬 켠 채 25초 정도 자기 얼굴을 최대한 같은 표정을 유지한 상태로 촬영한다. 

크기만 적당하게 줄인 뒤, agisoft를 이용해서 calibration (initial mesh도 찾을 수 있으니 좋은 초기화)

정겨운 agisoft...
얼굴을 복원할 때, 눈알과 나머지로 나눈다.

그 이유는 BRDF를 추정하긴 하지만 눈알은 specularity가 피부와 다르므로 통째로 학습하면 성능이 나쁘기 때문.

따라서 눈은 sphere mesh + fixed specularity로 미리 설정해두고 눈 제외한 피부를 주 타겟으로 선정했다. 

---------------

눈은 사전에 사람이 위치와 크기, specularity를 지정해준다. 손으로 어떻게 했느냐? 라고 생각할 수 있는데 내 생각엔 agisoft 결과 mesh 보고 눈알을 대충 갖다 붙인 것 같다. blender같은 툴 가지고.



이름을 mesh aware에서 눈알 aware로 바꿔야 한다.

sdf, diffuse, specular, roughness를 추정하는 NeRF가 핵심인데, 이 과정에서 query point를 던져줄 때, 눈알 mesh로부터 계산한 값과, NeRF가 뱉은 값 중 선택하도록 했다. 

눈알에 가까우면 사전 선정된 눈알 specular, roughness, sdf를 대신 쓰도록 했다. (확실히 눈알은 독립적으로 배울 듯)



눈알 vs 나머지 중 선별된 sdf, diffuse, specular, rougness는 뒤로 와서 수식 (6)과 같이 조합되어 최종 색상으로 만들어진다. 

이 때 조명값이 필요한데, 조명 intensity L은 미리 정해둔다.

그리고 조명의 위치는 카메라 위치와 동일하다고 가정해서 ray direction이나 normal을 그대로 쓸 수 있게 했다. (이게 문제를 단순하게 만든 핵심인듯)
NeRF를 구성하는 sdf net, brdf net 그리고 휴대폰 조명 SH를 표현하는 parameter K가 학습 대상이다. 
-----------

NeRF니까 결국엔 photometric loss가 핵심이고 sdf를 사용하므로 eikonal, mask loss 정도 따라 붙는다.

이렇게 하면 눈알을 따로 처리했음에도 살짝 눈알 부분 geometry가 조금 안 맞음. 

그래서 OjbectSDF++에서 나오는대로 occlusion 반영한 mask rendering 하나 만들고

segmentation network 통해서 2D image 상에서 눈알 mask 찾아가지고 서로 같도록 추가 regularization을 했다. 

눈알과 피부가 적절하게 서로 위치하도록 조정되는 효과

----------------------
마지막으로 아까 조명 L 값을 사전 지정했기 때문에 실제 조명 값과 차이가 분명히 있다. 

scale ambiguity가 있으므로, learanable scale factor, k 를 둬서 loss에서 ambiguity를 알아서 풀도록 설계했다.
 
반응형