Paper/3D vision

Multi-View Mesh Reconstruction with Neural Deferred Shading

침닦는수건 2024. 4. 22. 19:26
반응형

내 맘대로 Introduction

 

이름 그대로 deferred shading을 neural network로 대체한 것이다. deferred shading이란 내용 자체는 geometry -> rendering 과정에서 pixel 값을 직접 계산하는 것이 아니라 geometry -> position,normal,depth -> rendering 순서로 계산하는 방식을 말한다. 직접 바로 계산하는 pixel shading과 달리 중간 산물을 만들고, 중간 산물로 shading을 하는 식으로 "지연"시켰다는 의미로 deferred shading이라고 불린다. 

 

이 내용을 가져와서 multiview image에서 geometry를 만들어내는데, estimated geometry -> position, normal, depth -> shading (<-> loss) 라는 과정이 위 언급한 deferred shading과 동일하기 때문에 neural deferred shading이라고 명명한 듯 하다.

 

핵심 내용은 multiview reconstruction을 최적화 방식으로 수행하는 논문이다. differentiable rasterizer를 활용한 논문들하고 거의 유사한데 normal, depth까지 이용한다는 차이점이 있다고 보면 된다.

 

(다 읽고 보니 differentiable rasterizer + NeRF MLP + shading 붙인 내용)

 

메모


1) 이미지, mask, Mesh (rough init) 들이 입력, geometry 복원만 목표

2) diff. rasterizer(Mesh)로 rendered mask 생성, mask 비교

3) mesh vertex, rendered normal, view direction 입력으로 하는 NeRF MLP 학습, rendered rgb <-> rgb 비교

gradient 흘려보내면 geometry가 변한다.

position,x가 업데이트 되면 diff.rasterizer에 의해 normal을 자동계산.

앞의 mesh to rasterized mask, normal 부분들을 기존 diff.rasterizer를 썼기 때문에 생략된 것 같다.

이어 따라 붙는 NDS 설명이 되어있는데 사실상 NeRF MLP랑 완전히 동일하다. 

position 들어가고, 중간에 normal, view direction 받아 rgb 찾는 순서.

결과 값은 pixel로 shading할 때도 NeRF랑 사실 상 동일 (NeRF가 애초에 shading 방식을 따르니까 동일한 것 같음)
사용하는 cost function은 수식(2)와 같은데 핵심은 저 안에 들어가는 geometry, G도 updatable 상태라는 것이다. 

입력이지만 gradient가 흘러들어가기 때문에 업데이트 됨.

앞의 appearance cost는 rgb l1 loss, mask l1 loss다.

masked image 간의 cost를 구할 수도 있었는데 (I*M <->I'*M')

이 방식은 gradient 계산이 가벼운 mask를 계산이 무거운 이미지랑 엮어서 연산량을 늘릴 필요가 없다고 판단해서 그랬다고 한다.

즉, 연산량 증가 때문에 분리.


수식(2)와 같이만 디자인하면 mesh vertex가 발산하듯이 변할 것이 뻔하다.

그럴 듯한 mesh vertex 변형을 유지하기 위해서 regularization 필수

1) laplacian cost : 2차미분 값이 0에 가깝도록, 변화가 완만하도록 억제, 부드러운 표면 강제함

2) normal consistency cost : 비슷한 맥락으로 서로 같은 face를 구성하는 vertex끼리는 normal이 같도록 강제함. 부드러운 표면 강제.

----------------
개인적인 생각이지만 smooth surface를 강제하는 regularization이 2개나 걸려있기 때문에 각진 물체 복원에 불리할 것 같다. 

혹은 안이 파여있어 곡률이 심하게 변하는 물체에 불리할 듯.
최적화 팁은, 처음부터 face 많은 mesh로 시작하면 잘 안되니 최적화 과정에 비례해서 face를 쪼개 점점 dimension이 높은 mesh로 변형시켜가며 최적화 하는게 좋다고 한다.

face subdivision 하는 듯.
반응형