반응형
내 맘대로 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를 알아서 풀도록 설계했다. |
반응형