Paper/3D vision

NeRF-Supervised Deep Stereo

침닦는수건 2023. 7. 18. 11:47
반응형

내 맘대로 Introduction

이 논문은 NeRF를 이용하는 방법에 대한 논문이다. NeRF가 워낙 퀄리티 좋은 결과를 만들어낼 수 있다보니 생성된 이미지를 GT로 쓸 수 있는 어플리케이션을 떠올린 것 같다. 그 target task로 stereo depth를 정했다. 딥러닝으로 stereo depth estimation하는 알고리즘들이 항상 데이터 부족 문제를 겪고 그로 인한 domain gap 문제도 겪고 있는데 NeRF를 이용해 그 데이터 부족 문제를 풀어보고자 했다. 

 

NeRF에서 depth도 얻어낼 수 있는 것은 이미 밝혀진 사실이니 이미지와 depth 모두 얻을 수 있는 세팅이고, baseline을 맘대로 바꿀 수 있는 세팅이기 때문에 합리적이라고 보인다. 물론 NeRF를 scene 마다 학습해두어야 한다는 점, 공간이 넓으면 scene을 저장할 메모리도 많이 필요하다는 것이 문제지만 크게 다루지 않았고 InstantNGP를 씀으로써 속도만 신경쓴 듯하다.

 

메모하며 읽기




(생략할까 했지만 ㅎㅎ) NeRF + InstantNGP를 그대로 가져다 써서 데이터를 찍어내는게 핵심이기 때문에 NeRF와 InstantNGP가 뭐하는 앤지 알아야한다는 내용이다.

scene을 NeRF로 하나하나 복원해둘 때 시작은 역시나 COLMAP으로 한다. COLMAP SfM으로 카메라 intrinsic과 poses를 전부 다 계산해두고 vanilla NeRF loss로 학습을 시킨다. 

그리곤 스테레오 데이터를 찍어낼 때는 스테레오 카메라 중 왼쪽 카메라의 자세만 랜덤으로 생성하고 오른쪽 카메라는 왼쪽 카메라 대비 baseline translation + identity rotation으로 만들었다.

이미지 overlap이 안되는 지점에서 거리 추정을 못하는 문제 (사실 문제라기 보다 물리적으로 그런 것인데 딥러닝이니까 억지로 추정을 하는 과정에서 성능이 떨어지는 문제)를 보완하기 위해서 왼쪽 카메라의 왼쪽에 카메라를 더 추가해서 사실 카메라는 3대다.

left (보조용) - middle (사실상 left) - right  

triplet 구조다.

여기서부턴 위에서 만든 데이터를 갖고 어떻게 stereo depth 네트워크를 학습시켰지 그 loss를 설명한다.

disparity를 추정하는 네트워크다 보니 대표적으로 2개가 있는데 하나는 disparity를 이용해 image warping을 하고 이미지 레벨에서 SSIM을 비교하는 것이고, 나머지 하나는 disparity GT와 직접 비교하는 것이다. 

앞서 짧게 언급했듰이 left - right image에서 overlap 되지 않는 부분은 GT가 없어서 학습이 잘 되지 않는데, 데이터셋을 맘대로 만들 수 있는 환경이기 때문에 카메라를 왼쪽에 하나 더 만들어 보상했다.

left - right 이미지 간 loss 계산해보고, leftleft - left 간 loss를 계산해보고 더 작은 값을 사용하도록 했다. 잘린 부분은 애꿎은 오른쪽에서 찾는게 아니라 확실하게 보일 가장 왼쪽에서 찾도록 유도한 것이다.

---

disparity GT가 있다곤 해도 NeRF로 만든 것이라 신뢰도가 조금 낮을 수 있는데 이를 보상하기 위해서 Ambient Occlusion 즉 ray마다 transparency를 체크해서 충분히 surface에 부딪힐만 하다고 할 때만 loss를 계산하도록 했다.
반응형