Paper/Human

NeuFace: Realistic 3D Neural Face Rendering from Multi-view Images

침닦는수건 2023. 6. 30. 17:42
반응형

내 맘대로 Introduction


얼굴 한정으로 3D surface reconstruction을 할 것인데 사람 얼굴이다보니 디테일과 텍스처가 다른 대상보다 특히나 중요하다. 따라서 더 현실감있는 얼굴을 복원하기 위해서 PBR(physically based rendering), BRDF를 잘 녺여보겠다는 논문이다. 

 

메모하며 읽기


사전 배경지식으로, 빛 하나 하나를 보았을 때 BRDF로 모델링한다. 

입사하는 빛의 각도에 따라 incident radiance, Li()를 계산해주어야 하는데 이건 수식(2)와 같이 Spherical harmonics + learnable coefficient 조합으로 표현된다고 정의해서 사용한다.

BRDF, f 자체는 diffuse와 glossy reflection으로 정의했다. 사실 상 뒤에 붙은 glossy reflection은 specular term 역할이라고 보인다.

네트워크 구조는 BRDF에 필요한 term들을 뽑아내주는 Spatial MLP, normal과 SDF를 뽑아내주는 SDF MLP로 구성되어 있다. 

중간에 integrated Basic MLP는 튕겨져나가는 ray 방향을 condition으로 주기 위해 끼어들어가있는 MLP다.

그림의 (a) (b) (c)가 중요한데, (a)는 Labertian surface라면 당연히 있는 diffuse term이고 (b) (c)는 specular term이다. 

특히 (b)는 표면이 glossy해서 거의 거울 반사처럼 특정 방향으로 강하게 반사되는 specular를 의미하며, (c)는 표면 material 특성에 의해 불규칙하게 반사되는 specular를 의미한다. 
(glossy reflection이라더니 specular가 맞았다.)

specular term을 어떻게 사용했는가? NeRO와 같은 형태다. specular BRDF는 split-sum 혹은 split-integral로 approximation하는 것이 일반적인가보다. 똑같이 수식(5)와 같이 approximation해서 쓴다. 
그림에서 (c)에 해당하는 표면으로 인한 불규칙 specular를 모델링하기 위한 내용이다. 수식(5)의 앞부분 integral에 해당한다.

반사각 일체에 대해서 integral해줌으로써 specular를 계산해야하지만 구현 상 이슈로 finite한 개수로 나누어 주어야 하므로 수식(7)과 같이 k개 반사각만 합치는 식으로 간소화했다. 최종적으로 수식 (6)은 수식 (8)로 정리된다.

여기서 BRDF bases, b도 learnable 이기 때문에 예측을 해주어야 하는데 이것은 Integrated Basis MLP를 붙여서 예측한다. 

반사각을 입력으로 받아 이에 맞는 basis function을 내어주는 MLP다.

그림에서 (b)에 해당하는 내용으로 특정 방향으로 강하게 반사되는 specular를 표현하는 부분이다. 

glossy surface는 거울 반사처럼 입사각과 대칭인 방향 위주로 강하게 튕겨나가는 경향이 있기 때문에 3D normalized Spherical Gaussian distribution으로 모델링할 수 있다고 한다
(뭔소린지 모름. 그러나 대충 입사각과 대칭이 반사각을 기준으로 Gaussian 형태로 튕겨져 나간다는 가정이라고 이해했다.)

그리고 이 모델링을 구현하기 위해서 조금 증명과정으로 거치면 수식(12)까지 간다고 한다. 
(증명은 supplementary에 있다는데 안 봤다. 봐도 이해 못할 것 같아서)

이로써 specular term이 다 정리되었다. 

이젠 diffuse term인데 이전에 SH쓰고 split-sum approximation하고 이러쿵저러쿵 했을 때 수식(13)과 같이 정리되는데 여기서 시작한다.

여기서 integral은 구현 상 적합하지 않은 기호이므로 알 수 없는 approximation으로 한 번 더 줄여준다고 한다. (알 필요까진...)

그래서 수식(16)으로 최종정리해서 사용했다. 
SDF network는 단순하게 알고 있는 SDF를 내뱉는 MLP인데 그냥 학습하기 보단 ImFace라는 논문에서 학습된 MLP를 뗘온 다음 finetune하는 식으로 썼다고 한다.

사실 상 D(x)만 학습하는 것이다.

Volume rendering 네트워크 학습할 때 효율을 증가시키는 방법 중 대표적인 것이 ray에서 point sampling을 어떻게 하느냐에 해당하는 부분이다.

일단 현재 ray에 대해 표면을 찾는다.

표면을 찾았다면 +- 0.5mm 해당하는 영역에서 32개의 점을 뽑아 사용하는 식으로 표면 위주로 sampling하도록 했다.

표면을 못찾는다면 ImFace에서 사용했다는 방식인데, 아래 그림에서 빨간 원처럼 대충 정해진 간격으로 약간 sampling 하고 해당 위치 기점으로 가장 가까운 표면까지 거리를 반경으로 다시 한 번 더 sampling하는 식으로 했다. 



추가적으로 카메라 마다 화이트밸런스나 미묘한 색감 차이가 있을 수 있는데 이것을 커버하기 위해서 입력 이미지를 받을 때 시점마다 아주 얇은 MLP로 mappling해주고 쓴다고 한다.

loss는 앞서 열심히 만든 diffuse term과 specular term에 해당하는 부분이다. 

volume rendering이니 color loss는 당연히 있다.

geometry loss는 eikonal loss 그리고 ImFace에서 사용한 loss를 포함한다. D(x) loss는 residual이니 너무 크지 않도록 억제하는 기능이다.
반응형