DeepVO (2017 ICRA)

DeepVO: Towards End-to-End Visual Odometry with Deep Recuurent Convolutional Neural Networks (2017 ICRA)

Overview

Abstract

기존 VO는 feature extraction, matching, motion estimation, local optimization 등으로 일반적인 pipeline을 따름. 잘 작동하나, 다양한 환경에 대해서 fine-tunning이 요구됨. Absolute scale에 대한 사전지식 또한 요구됨(scale drift 때문).

이 논문에선 RCNN을 이용한 end-to-end monoculer VO에 대해 설명함. End-to-end이기에 기존 방법의 pipeline이 요구되지 않음. RCNN (Region proposal이 아니다! Recurrent CNN으로 이해해야됨!) 기반으로 좋은 feature를 학습할 뿐만 아니라 RNN을 기반으로 연속적인 데이터에 대한 동적 관계에 대해 학습할 수 있음. KITTI 데이터에 대한 실험을 통해 SOTA와 견줄만한 성능을 보임.

Introduction

기존 VO와 DL 기반의 한계점

  • 기존 mono VO는 좋은 성능을 보이나 fine tuning이 요구되며 scale drift가 심하기에 사전 지식이 있어야 한다.
  • Deep learning은 주로 recognition 및 classification 쪽으로만 발전되어왔기에 Odometry estimation에 대한 내용이 많이 없다.
  • 이런 appereance representation (Object detection based나 segmentation 기반을 말하는 듯)은 VO를 train된 환경에서만 작동하는 제한된 성능을 가지게 한다.
  • 이렇기에 VO는 appereance 보다 geometrycal feature에 대해 더욱더 의존한다.
  • 한편, VO는 각각의 이미지를 처리하는 것보다 연속적인 영상에 대해 변화를 분석하고 연결하여 motion modeling하는 것이 중요하다.
  • 이말은 CNN이 할 수 없는 연속적인 정보에 대한 처리를 해야 한다는 뜻임 (그래서 RNN을 도입한다)

제안하는 알고리즘

  • 이 논문에선 Recurrent Convolutional Neural Networks (RCNNs)을 사용한 DL 기반의 mono VO를 제시한다.
  • End-to-end 방법으로, 기존의 VO pipeline이 필요하지 않는다 (camera calibration 포함)
  • Main contribution은 다음과 같다.
    • Mono VO문제를 raw RGB 영상들을 이용한 DL 기반 end-to-end 방법으로 해결한다.
    • CNN으로 구해진 geometrical feature를 RCNN을 통한 기법으로 새로운 환경에서도 적용될 수 있는 알고리즘을 소개한다.
    • 인간에 의해 해석되기 어려운 연속적인 데이터에 대한 의존과 복잡한 동작에 대해 RNN으로 자동으로 학습함으로서 해결한다.

기존 방법은 크게 두가지로 나눌 수 있다.

  • Geometry based method
  • Learning base method

Geometry based methods

1. Sparse feature based method

Conventional feature based VO

Sparse feature based method는 위와 같은 pipeline를 주로 따르며 multiview geometry를 이용해 salient feature matching을 통해 motion detection을 진행한다. 하지만, outlier 및 noise로 인해 drift가 존재하며 이를 해결하기 위해 SLAM이나 SfM 기법을 적용한다. (Loop closure를 말하고자 하는듯?)

2. Direct methods

이건 따로 paper review할 예정이긴 한데, 생각보다 조금 복잡해서 미루고 있다. 여튼, feature based가 computationally expensive하고 전체 이미지를 다 활용하지 않는 단점이 있다. Direct method는 연속적인 영상에 대해 전체 영상 pixel들을 기용할 수 있다. 최근 semi-direct method는 최상의 performance를 보여준 바 있다. Direct method가 feature based보다 좀더 정확한 결과를 나타내고 featureless 환경에서 나은 성능을 보이기에 자주 쓰이기 시작되었다. (Underwater에선 아니던데 ㅜㅜ)

Learning based methods

1. ML 기반 방법들

Learning 기반 VO는 geometric theory를 적용하지 않고 센서 데이터로부터 motion을 inference하는 방법으로 진행되어왔다. Optical flow를 이용해 KNN, GP, SVM regression 을 학습시켜 VO를 얻는 기법들이 있었다.

ML기반은 RGB와 같이 크고 highly non-linear하거나 high dimensional data에 대해서 충분하지 않음은 이미 널리 알려진 사실이다. Large -scale 데이터를 통해 자동적으로 적합한 feature를 학습하는데 적합한 DL이 VO 문제를 해결하는데 대안이 될 수 있다.

2. DL 기반 방법들

DL은 localization 문제에 대해 좋은 성능을 보인 바 있다. CNN의 features들은 appereance based place recognition에 사용된 바 있다. 하지만, VO나 pose estimation에 대한 연구가 많이 진행된 바 없다.

  • Stereo depth 이후 CNN을 통해 direction 과 velocity를 softmax function으로 추정하는 기법이 있었으나, VO를 pose regression problem보다 classificiation problem으로 해결한 바 있다.
  • 단일 영상을 통해 camera relocalization하는 연구 (PoseNet)가 있었으나, imagel labeling을 SfM으로 하여 시간이 오래걸리고 많은 노동이 필요하다. Map 기반으로 training이 되기에 새로운 환경에 대해선 다시 학습이 요구된다.
  • Optical flow를 input으로 하는 CNN 기법도 있지만, 이를 위해선 pre-processed dense optical flow가 요구되 real-time application에 알맞지 않다.

End-to-end VO through RCNN

RCNN based VO 제안하는 구조는 위의 사진과 같이 CNN 기반 feature extraction과 RNN 기반 sequential modeling으로 구성되어있다.

A. Architecture of Proposed RCNN

VGGNet이나 GoogLeNet과 같은 좋은 성능을 내는 구조들이 있으며, 이들은 주로 classification과 detection을 목표로 구성되었다. 하지만, VO는 앞서 말한 바와 같이 geometry기반이어야 하지, appereance와 coupled되면 좋지 않다. (과연? 요즘엔 Semantic SLAM도 많이 연구가 되고 있긴 한데, 근데 또 생각해보면 이들은 주로 Localization 쪽으로 치중되어있긴 하다!) 따라서 기존 DNN architecture를 그대로 적용하는 것은 impractical하다. 한편, 연속적인 영상에 대해 연결을 하는 것은 필수적이다. 따라서 제안하는 RCNN은 이 두가지 requirement를 고려한다. (1. geometry 기반 feature, 2. Connection between frames 인듯?)

다음은 각 과정에 대한 설명이다:

  1. 각 frame별 RGB에서 mean RGB value를 빼고, (Illumination invariant하게 하기 위함인가?) 64의 배수로 resize한다. (CNN에 넣기 위함인듯 하다)
  2. 두개의 연속적인 영상들이 쌓임으로 tensor를 형성하여 motion과 pose estimation을 추출하기 위해 deep RCNN이 학습된다.
  3. Image tensor는 CNN을 통해 효과적인 feature를 뽑고 이 feature들이 RNN에 들어가 sequential learning에 활용된다.
  4. 각 image pair는 network를 통해 pose estimation 로 결과가 나온다.

RCNN의 장점은 simultaneous feature extraction과 sequential modeling을 각각 CNN과 RNN으로 동시에 학습이 가능하다는 점이다.

B. CNN based Feature Extraction

VO에 적합한 CNN architecture를 구성하기 위해 concatination된 연속적인 영상에 대해 feature extraction을 진행한다. Feature는 이상적으로 appereance나 visual context보단 geometric 정보를 함유해야 모르는 환경에 대해 generalization이 가능하다. CNN 구조는 다음과 같다.

CNN Architecture

이 구조는 KITTI image에 맞춰 제작되었으며, 9 convolutional layer와 마지막 convolutional layer 후를 제외하고 8개의 ReLU가 뒤따라 이어져 총 17개의 layer로 구성된다.

네트워크는 작은 feature를 찾기 위해 7X7, 5X5, 3X3 순으로 convolution kernel이 줄어든다. (? 작은 feature에서 커지는거 아닌가?)

Zero padding은 receptive field에 대한 configuration을 맞추기 위함이거나, tensor의 spatial dimension을 맞추기 위해 행해진다. 다양한 feature를 학습하기 위해 channel수는 증가한다.

CNN은 기존 optical flow나 depth estimation 결과와는 다르게 raw RGB 데이터 (mean 값을 빼는 preprocessing만 있다!)만응 이용한다. 학습된 feature는 high-dimensional 영상에 대한 정보를 압축할 뿐만 아니라 연속적인 데이터에 대해서도 성공적인 학습을 증진시킨다.

C. RNN Based Sequential Matching

이제 좀 어려워진다 ㅋㅋ RNN이랑 LSTM 구조에 대해서 완벽히 이해 못한채로 읽으니까 해석하기가 참 난해하다.

RNN이 sequence에 대해 modeling이 가능하기에 VO 문제에 있어 적합하다. 예로, 현재 image frame에 대한 pose estimation은 이전 영상들의 정보를 활용함으로써 도움을 받을 수 있다. 기존 방법들 또한 multiple view geometry를 활용함으로써 two-view geometry의 한계점을 극복하였다. 하지만, RNN은 high dimensional raw data를 활용하기 어렵기 때문에 CNN 결과를 RNN에 넣는 RCNN 구조를 사용하는 것이다.

RNN은 CNN와 달리 시간에 따른 hidden state에 대한 메모리를 저장한다. 현재의 hidden state는 이전의 hidden state의 함수가 되어 이전 state와 현재 state간의 연결이 가능하다.

시간 \(k\)의 convolutional feature \(\mathbf{x}_k\)에 대해 RNN update는 다음과 같다. (RNN에 대한 다음 이미지를 보면 조금 이해가 수월하다 출처: colah’s blog)

RNN Architecture

\(\mathbf{h}_k\) \(= \mathcal{H}(\mathbf{W}_{xh}\mathbf{x}_k + \mathbf{W}_{hh}\mathbf{h}_{k-1}+\mathbf{b}_h)\)

\(\mathbf{y}_k\) \(= \mathbf{W}_{hy}\mathbf{h}_k + \mathbf{b}_y\)

여기서 \(\mathbf{h}_k\)는 hidden state, \(\mathbf{y}_k\)는 output이다. \(\mathbf{W}\)는 weight matrix들이며, \(b\)는 bias이고, \(\mathcal{H}\)는 element-wise non-linear activation function이다.

이론적으로 RNN는 어떠한 길이의 sequence를 학습할 수 있으나, 현실적으로는 vanishing gradient problem으로 짧은 sequence에 대해서만 학습이 된다.

긴 trajectory에 대한 영상들간의 correlation을 이용하기 위해 LSTM이 RNN에 적용되었다.

LSTM Architecture

위 사진이랑 논문에서 제시된 사진이랑 같은 구조임을 알 수 있다.

RNN Architecture

각 구조에 대해서는 [여기]](http://colah.github.io/posts/2015-08-Understanding-LSTMs/)를 참조하면 될 것 같고 너무 detail하게 들어가지는 않겠다.

Memory cell \(\mathbf{c}_k\)와 hidden state \(\mathbf{h}_k\)가 그 다음 LSTM의 input으로 들어가게 된다.

RNN이 long-term dependency를 잘 학습하지만, 아직 high level representation과 복잡한 dynamic model을 이해하기 위해선 더 깊은 network가 요구된다. Deep RNN이 speech recognition에 좋은 성능을 보였기에 여기서도 2개의 LSTM을 이었다.

각 LSTM layer는 1000차원의 hidden state를 가진다. (each of the LSTM layers has 100 hidden states가 state가 1000개라는건지 state dimension이 1000이라는건지.. 아마 후자겠지?)

Deep RNN 결과는 각 frame별 pose estimation을 나타낸다. (놀랍게도 relative pose가 아니라 absolute pose라고 한다. 이전 pose 출력 결과까지 LSTM에 남아서 더해지는듯? 근데 Unofficial code에선 relative pose를 사용하는 것 같다.)

D. Cost Function and Optimization

제안하는 RCNN 기반 VO는 image sequence에 대한 pose의 conditional probablity를 계산하는 것으로 간주할 수 있다.

Poses: \(\mathbf{Y}_t = (\mathbf{y}_1, \dots, \mathbf{y}_2)\)

Image sequence : \(\mathbf{X}_t = (\mathbf{x}_1, \dots, \mathbf{x}_t)\)

\(p\left(\mathbf{Y}_t \lvert \mathbf{X}_t \right)\) \(= p\left(\mathbf{y}_1, \dots, \mathbf{y}_t \lvert \mathbf{x}_1, \dots, \mathbf{x}_t \right)\)

VO의 optimal parameter \(\mathbf{\theta}^{\ast}\)를 찾기 위해선 DNN은 다음을 maximize한다.

\(\mathbf{\theta}^{\ast}\) \(= \text{argmax}_{\mathbf{\theta}} \left( p\left(\mathbf{Y}_t \lvert \mathbf{X}_t, \mathbf{\theta}\right)\right)\)

Ground truth pose \((\mathbf{p}_k, \mathbf{\psi}_k)\)와 estimated pose \((\hat{\mathbf{p}}_k, \hat{\mathbf{\psi}}_k)\)간의 euclidean distance가 minimize되도록 최적화된다.

\(\mathbf{\theta}^{\ast}\) \(=\text{argmin}_{\mathbf{\theta}} \left( \frac{1}{N} \sum_{i=1}^{N}{\sum_{k=1}^t {\lVert \hat{\mathbf{p}}_k-\mathbf{p} \rVert_2^2 + \kappa \lVert \hat{\mathbf{\psi}}_k - \mathbf{\psi}_k \rVert_2^2}} \right)\)

\(\kappa\)는 position과 orientation간의 weighting을 위해 주어졌으며 100이 사용되었다고 한다. Orientation \(\mathbf{\psi}\)에는 euler angle이 사용되었는데, quaternion을 사용하게 되면 하나의 변수가 더 발생해 optimization을 방해하기 때문이라고 한다. (SO3를 이용해서 하면 어떨까?)

Experimental Results

KITTI Odometry Data의 sequence 00부터 10까지는 ground truth가 있고 11부터 21까지는 ground truth가 없기에 GT가 있는 데이터 중 상대적으로 긴 00, 02, 08, 09 sequence를 training에 사용하였다고 한다. Adagrad로 optimization을 하였으며 200 epoch와 0.001 learning rate를 사용하였다. Deopout과 early stopping을 통해 overfitting을 방지하였다고 한다. CNN은 FLowNet의 구조와 같은지 여기서 사용된 pretrained된 network을 사용하였다고 한다.

Effect of overfitting

Effect of overfitting

Overfitting이 machine learning에서 부작용을 나타내는건 잘 알려져 있지만 overfitting이 VO에 미치는 영향에 대해서는 더 많은 연구가 있어야 한다고 한다. 위의 사진처럼 overfitting으로 training은 잘되나 testing에서는 잘 안되는 것을 볼 수 있다. Attitude의 변화는 상대적으로 작기 때문에 overfitting에 취약하다고 한다. (\(\kappa\)의 효과가 없나?) 아마 attitude 변화가 우리가 보는 trajectory 변화에 크게 영향을 미치기 때문 아닐까?

Velocity & Error

Comparison between gt

좌측 이미지는 속도에 따른 오차 분석이다. 기존 알고리즘 (LIBVISO2)의 monoculer 결과에 비하면 다 좋지만, (c)에서 속도가 50km/h를 넘어가면 더 안좋아지는 경향이 있다. 이는 training시 대부분 60km/h보다 낮기에 속도가 높아지면 성능이 떨어지는 현상이라고 한다. (일종의 overfitting인가). Attitude error는 상대적으로 다 낮게 나오는데, 이는 높은 속도에서 차량의 anguler rate가 크지 않기에 생긴 현상이라고 한다.

Dynamic objects & Error

Comparison with LIBVISO2

단조로운 환경에서 Dynamic object가 있는 경우 성능이 저하된다고 한다. 그림 (b)의 sequence 12에서 error가 커지는 것을 볼 수 있는데, 이때 환경이 단조롭고 반대 차선에 차량이 움직이는 상황이다.


© 2020. All rights reserved.

Powered by Hydejack v9.0.5