[ECCV2020]Feature-metric Loss for Self-supervised Learning of Depth and Egomotion

Introduction

Introduction에서 다루는 내용은 크게 없어서 간단히 요약만 하고 넘어가겠습니다.

  1. Monocular Depth Estimation 방법 중 Supervised 방법론의 장점과 단점 : 정확한 성능을 보이지만, 비싼 Lidar를 통한 GT를 통해 학습하기에 새로운 카메라로 데이터를 촬영해서 학습할 때 기존의 Lidar 정보는 활용을 못하는 등 일반화의 어려움이 존재.
  2. Monocular Depth Estimation 방법 중 Self-Supervised 방법론의 장점과 단점 : Supervised와 달리 하나의 카메라만으로 깊이 추정을 학습 및 추론할 수 있으나, 성능이 Supervised에 비해 많이 부족함.
  3. 특히 Self-Supervised 방법론은 네트워크가 추론한 깊이 정보와 카메라 외부 파라미터 정보를 가지고 Source view로부터 와핑된 픽셀과 촬영된 Target view 사이의 Photometric 유사성을 계산하면서 학습을 하는데, 이 방식은 textureless한 영역에서는 학습의 큰 문제를 발생시킴.
  4. 그래서 저자는 Photometric 뿐만 아니라, Feature 단에서도 유사성을 계산하는 Feature metric loss를 제안함.

대충 위와 같은 형식으로 요약을 할 수 있겠네요. 요약 내용 중 3번에 대한 부가 설명은 Method 부분에서 조금 더 자세히 다루고자 합니다.

Method

보다 자세한 설명에 들어가기 앞서, 해당 논문은 참 친절?하게도 Geometry model을 설명하기 위한 notation 설명을 먼저 합니다.

먼저 카메라 모델과 깊이에 대한 수식은 다음과 같이 표기할 수 있습니다.

여기서 (f_{x}, f_{y}, c_{x}, c_{y}는 카메라 내부 파라미터를 의미하며(Focal length와 Principal point), P, p 는 각각 3차원(X,Y,Z)와 2차원 (u,v) 픽셀을 표현합니다. 수식1에서 [/latex] \pi() [/latex]는 3차원 공간의 좌표를 2차원 영상 좌표계로 변환시키는 함수겠네요.

또한 2차원 좌표와 깊이 정보 D(p)를 통해 3차원 공간으로 다시 재변환할 수도 있습니다.

다음은 Ego-motion입니다. Ego-motin에 대해서 저도 단순히 카메라의 모션 정보라고만 알고 있는데 논문에 나온 수식도 유사하게 설명하는 듯 보이네요.

다양한 파라미터가 나와서 헷갈리실 수 있으시겠지만 하나하나 정리해보면 사실 어려운 내용은 아닙니다. 먼저 수식(2)와 같이 \pi^{-1}(p, D(p))를 통해 2차원 영상좌표계 상의 픽셀 p를 3차원 좌표 P로 옮긴다음, G라는 카메라 외부 파라미터를 통해 회전과 이동 변화를 준 후 다시 /pi 를 적용하여 2차원 영상 좌표계로 투영시킨 것입니다.

Cross-view reconstruction

다음은 Cross-view reconstruction 입니다. 이는 Introduction에서 설명드렸다시피, Self-supervised 기반의 방법론들은, 네트워크에서 구한 Depth Map과 Ego-motion을 통하여 Source 영상을 Target 영상으로 맵핑한다음에, 이 둘 사이의 유사성을 구하는 Photometric Loss라고 보시면 될 것 같습니다.

이러한 Photometric Loss는 수식(5)와 같이 표현될 수 있는데, 이때 I_{s}(p), I_{t}(p)는 각각 Source Frame과 Target Frame을 나타낸 것입니다. 그리고 p는 Ego-motion을 통해 움직여진 픽셀을 의미하구요.

하지만 이 Photometric Loss는 Textureless인 지역에서 큰 문제가 있다고 그랬죠? 이에 관해서 저자는 먼저 Photometric Loss에 대하여 Depth와 Ego-motion의 관한 gradient로 분석하였습니다.

이 수식에 대하여 저자가 하고 싶은 말은, Depth와 Ego-motion 모두 결국에는 Image Gradient에 영향을 받고 있으며, 이때 textureless 지역의 경우 image gradient가 거의 0에 가깝기 때문에 모델 입장에서는 잘못된 깊이와 Ego-motion을 추정하였음에도 불구하고 Photometric Loss가 작게 나오게 됩니다.

이러한 문제를 해결하고자 저자는 Feature Representation의 gradient값이 더 잘 학습되도록하였으며 Photometric Loss와 유사한 방식으로 아래와 같이 Feature Metric loss를 설계하였습니다.

Single-view Reconstruction

그렇다면 이 Feature Representation \phi(p)는 어떻게 구하는걸까요? 저자는 auto-encoder 형식의 네트워크를 통해서 해당 feature를 추출한다고 합니다. 저자가 주장하기로 이러한 encoder를 통해 추출된 depp feature는 영상의 넓은 패턴을 인코딩하도록 학습함으로써 그 외의 잔여 정보나 노이즈등은 제거하는 효과를 준다고 합니다.

저자는 이러한 Feature Network를 학습시키기 위해 아래와 같은 loss를 사용했습니다.

먼저 L_{rec}Image Reconstruction loss로 실제 입력 영상과 네트워크를 타고 생성된 영상이 같아지도록 단순히 L1 loss를 사용하였습니다. 뭐 쉽게 말하자면 RGB 영상을 넣어서 입력된 영상과 동일한 RGB 영상을 생성하는 것이겠네요.

L_{dis}Discriminative loss입니다.

저 세모 뒤집어놓은 표시는 영상 좌표에 대한 미분을 표현한 것으로, 옆에 1은 1차 미분을 의미합니다. 해당 Loss는 feature가 가지는 gradient 값이 커지게끔 하도록 장려하는 것으로, 특히 수식(12)의 경우 입력 영상의 gradient가 작은 지역 즉 textureless 영역일 때 loss가 더 커지도록 하여 feature gradient 값이 더 큰 값을 가지도록 강조한 수식입니다.

마지막으로 Convergent loss 입니다. 해당 loss는 feature gradient가 스무스해지게끔 만드는 loss로, 이는 모델이 학습하는 동안에도 일정한 gradient를 가지게끔 한다고 합니다. 수식(12)와 다르게 Convergent loss는 2차 미분을 사용하는데, 아무래도 1차 미분과 달리 2차 미분은 서서히 변화하는 lamp edge를 판단할 수 있기에 다르게 사용한 것으로 보입니다.

Overall pipeline

그림1. 제안하는 방법론의 전체 파이프라인

그림1은 모델의 전체 파이프라인을 나타낸 것입니다. 먼저 DepthNet과 PoseNet은 각각 Resnet50, Resnet18 백본을 사용하고 있으며, Monodpeth와 동일한 방식으로 동작한다고 합니다. 제일 좌측에 FeatureNet이 위에서 Single-view reconstruction loss를 설명한 네트워크 부분입니다.

즉 FeatureNet에서 나오는 loss와 Self-supervised Monocular Depth Estimation network에서 학습하는 loss를 다 더하여 아래와 같은 total loss를 정의합니다.

논문에서는 더 좋은 성능을 올리기 위해서는 L_{s\rightarrow t}에서 Feature metric loss 뿐만 아니라 기존에 많은 방법론들이 사용하는 Photometric loss까지 함께 사용하면 더 좋다고 합니다.

L_{fm}, L_{ph}는 각각 Feature metric loss와 Photometric loss를 의미합니다. 여기서 Feature metric loss는 아래와 같이 나타낼 수 있습니다.

간단하게 warping한 source feature와 target feature의 유사도를 계산하는 방식입니다.

Photometric loss는 기존 monodepth1의 방식과 동일하게 사용한 것으로 warping한 source image와 target image의 유사도를 계산하는 방식입니다.

또한 occlusion problem을 해결하기 위해 monodepth2와 동일하게 cross-view reconstruction loss를 사용하였습니다.(해당 부분을 잘 모르시는 분들은 monodepth2 리뷰를 참고하시면 좋을 듯 합니다.)

Experiments

위에 표는 정량적 결과를 정리한 것으로 M, S, MS는 각각 monocular, stereo paris, binocular video를 사용한 것입니다. 제안하는 방법론은 모든 self-supervised method과 비교하였을 때 가장 좋은 성능을 보였습니다.

특히 Sq Rel metric에서 매우 높은 성능 상승률을 보였는데, 해당 metric은 짧은 범위 내에서의 에러를 더 크게 패널티를 부여하는 metric 입니다. 이러한 짧은 범위는 가까운 거리에 존재한다는 뜻으로 주로 영상 속 물체들이 크게 보이며 이 때문에 더 많은 textureless region이 생성됩니다. 하지만 제안하는 방법론은 이러한 textureless에 강인하기 때문에 더 큰 성능 향상이 있었다고 하네요.

그림2. 정량적 결과. 1번째 행은 입력 영상을, 2번째 행은 Monodepth2의 결과, 마지막 행은 제안하는 방법론의 결과를 의미한다.

그림2는 Monodepth2와 제안하는 방법론의 비교 결과입니다. 정성적 결과를 확인해보시면 low-texture region과 finer detail 부분에서 상당히 좋은 결과를 보실 수 있습니다.(자전거를 탄 사람, 표지판, 차고지 문 등)

하지만 Monodepth2의 경우 단순히 Photometric loss만을 사용하기에, 쉽게 local minimum에 빠져들기 쉬운데 특히 벽이나 빌보드와 같은 low texture region에 심하게 발생한다고 합니다. 여기서 local minimum에 빠진다는게 어떤 의미인지 확실치는 않지만, 제가 추측하기로는 low texture region의 경우 모델이 잘못된 depth와 ego motion을 추정한다 하더라도, 결국 loss는 작게 추정되기 때문에 모델이 더 좋은 방향으로 학습되지 못하고 머무른다는 의미인 것으로 받아들여집니다.

결론

아무래도 Self-supervised 기반의 깊이 추정 방법들은 사용할 수 있는 데이터가 단일 영상 밖에 없기에 상당히 제한이 많은 분야입니다. 그래서 Photometric loss만을 이용하여 Encoder의 Feature 표현력을 믿을 수 밖에 없기에 성능이 낮게 나오는데, 그럼에도 불구하고 Photometric loss 외에 어떤 loss를 더 사용할 수 있을지 보여주는 좋은 논문이라고 생각합니다.

Author: 신 정민

2 thoughts on “[ECCV2020]Feature-metric Loss for Self-supervised Learning of Depth and Egomotion

  1. feature를 warping 해서 Lfm을 계산한다고 하셨는데 중간 feature가 input과 같은 shape인가요..?

    1. 아뇨 중간 feature는 input shape보다 절반 작은 해상도부터 시작해서 multi-scale로 warping하여 Lfm 계산을 수행합니다.

      warping을 하는데 있어 사용되는 좌표는 어처피 numpy의 mesh grid? 함수로 1~w, 1~h의 초기 좌표를 만들고 warping하는 것이기에 RT 매트릭스만 잘 구했다면 해상도의 크기는 그다지 중요하지 않습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다