Digging Into Self-Supervised Monocular Depth Estimation

나다경·2023년 1월 5일
0

논문 리뷰

목록 보기
4/4

Summary

  • 단안 영상에서 depth를 추정하기 위해 한 프레임과 다음 프레임 간의 disparity를 구하는 Unsupervised Learning(Self-Supervised)방식의 딥러닝 접근 방식
  • monodepth2에서는 단일 프레임에서 depth를 예측하기 위해 depth 및 pose를 예측하는 네트워크의 조합을 사용함. -> 두 개의 네트워크를 훈련하기 위해 연속적인 프레임과 여러 손실 함수를 이용함.
  • Ground Truth 데이터셋이 필요하지 않음. 대신 이미지 시퀀스에서 연속적인 프레임(t-1,t,t+1)을 사용하여 학습하고 학습을 제한하기 위해 pose 추정 네트워크를 사용함.
  • 모델은 입력 이미지와 pose 네트워크 및 depth 네트워크의 출력에서 재구성된 이미지 간의 disparity를 학습함.

Contribution
1. 중요하지 않은 픽셀에서의 계산을 제거하는 auto-masking 방법
2. Depth Map을 이용한 photometric reconstruction error를 구하는 변경된 방법
3. Multi-scale depth estimation

Depth 네트워크

  • 고전적인 U-Net 인코더-디코더 아키텍처임. 인코더는 pre-trained된 ResNet모델이고 디코더는 시그모이드 출력을 depth로 변환하는 작업임.

Pose 네트워크

  • 6DoF(Degree of Freedom)의 상대 pose 또는 rotation 및 translation을 예측하여 두 프레임 간의 카메라 pose 관계를 구하기 위하여 입력으로 두 개의 컬러 이미지를 받는 ResNet18의 pose 네트워크를 사용함.
  • pose 네트워크는 일반적인 스테레오 이미지 쌍(pair)이 아닌 시간적으로 연속된 이미지 쌍(pair)을 사용함.
    -> 연속적인 다른 이미지(t-1, t번째 프레임 이미지)의 관점에서 대상 이미지(t번째 이미지)의 모양을 예측함.

전체 학습 과정

  • Depth Network는 Depth를 추정하고, Pose Network는 6-DoF relative pose를 추정해서 최종적으로는 appearance loss에 사용됨.

Phtometric Reconstruction Error

  • target 이미지(ItI_t)는 프레임 tt에 있고, 예측에 사용되는 이미지는 프레임 이전 또는 이후 프레임이 될 수 있으므로 It1I_{t-1} 또는 It+1I_{t+1}임. Loss는 target 이미지와 reconstruction된 target 이미지 간의 유사도를 기반으로 계산됨.
  • reconstruction 프로세스는 pose 네트워크를 사용하여 source 프레임인 It1I_{t-1} 또는 It+1I_{t+1}에서 target 프레임인 ItI_t로 변환하는 변환 행렬을 계산하는 것으로 시작됨. 이것은 rotation 및 translation에 대한 정보를 사용하여 source 프레임에서 target 프레임으로의 매핑을 계산한다는 것을 의미함.
  • reconstructed target 이미지를 얻기 위하여 target 이미지와 depth 네트워크에서 예측된 depth map과 pose 네트워크를 통해 얻은 변환 행렬을 사용함.
  • depthmap을 먼저 3D 포인크 클라우드로 변환한 다음 카메라 intrinsic을 사용하여 3D 위치를 2D 포인트로 변환해야 함. 결과 포인트는 대상 이미지에서 bilinear interpolation을 하기 위한 grid sample 연산에 사용됨.
  • 위 Loss의 목표는 target 이미지와 pose와 depth 정보를 이용하여 생성한 reconstructed target 이미지의 차이를 줄이는 것임.

1. Introduction

  • 일반적으로 깊이는 스테레오 카메라의 두 영상의 triangulation을 통하여 추정하게 되지만 본 글에서는 단일 컬러 이미지로부터 깊이를 추정하는 것을 학습하고자 함.
  • 현실적으로 대량의 데이터 셋을 구하기 어려운 깊이에 대한 정답 데이터를 구하는 대신 self-supervised 방식의 접근 방법이 연구되고 있고, 그 방법은 stereo pairs 또는 monocular video를 이용하는 방법이 있음.
  • monocular video 방식은 단안 카메라 하나를 통해서 학습 데이터를 만들 수 있기에 데이터 준비 측면에서 더 쉬운 방식이며 센서를 구성하기도 쉬움. 하지만 frame 간 자차 이동 발생(ego motion) 정도를 알 수 있어야 학습 시 고려할 수 있음. 따라서 pose estimation network를 통하여 ego motion을 예측해야 함.
  • pose estimation은 연속적인 frame을 입력으로 받고 frame 간 이동된 카메라의 rotation, translation을 반영한 transformation matrix를 출력함. monodepth2에서 사용하는 pose 네트워크는 Axis-angle rotation을 사용함. 따라서 네트워크의 입력은 연속적인 frame 2개를 받아서 Axisangle과 Translation을 출력함. 이 값을 통해 두 이미지의 카메라 간 Rotation과 Translation을 계산함.
  • self-supervised 학습 방식을 잘 적용하기 위해 크게 3가지 loss를 추가하여 사용함. 첫째는, novel appearance matching loss로 monocular video에서 Frame 간 물체가 가려지는 문제를 다루기 위해 도입됨. 둘째는, auto masking으로 frame간 움직임이 있어야 disparity를 구할 수 있는데, frame 간 움직임이 없는 경우 이를 필터링 하기 위한 masking 기법임. 마지막으로, multi-scale appearance matching loss는 입력 이미지의 다양한 스케일 (1배, 1/2배, 1/4배, 1/8배)에서 각각 깊이를 추정하여 학습함으로써 다양한 해상도의 깊이를 학습함을 통해 visual artifact 문제를 개선할 수 있었음.

    깊이 추정 결과, monodepth2에서 객체의 경계면에서 좀 더 선명하고 품질 좋은 depth map을 만들어 낼 수 있음

2.1 Supervised Depth Estimation

  • Depth Estimation을 하기 위해 학습 기반의 방식이 다루어지며, 모델의 예측을 통해 컬러 이미지와 그 컬러 이미지의 깊이 정보의 관계를 추정함.
  • Supervised learning 방식은 효과는 좋으나 학습에 필요한 ground truth를 구하기 어렵다는 단점이 있음. 따라서 학습 데이터가 weakly supervised로 구성됨. 예를 들어 이미지의 모든 픽셀에 대하여 대응되는 깊이 값은 ground truth로 구성하기는 어려운 문제가 있기에 깊이 정보가 듬성 듬성 존재하는 sparse depth map을 사용함.
  • 현실에서는 깊이 정보를 구하기 어려워 합성 데이터를 사용하는 대안이 있지만 실제 세상에서 나타나는 다양한 환경과 객체들의 움직임을 모두 구현하기는 어렵다는 한계점이 있음. 이러한 문제점들을 개선하기 위하여 structure-from-motion 방식과 sparse training data를 모두 이용하여 camera의 pose와 depth를 학습하는 방식을 이용하기도 함.
  • 학습 데이터에 전적으로 의존하는 supervised learning 방식으로 깊이 추정 모델을 학습하는 경우 깊이 정보에 대한 ground truth를 정확하게 구성하기 어려운 한계가 있기 때문에 RGB 이미지에서 학습 정보를 추출하는 self-supervised 학습 방식에 대한 연구도 진행되고 있음.

2.2 Self-supervised Depth Estimation

  • 깊이에 대한 Ground truth가 없는 경우, image reconstruction을 사용해 학습의 정보로 사용할 수 있음. stero 이미지 한 쌍이나 monocular sequence에서 한 이미지의 깊이 정보를 이용해 다른 한 쌍의 이미지나 이전 혹은 이후 frame의 이미지를 예측하여 imgae reconstruction을 해서 reconstruction error가 작아질수록 disparity를 잘 구할 수 있게 loss를 설계해 학습하도록 함

Self-supervised Stereo Training

  • stereo pair된 이미지를 pixel disparity를 예측하도록 깊이 추정 네트워크를 학습하면, 데스트 시 깊이 추정 네트워크가 단안 영상의 깊이 추정을 할 수 있도록 만들 수 있음
  • stereo 영상을 사용해 disparity를 잘 구하도록 학습해야 하고, 실제 사용 시에는 단안 카메라로 disparity를 구해야 하므로 disparity를 구하기 위한 추가적인 영상을 복원하는 방법을 사용함. 예츷 들어, 단안 카메라가 stereo 카메라의 왼쪽 카메라라고 하면 딥러닝을 통해 오른쪽 카메라 영상을 왼쪽 카메라 영상을 이용하여 복원하고 복원된 카메라 영상과 원본 카메라 영상을 이용해 disparity를 구함

Self-supervised Monocular Training

  • 단안 카메라 영상의 연속적인 frame을 사용하는 self-supervised 방식도 연구되고 있음. 깊이를 추정하기 위해서는 pose 네트워크가 frame 간 카메라의 위치가 얼만큼 변화했는지 pose를 예측하고 깊이 추정을 하는 depth 네트워크를 학습할 때 이 정보를 사용함.
  • 학습 이외의 과정에서는 깊이를 추정할 때 pose 정보는 사용하지 않음.
  • stereo 데이터 셋을 사용하는 것이 성능에는 효과적이나, monocular video 데이터셋을 구성하기가 더 효율적이기 때문에 monocular video를 이용한 학습 방법이 stereo 데이터셋을 이용한 방법 수준으로 향상되도록 최적화하는 방법이 연구되고 있음

Appearance Based Losses

  • Self-supervised 방식의 기본적인 학습 방법은 disparity를 구하는 것임. Disparity를 구하기 위해서는 두 이미지 간의 동일한 객체를 나타내는 픽셀을 알아야 함. 즉, 두 이미지에서 같은 물체에 대한 픽셀 위치의 차이를 안다는 것은 차이만큼 옮겼을 때 두 이미지가 같아지는 부분이 생긴다는 것을 의미함.
  • 같아지는 부분이 잘 생길 수 있도록 Loss를 설계하면 두 이미지 간의 disparity를 잘 구할 수 있으며 깊이를 잘 추정할 수 있게 됨.
  • Appearance, material 등에 대한 정보를 Frame 간 일치시킬 수 있도록 Loss를 설계하여 깊이 정보를 잘 추정하고자 하는 것이 학습 방법임.

3. Method

  • Monodepth2에서 깊이를 추정하는 네트워크가 컬러 이미지 ItI_t를 입력 받아서 depth map DtD_t를 출력하는 방법에 대해서 설명함.

3.1 Self-Supervised Training

  • Disparity를 구하기 위해서는 동일한 Scene에 대하여 2개의 View에 해당하는 이미지가 필요함. 따라서 Monodepth2에서는 monocular video를 이용하여 같은 Scene에 대하여 2개의 View를 구함. 기준이 ItI_t라고 하면 It1I_{t-1} 또는 It+1I_{t+1}를 이용하여 ItI_t scene에 해당하는 영상을 네트워크 학습을 통하여 예측함.
  • 따라서 네트워크는 학습 파라미터를 이용해 타겟 이미지인 ItI_t 시점의 scene을 다른 시점의 이미지로부터 생성하여 disparity 및 depth를 구하게 됨
  • Disparity를 구하여 depth를 추정하기 위하여 It1I_{t-1}, It+1I_{t+1} 이미지를 ItI_t의 Scene으로 유사하게 reprojection을 함. 즉, t1tt-1 \rightarrow t, tt+1t \rightarrow t+1로 바뀜에 따라서 카메라의 위치도 바뀌게 되는데, Pose Network를 이용해 서로 다른 시점의(ttt1t-1 또는 ttt+1t+1) 영상을 같은 시점(tt)으로 카메라 위치를 맞추는 Rotation 및 Translation 행렬을 예측하는 방법을 사용함
  • Reprojection : Pose Network를 통해 구한 R, t 행렬을 이용하여 It1ItI_{t-1} \rightarrow I_t 로 변환하거나 It+1ItI_{t+1} \rightarrow I_t 로 변환함.

  • LpL_pphotometric reprojection error라고 하며, pephotometirc reconstruction error를 줄인말임. pe는 두 이미지가 얼만큼 다른지에 대한 error를 구하는 것이고, t(t1,t+1)t'(t-1,t+1) 2가지 경우에 대하여 pe를 구했을 때 error의 총합을 LpL_p로 나타냄. Monodepth2에서 pe는 L1 Loss를 사용함.

  • 위 식은 이미지를 ttt' \rightarrow t로 시점을 변환하는 방법에 대해 나타냄
  • 식 (2)를 통해 구한 ItItI_{t'} \rightarrow I_tItI_t를 (1)을 통해 Loss를 구하여 학습하면 두 값이 유사해지도록 학습됨.

  • Photometric reprojection error을 구하기 위한 전체 과정을 도식화한 그림은 위와 같음. tt't1,t+1t-1, t+1 2가지 경우가 있으므로, ItI_t에 대하여 It1,It+1I_{t-1}, I_{t+1} 각각에 대하여 한 번씩 총 2번의 경우에 대하여 에러를 계산하여 학습함.
  • $I_{t-1 \rightarrow t}를 생성하기 위한 grid sampling 연산 시 sampling 방법은 bilinear 방식으로 없는 픽셀에 대해서는 interpolation하여 생성하며 이와 같은 grid sampling 방식은 미분 가능하기 때문에 학습에 사용될 수 있음.
  • 식 (2) 절차
    1. DtD_ttt 시점에서 ItI_t를 입력으로 받은 Depth Network의 출력을 의미함. DtD_t와 intrinsic KK를 이용하여 깊이 추정 결과를 3D 포인트로 변환함
    1. It,ItI_t, I_{t'}를 이용하여 Frame 간 카메라의 Rotation, Translation 관계를 나타내는 Pose Network를 통과해 TttT_{t \rightarrow t'}를 예측함. 즉, ttt \rightarrow t'로 카메라의 위치를 변환하는 변환 행렬을 구함.
    2. tt 시점에서 구한 3D 포인트를 2에서 구한 변환 행렬을 이용하여 tt' 시점의 3D 포인트로 변환함
    3. 변환된 tt' 시점의 3D 포인트 (X, Y, Z)를 intrinsic KK를 이용하여 2D 이미지 좌표인 (u,v)로 변환함. 2D 좌표가 의미하는 것은 ItI_t의 각 픽셀 좌표가 ItI_{t'}에서 어떤 픽셀에 대응되는 지를 나타냄. 따라서 ItI_{t'}의 RGB 값을 예측한 2D 이미지 좌표를 이용하여 가져오면 ItI_{t'}를 이용하여 ItI_t를 복원할 수 있음. 이때 사용되는 연산은 grid sampling임
  • 영상 복원이 잘된다는 의미는 1의 Depth Network의 출력인 Disparity(Depth)가 의미있게 출력되었다는 뜻이고, 2의 TttT_{t \rightarrow t'} 또한 의미있게 출력되었다는 뜻임. 이와 같은 방식으로 IttI_{t' \rightarrow t}를 추정하는 것은 카메라의 위치만 변경되고 나머지 환경은 변하지 않았다는 가정을 두기 때문임.

  • 식 (1)의 LpL_p를 구하기 위하여 미분 가능한 이미지를 비교하는 대표적인 방식인 SSIM(Structural Similarity Index)L1 Loss를 같이 사용했고, SSIM에 높은 가중치를 부여함. SSIM을 사용하면 좀 더 정교하게 이미지를 복원할 수 있다고 알려져 있음.

  • 식 (3)에서는 edge-aware smootheness Loss를 추가적으로 도입해 이미지 변화(xIt,yIt\partial_xI_t, \partial_yI_t)가 낮은 곳에서 깊이 변화가 크면 Loss를 크게 반영함. 즉, 이미지 변화가 작으면 깊이 변화도 작도록 학습함. 이와 같은 Loss를 추가함으로써 깊이 추정에서의 문제점 중 하나인 물체의 경계면에서의 깊이 추정 정확도를 개선함.

  • 식 (3)에서는 dt=dt/dtˉd_t^* = d_t / \bar{d_t}와 같은 normalization 형태를 사용함으로써 학습이 잘 되도록 함.

  • Monocular sequence가 아닌 stereo pair를 이용한다면 tt'가 서로 다른 시점이 아닌 같은 시점에서의 다른 카메라의 영상이 됨. 그 이외의 학습 방식은 monocular sequence를 이용하는 방식과 동일함.

3.2 Improved Self-Supervised Depth Estimation

  • 지금까지 설명한 Loss를 통해 self-supervised 방식의 학습을 할 수 있었으나 supervised 학습 방식과의 차이를 줄이기 위하여 추가적인 3가지 기법(Per-Pixel Minimum Reprojection Loss, Auto-Masking Stationary Pixels, Multi-scale Estimation)을 더 적용함.

Per-Pixel Minimum Reprojection Loss

  • (c)의 appearance loss를 보면 ItI_tIt1,It+1I_{t-1}, I_{t+1}의 관계에서 ItI_t에는 보이는 영역이 It1I_{t-1}에서는 보이지 않고, It+1I_{t+1}에서는 그대로 보이는 예시를 볼 수 있음. 일반적으로 average를 사용하여 loss를 구할 수 있지만 더 좋은 성능을 위하여 minimum 연산을 사용함
  • minimum 연산을 사용하면 It1,It+1I_{t-1}, I_{t+1} 중 가능한 한 ItI_t와 이미지가 일치하는 이미지를 선택하여 연산을 할 수 있으므로 학습의 가정과 부합하지 않는 이미지를 배제할 수 있어서 더 좋은 결과를 얻을 수 있음. 평균을 적용하는 경우 깊이 추정 결과에서 blur가 생길 수도 있음.
  • 이와 같이 disparity를 구할 때, 가정에 어긋나는 2가지 주요 상황이 1. 이미지 경계 부근에서 view가 벗어나서 보이지 않게 되거나 2. 카메라가 이동하여 가려진 픽셀이 발생한 경우임.

  • 1과 같이 view가 벗어나는 문제에 대해서는 reprojection loss를 구할 시 sampling 연산을 통하여 view가 벗어나는 영역에 대해서 적절히 masking이 되어 문제를 개선할 수 있지만 occlusion이 발생한 문제에 대해서는 처리하기가 어려움. 따라서 위 식과 같이 tt'즉, t1,t+1t-1, t+1 중 reprojection error가 낮은 이미지만 loss에 반영함.

  • 위 그림과 같이 LLItI_t가 되어 기준이 됐을 때, 빨간색 동그라미는 RR 또는 +l+l 이미지에서는 보이지 않지만 l-l 이미지에서는 보임. 즉, disparity를 구할 수 있는 픽셀이 됨.
  • 따라서 이와 같이 disparity를 구할 수 있는 영역이 많을수록 학습에 도움이 되므로 Per-Pixel Minimum Reprojection Loss를 사용하게 됨. 이와 같은 방법을 통해 분석 시 이미지 경계 부분의 visual artifact를 줄일 수 있고, occlusion boundary를 좀 더 정교하게 만들 수 있으며 정량적으로도 성능이 향상된다는 것을 확인할 수 있음.

Auto-Masking Stationary Pixels

  • self-supervised로 monocular sequence를 학습할 때, 2가지 전제 조건이 있음. 카메라는 움직이되, 주변 환경은 움직이지 않는 다는 것임. 만약 이 가정이 깨지게 되면 학습 시 문제가 발생함.
  • 예를 들어, 카메라의 위치가 움직이지 않는 경우 disparity를 구할 수 없어 학습에 적합하지 않는 데이터가 됨. 또한 객체의 움직임이 발생할 경우 같은 환경에 대한 disparity를 구할 수 없어 학습에 적합하지 않는 데이터가 됨. 즉, disparity를 구하지 못하는 환경의 데이터는 학습에 사용하기가 어려움.
  • 이러한 데이터로 학습하게 될 경우 hole이 발생하게 되고, 이 hole에서는 무한한 깊이를 가지는 잘못된 출력을 만들어 내는 경향이 있음.

  • 이러한 경향은 monocular sequence를 이용하여 학습하는 위 그림의 monodepth2 이외의 모델에서 확인이 됨.
  • monodepth2에서는 Auto-Masking Stationary Pixels를 이용해 문제를 개선함. 이 방법은 연속된 Frame에서 픽셀값에 변화가 없는 부분을 제거하는 방법임. 픽셀값에 변화가 없으면 Disparity를 구할 수 없기 때문에 제거함. 이와 같은 방식으로 픽셀을 제거하면 네트워크는 카메라와 같은 속도로 움직이는 물체를 무시하게 되고 심지어 카메라가 움직이지 않을 때에는 frame 전체를 무시함.

0개의 댓글