【論文紹介】変分End-to-Endナビゲーションと自己位置推定

# 紹介する論文

[Alexander Amini, Guy Rosman, Sertac Karaman, and Daniela Rus. "Variational End-to-End Navigation and Localization," In Proceedings of the IEEE International Conference on Robotics and Automation, 2019.](https://arxiv.org/pdf/1811.10119.pdf)



# 論文の要約

- 画像と走行可能経路，自己位置を入力としてステアリング角をEnd-to-Endで学習する
- 変分End-to-End学習を行うことで，ステアリング角の事後分布（混合ガウス分布）を得ることができる
- ステアリング角に関する確率分布の出力を用いて，自己位置推定（位置に関する事後分布の推定）を行うことができる



# はじめに

ベイズ推定の分野で「Variational Inference 」という言葉があります．これは「変分推論」という意味です．簡単に説明すると，複雑な確率分布を簡単な確率分布（例えば正規分布）の組み合わせで近似する様な方法です．また深層学習のにおける1つの重要な手法として「Autoencoder」というものがあります．簡単に説明すると，入力データを表現する重要な特徴量を自動選択して次元圧縮する手法です．この変分推論とAutoencoderを合わせたものとして「Variational Autoencoder」というものがあります．これは，Autoencoderと同様に次元圧縮を行うのに近いのですが，圧縮した特徴が従う確率分布（一般には正規分布がよく用いられます）を求めるところが違います．つまりVariational Autoencoderは，入力データを表現する様な「確率分布」を学習すると言えます．

また近年よく「End-to-End」という言葉が良く使われます．これは「入力から出力を直接学習する」というようなニュアンスで用いられます（新しい言葉なので，定義は日に日に変わっている気もします．「どこからどこまでが入力で出力なのか」ということが曖昧なためです．）．代表的なものとして，[NVIDIAが発表した論文](https://arxiv.org/pdf/1604.07316.pdf)があり，画像（入力）から車両のステアリング角（出力）を学習して自動運転を行う方法が提案されています．

今回紹介する論文では，Variational Autoencoderを用いてEnd-to-Endでナビゲーションを行うためのステアリング角の確率分布を学習する方法を提案しています．さらにおもしろい所として，**End-to-Endで学習したネットワークの出力（確率分布）を用いて自己位置推定を行う**という方法を提案しています．

余談ですが，論文の脚注に「Toyota Research Instituteから支援を受けているが，彼らの意見を完全に反映した訳ではない」という注釈が書かれているのは面白いですね．どうでも良いですが「TRIから援助されている」と書かれると，何となく論文に箔が付くような気もします．



# ネットワーク構成

![network_architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329950/624d2f01-c031-ebc5-92d9-eba2c5c6b010.png)

上図（論文中図2）に，提案ネットワークの構成が示されています．まず前向き，右向き，左向きの3枚のカメラ画像$I$と，経路が与えられていない地図$M_{U}$（Unrouted Map），すなわち走行可能経路を示した地図が入力されます．それぞれ畳み込み層を並列に通過した後に，1つの全結合層に集約されます．なおUnrouted Mapに関しては，他の画像と比べて所有する情報が少ないので，畳み込み層の数が少なくなっています．

本論文では，経路が与えられていない場合のステアリング角$\theta_{s}$，すなわち車両が選択できるステアリング角を混合ガウス分布で表現します．混合数$K$はあらかじめ決めておく必要があり，論文では$K=3$が利用されています．Variational Autoencoderは，混合係数$\phi_{i}$，平均$\mu_{i}$，そして分散$\sigma_{i}$ $(i=1,2,3)$を学習しますので，このネットワークにより出力されるステアリング角の確率分布は$p(\theta_{s}|\theta_{p},I,M_{U})$と表現できます．ここで$\theta_{p}$は車両の姿勢（2次元位置$p_{x}$，$p_{y}$と角度$p_{\alpha}$）を表します．自己位置推定の問題を解くためにこのネットワークを使うのですが，条件に姿勢$\theta_{p}$も含まれていますが，これは「ラフな位置」を示します．この辺りは下で解説します．

また経路つき地図$M_{R}$（Routed Map）が利用可能な場合は，上記の値を予測するための全結合層と，Routed Mapを畳み込みそうに入力した結果を結合し，車両が次に出力すべきステアリング角$\hat{\theta_{s}}$を予測します（図2の右下の部分）．なお，ネットワーク学習のためのコスト関数は論文中の式(2)に示されています．



# End-to-Endナビゲーションネットワークを用いた自己位置推定

本論文の最も面白いと思える部分は，End-to-Endで学習したステアリング角の予測分布を用いて自己位置推定を行うところにあると思います．自己位置推定を行うということは，画像$I$と地図$M$が与えられた下での姿勢$\theta_{p}$の条件付き事後確率分布$p(\theta_{p}|I,M)$を求めなければなりません．しかしネットワークが予測する確率分布は$p(\theta_{s}|\theta_{p},I,M_{U})$になります．ここで周辺化や全確率の定理，ベイズの定理などを利用すると，この2つの式は等式として成り立つそうです．

```math
\begin{align}
p(\theta_{p}|I,M)&=\mathbb{E}_{\theta_{s}}p(\theta_{p}|\theta_{s},I,M)\\
                 &=\mathbb{E}_{\theta_{s}}[\frac{p(\theta_{p},\theta_{s}|I,M)}{p(\theta_{s}|I,M)}]\\
                 &=\mathbb{E}_{\theta_{s}}[\frac{p(\theta_{p},\theta_{s}|I,M)}{\mathbb{E}_{\theta_{p'}}p(\theta_{s}|\theta_{p'},I,M)}]\\
                 &=\mathbb{E}_{\theta_{s}}[\frac{p(\theta_{s}|\theta_{p},I,M)}{\mathbb{E}_{\theta_{p'}}p(\theta_{s}|\theta_{p'},I,M)}p(\theta_{p})]
\end{align}
```

これにより，End-to-Endで学習したネットワークの出力を尤度分布として利用し，自己位置推定を行うことが可能になります．

アルゴリズム1に，自己位置推定のための擬似コードが示されています．入力は画像$I$，地図$M$，そして姿勢に関する事前分布$p(\theta_{p})$となります．なお4行目が「Sample $\theta_{s}$」となっていますが，これは「Sample $\theta_{p}$」の間違いではないかと思います．この事前分布$p(\theta_{p})$は，何かしらの方法で作成されることを前提としており，これはかなり曖昧に与えても良いようです（これがラフな位置の正体）．すなわち本論文で言う自己位置推定とは，ある程度不確かな位置が分かっているときに，その不確かさを軽減させることができる，ということを意味しているといえます．

なお，事前分布$p(\theta_{p})$をどのように決めるかの詳細な議論がないように思われますが，おそらくGPSで初期値のみを利用し，後は推定されたラフな値を再利用しているのだと思います．アブストラクトには「without any GPS prior」とありますので，もしかしたら違うのかもしれませんが...



# 感想

End-to-Endで学習したステアリング角の予測結果を利用して自己位置推定を行うというのは，アイディアとしてとても面白いと思いました．

アルゴリズム1で述べている姿勢に関する事後分布の推定では，姿勢に関する事前分布に対して，ネットワークを使って予測したステアリング角から計算された尤度分布を用いて更新するという「ベイズ推定」が行われているのだと思います（間違っていたらすみません...）．ロボットの自律移動では基本的に「自己位置が決まったのちに，その位置に従って経路計画などを行い次の行動を出力」します．しかしこの論文で提案している方法は，「次の行動の候補群が出力されたので，自己位置が特定できる」というような問題として，自己位置推定の問題を扱っています．ある意味で「逆問題」とも言えると思います．これは「交通ルールの決まった自動車ならでは」のアプローチにも思えます．

一般にベイズ推定における尤度関数とは，ある程度モデル化しやすいものを扱うことが多いです．そのため自己位置推定では，センサ観測をモデル（観測モデル）化し，それを尤度として利用します．ロボット位置と地図が与えられれば，センサ観測をモデル化することは可能です．しかし本論文で使用している尤度計算のためには，ロボット位置$\theta_{p}$，センサ観測$I$，そして地図$M$が与えられた下での制御入力$\theta_{s}$をモデル化しなければなりません．一般にこのモデル化は相当困難だと思いますが，上述の通り自動車のようにルールに決まった行動をするのであれば，そのようなモデル化も可能だとも思えます．しかし，この様なモデル化が困難なことに代わりはなく，深層学習がこの部分のモデル化を行ってくれているので実際に推定ができてしまう，という点においては，非常に面白い論文であると思えます．

最近は深層学習を単に使いましたという論文が多い気もしますが，単に使っただけでなく，出力が従う確率分布も考慮しながら，どのように活用できるかというような方法を探る研究論文は，読んでいて本当に面白いですね．