論文まとめ：Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos

# はじめに
AAAI2019より以下の論文
[1] V. Casser, et. al."Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos"
のまとめ

arXiv:
https://arxiv.org/abs/1811.06152

コード：
https://github.com/mattevenson/struct2depth

# 概要
- 単眼RGBカメラの動画とカメラの内部パラメータのみからdepthやカメラの外部行列を推定するモデル
- backgraoundのみならず移動物体の次フレームも予測し、学習する


# depthとego-motionパラメータを推定し、次フレームを再構築する部分

まず定義。
$I\_i \in \mathbb{R}^{H \times W \times 3}$ ：動画の i フレーム
$K \in \mathbb{R}^{3 \times 3}$ ：カメラの内部行列
$\theta : \mathbb{R}^{H \times W \times 3} \to \mathbb{R}^{H \times W}$ ：画像を入れてdepth mapを出力するencoder-decoderネットワーク
$D\_i = \theta (I\_i)$ ：depth map
$\psi\_E : \mathbb{R}^{H \times W \times 3} \to \mathbb{R}^6$ ：画像を入れてカメラのrotate 3つとtranslate 3つの計６つのパラメータを出力する関数（ニューラルネット）。
$E\_{1 \to 2} = (t\_x, t\_y, t\_z, r\_x, r\_y, r\_z) = \psi\_E (I\_1, I\_2)$ ：frame 1から2へのカメラ遷移の６つのパラメータ
$\hat{I}\_{i \to j}$ ：カメラ遷移のパラメータとiフレーム画像、jフレーム目のdepth mapから再構築されたjフレームの画像
$\phi (I\_i, D\_j, E\_{i \to j}) \to \hat{I}\_{i \to j}$ ：その再構築する関数（ニューラルネット）

i フレームと j フレームにおけるworld座標との関係はそれぞれ

```math
\begin{eqnarray}
(x, y, 1)^T&=& D^{xy}_i K E_{w \to i}  (X, Y, Z, 1)^T \tag{1}\\ 
(\hat{x}, \hat{y}, 1)^T&=&  D^{\hat{x} \hat{y}}_j K E_{w \to j} (X, Y, Z, 1)^T \tag{2}\\

\end{eqnarray}
```

なので

```math
\begin{eqnarray}
(\hat{x}, \hat{y}, 1)^T&=& D^{\hat{x}  \hat{y}}_j K E_{w \to j}  E_{i \to w} K^{-1} D^{xy}_i (x, y, 1)^T \tag{3}\\
&=& D^{\hat{x}  \hat{y}}_j K E_{i \to j} K^{-1} D^{xy}_i (x, y, 1)^T \tag{4}\\

\end{eqnarray}
```

論文中の式と微妙に違うね。$D^{\hat{x}  \hat{y}}_j D^{xy}_i = D_j^{xy}$ としてる？？？<font color="blue">わかる方いたら連絡ください</font>

# loss

## loss 1) 再構築loss

実際のフレーム j とフレーム i から推定した j との差 $\| \hat{I}\_{i \to j} - I\_j \|$ を再構築lossとして求めるが、物体が消えたり出現したりする現象を考慮したい。フレーム１から２とフレーム３から２とのいずれかはこのような現象がないと考えて

```math
L_{rec} = \min (\| \hat{I}_{1 \to 2} - I_2\| , \| \hat{I}_{3 \to 2} - I_2\| )
```

とする。

## loss 2) 類似性 loss
[2]で提示されているSSIM(sturactural SIMilality index)というものを用いている。（詳細は略）

## loss 3) 深度平滑 loss
本論文では[3]で使われている Inverse depth smoothness loss というものを用いている。

```math
L_{sm}^{(i)} = e^{- \nabla^2 I_i} (\| \partial_{xx} D_i\| + \| \partial_{xy} D_i\|  + \| \partial_{yy} D_i\| )

```
まずexpを除いて考えると、Depth mapの曲率の絶対値をとっているので、曲率が小さくなる・・・depth mapが滑らかに変化するようになるだろう。

expの部分は画像のラプラシアンの負をとってるので、画素値の曲率が高いとexp部分は小さくなる・・・つまり画素値が急激に変化するような物体の境目などはほぼ０となるようにしている。

つまり、物体の境目はdepthの曲率も大きくなるべきなので、この部分をlossの対象から排除している。

## トータルのloss
これらに各係数をかけてトータルのlossとうる。

```math
L = \alpha_1 \sum^3_{i=0} L_{rec}^{(i)} + \alpha_2 L^{(i)}_{ssim} + \alpha_3 \frac{1}{2^i} L^{(i)}_{sm}
```

# motion model
本論文の特徴である motion modelな部分。求めるものは物体の画像を入れて外部パラメータ６つを推定するモデル $\psi\_M$。

ただ難しいのは、フレーム 1 からフレーム 2 への物体の画像上の位置の移動量 $(\Delta x , \Delta y)$ は物体自体のワールド座標上での変位とカメラの変位両方の影響がある点。

よって、先にカメラの移動量を求める必要がある。

まずフレーム１、２、３に対し、インスタンス・セグメンテーションモデル等で推定した移動物体 i のマスク画像を用意する。

```math
(S_{i,1}, S_{i,2}, S_{i,3}) \in \mathbb{N}^{H \times W}
```

フレーム k における画像中全ての移動物体を抜いたbackgraoundを１としたbinary maskは

```math
O_0 (S_k) = 1 - \cup_i S_{i,k} 
```

とする。また各物体の部分を1としたmaskはそのまま

```math
O_j (S_k) = S_{j,k}
```

とする。

backgraoundのマスクをフレーム間でpixel-wiseにかけた

```math
V = O_0 (S_1) \odot O_0 (S_2) \odot O_0 (S_3)
```

なる総合マスクを使い、backgraoundの外部パラメータを求める。

```math
E_{1 \to 2}, E_{2 \to 3} = \psi_E (I_1 \odot V, I_2 \odot V, I_3 \odot V)
```

つまり画像から移動物体を除去しているわけだが、２フレーム目から１フレーム目における物体位置も除去していることになる。

この外部パラメータを使ってフレーム１からのフレーム２予測画像

```math
\hat{I}_{1 \to 2}
```

やフレーム３からのフレーム２予測画像

```math
\hat{I}_{3 \to 2}
```

が求まる。

同様に外部パラメータを使ってフレーム１における物体 i のマスク画像 $S_1$ を遷移させれば

```math
\hat{S}_{1 \to 2}
```

という予測マスクが求まる。同様に $\hat{S}\_{3 \to 2}$ も求まる。

ここで

```math
\hat{I}_{1 \to 2} \odot O_i (\hat{S}_{1 \to 2})
```

なる値を考えると、これはフレーム１にあった物体に対し、それが静止していると考えて、カメラの動きにのみよって画像上の位置が変化したフレーム２の物体になる。

同様に

```math
\hat{I}_{3 \to 2} \odot O_i (\hat{S}_{3 \to 2})
```

はフレーム３にあった物体に対し、それが静止していると考えて、カメラの動きにのみよって画像上の位置が変化したフレーム２の物体になる。

これらの情報と実際のフレーム２の物体位置（つまり物体自体も動くことによって、上記２つの値とは異なる物体位置）を入力すれば、その差分から動きを推定してくれるだろう。

```math
M^{(i)}_{1 \to 2}, M^{(i)}_{2 \to 3} = \psi_M ( \hat{I}_{1 \to 2} \odot O_i(\hat{S}_{1 \to 2}), I_2 \odot O_i (S_2), \hat{I}_{3 \to 2} \odot O_i (\hat{S}_{3 \to 2}))
```

ただし、ここで出てくる $M^{(i)}\_{1 \to 2}, M^{(i)}\_{2 \to 3} \in \mathbb{R}^6$ は物体を固定すると考えた際のカメラの外部パラメータ。

この推定した物体の動きを考慮して再構築lossを修正すると

```math
\hat{I}_{1 \to 2}^{(F)} = \hat{I}_{1 \to 2} \odot V + \sum^N_{i=1} \hat{I}_{1 \to 2}^{(i)} \odot O_i (S_2)
```

となる。１項目は移動物体部分を除去したbackgraoundの再構築画像、２項目は移動物体自体の予測画像。

# Imposing Object Size Constrains
例えばKITTI datasetのような車載カメラから撮影した動画だと、目の前の車は画像上の位置が変化しない場合が多い。

このとき、直前の車は無限遠にあるため変化しないと誤った判断をすることがある。つまり無限遠の無限大の大きさの物体だと認識されている。

この対応策として、事前知識を利用して車の大きさ等を教えてやれば良い。

$p$ 対象物体のワールド座標上の実際の高さ
$h$ 画像上の対象物体の高さ
$f$ 焦点距離
$D\_{approx}(p;h) \sim f\_y \frac{p}{h} $ これら変数から計算される対象物体のdepthの近似値

![スクリーンショット 2021-03-12 5.57.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/b9bb5630-8e0c-4541-d5f2-df14e537839b.png)


とすると、以下のざっくりな絵で考えると

```math
\begin{eqnarray}
f:D_{approx} &\sim& h:p\\
D_{approx} \ h &\sim& fp \\
D_{approx} &\sim& f \frac{p}{h} \\
\end{eqnarray}
```

この $D\_{approx}(p;h)$ を使って



```math
L_{sc} = \sum^N_{t=1} \| \frac{D \cdot O_i(S)}{\bar{D}} - \frac{D_{approx} (p_{t(i)};h(O_i(S)))}{\bar{D}} \|

```

なるものを考える。

右辺絶対値内の第１項は予測した物体 i のdepth。第２項は事前情報から算出されるdepthの近似値。

これらを最小化させるよう loss に組み込めば、対象物体のdepthは無限遠にある、という誤った判断をしないだろう。

# test time refinement
本論文の特徴の１つ。

本モデルはビデオの映像とカメラの内部行列があれば逐次学習できるので、実際やってみたところ、精度が上がったそう。


# 実験と結果
## 定性的評価
![struct2depth_img01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/e049e3c1-d8f6-7be2-995b-bb22622a4510.png)

KITTI datasetを用いての推論結果。６行目が本手法。他の直近SOTAな手法と比べてもかなり良い。

## 定量的評価

![struct2depth_img02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/db7a8ef7-5315-d104-7d18-17c8e6ca4be0.png)

同じく KITTI datasetに対して推論させた場合の精度類。

M（motion modelを使った場合）とR（online refinement）とを使った場合はどの評価手法においても既存手法を上回っている。

# reference
[2] Wang, Z.; Bovik, A. C.; Sheikh, H. R.; and Simoncelli, E. P. 2004. Image quality assessment: from error visibility to struc- tural similarity. Transactions on Image Processing.

[3] Wang, C.; Buenaposada, J. M.; Zhu, R.; and Lucey, S. 2018. Learning depth from monocular videos using direct methods. CVPR.