Paper/3D vision

VOXURF: Voxel-Based Efficient and Accurate Nerual Surface Reconstruction

침닦는수건 2023. 6. 23. 15:12
반응형

내 맘대로 Introduction

성능이 좋은 SDF based surface recontruction 알고리즘 NeuS와 속도가 빠른 Voxel grid based surface reconstruction 알고리즘 DVGO를 어떻게 합칠까 고민한 논문이다. NeuS류 알고리즘의 고질적인 문제가 느린 수렴 속도인데 수 시간이 걸리는 것을 수십분으로 어떻게 축소할지 그 방법을 설명한다. 단순히 Voxel grid 표현법에 NeuS SDF 수식을 갖다 붙이면 잘 안되는데 그것을 어떻게 해결했는지가 핵심인 논문

 

메모하며 읽기

Introduction을 읽어보면 NeuS와 DVGO 각각의 문제점인 속도와 성능저하를 지적하고, 이를 해결하기 위해 두 개를 naive하게 섞으면 어떻게 되는지 보여준다. 그림에서 보듯이 시간 감소는 눈에 띄지만 성능 저하가 해결되지 않는 것을 볼 수 있다. 단순히 섞으면 안된다는 결론이다.

본격 알고리즘 연구 전에 분석을 먼저 해보았는데, 조명 변화가 색감 차이가 심한 경우에는 알고리즘의 coarse shape 복원 성능이 많이 떨어지게 된다. 이 문제를 완화하기 위한 핵심 요소는 SDF feature라는 것을 확인했다. (a) (c) / (b) (d)를 보면 feature 유무 차이로 큰 결과 차이가 보이는 것을 알 수 있다. 


조명 변화나 색감 차이가 적고 텍스처 변화가 일반적인 수준인 경우, surface normal의 영향이 크다. (b)를 보면 SDF feature가 없음에도 normal 만으로 복원이 어느정도 잘되기 때문이다. 정리하면 이미지가 난잡하면 SDF feature가 중요, 무난하면 normal이 중요하다.
위 분석은 Voxel grid 기반 방식을 사용해서 비교한 것인데, 전반적으로 surface가 feature를 쓰든 안 쓰든 noisy한 것을 볼 수 있는데 voxel grid 기반 기법이 갖고 있는 고질적인 문제라고 한다. spatial coherence가 떨어진다는 말로 적혀있는데 국소적으로 trilinear interpolation을 해서 쓰다보니 조금 거리가 있는 feature들이 반영이 안되는 문제를 말하는 것 같다. 그래서 local minima에 빠지기 쉽다는 것 같고.

위 분석에 따라 나누어 2스테이지로 학습한다. 첫번째는 coarse shape, 두번째는 fine detail이다. 첫번째에선 SDF feature 강조해서 대략 모양 잘 잡고 두번째에서 normal써서 디테일을 잡으려는 듯? 

1단계에서 대충 타원 모양 zero level set으로 초기화해주고, Voxel feature를 사용해서 V sdf를 예측한다. 그냥 일반적인 방법인 듯. 다만 결과 V sdf에 gaussian kernal을 씌워서 smoothing한 값을 사용한다.  

2단계가 핵심인 것 같은데 color network를  2개 써서 문제를 잡으려는 것 같다. Voxel grid가 spaital coherence가 부족하지 geometry feature를 새로 하나 만들어서 이 geometry feature를 써서 만든 color와 그냥 일반적으로 neus에서 만드는 color를 2개를 써서 보완하는 듯 하다.
geometry feature는 기준 point가 있으면 상하 좌우로 1칸 범위 내에서 trilinear interpolation하는 것이 아니라 2칸씩 상하좌우, 3칸씩 상하좌우 이런 느낌으로 더 멀리 있는 값 갖고 trilinear interpolation해서 쌓은 값이다. stride가 변하는 interpolation이라고 보면 될 듯. SDF와 normal 값을 대상으로 이 연산을 진행한 뒤 concat한 값이다.

학습을 안정적으로 하기 위해 추가한 텀들이 있다. voxel 마다 갖고 있는 feature가 인근 voxel과 비슷하도록 하는 smoothing term이 주다. TV regularization이랑 앞서 gaussian kernel을 사용해서 만든 값들을 활용하고 싶었는지 gaussian smoothing 값이랑 비슷하도록 하는 두번째 regularization term도 추가했다.
결론은 NeuS만큼 혹은 보다 잘 성능 나오고 속도가 빨라졌다는 것인데, 가속의 핵심은 voxel grid를 쓰는 것이고 특별한 것은 없다. voxel grid를 사용함에도 성능 저하가 없도록 geometry feature를 썼다는 것이 키인 것 같다. 잘 합쳤다는게 contribution인 듯.
반응형