論文まとめ：Depth from Videos in the Wild: Unsupervised Monocular Depth Learning from Unknown Cameras の（１）

# はじめに

ICCV2019より以下の論文
[1] A. Gordon, et. al. "Depth from Videos in the Wild: Unsupervised Monocular Depth Learning from Unknown Cameras" ICCV2019.
のまとめ

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

公式コードは公開されてないらしい

<font color="blue"> 長くなったので２回にわけます。今回のその（１）は概要やロジック、次回のその（２）はオクルージョン対応や実験結果。</font>

その（２）：
https://qiita.com/masataka46/items/23d8652f356361d66c2f

# 概要
- 単眼RGBのビデオカメラからdepth, 物体のmotion, カメラの内部パラメータを推定するモデル

# preliminaries
まず論文中の式（１）導出から

$z$ :フレーム１のdepth
$z'$ :フレーム２のdepth
$p$ :フレーム１の画像上の座標
$p'$ :フレーム２の画像上の座標
$R$ :フレーム１からフレーム２への回転行列
$t$ :フレーム１からフレーム２への並進ベクトル
$K$ :カメラの内部行列
つまり

```math
K = \left(
    \begin{array}{ccc}
      f_x & 0 & x_0 \\
      0 & f_y & y_0 \\
      0 & 0 & 1
    \end{array}
  \right)
```

ここで
$f$ :焦点距離
$x_0$ :画像中心のx座標
$y_0$ :画像中心のy座標


フレーム１の正規化座標とワールド座標を一致させると

```math
\begin{eqnarray}
zp &=& KX \\
K^{-1}zp  &=& X \tag{M1}
\end{eqnarray}
```

$X$ :任意の点のワールド座標

フレーム２の正規化座標とワールド座標との関係は

```math
z'p' = K(RX + t_{w \to 2}) \tag{M2}
```

(M2)に(M1)をぶち込んで

```math
\begin{eqnarray}
z'p' &=& K(RK^{-1}zp + t) \\
z'p' &=& K R K^{-1} zp + Kt \tag{1}
\end{eqnarray}
```

となり論文中の（１）式と一致。

# カメラ内部行列が求まることの根拠

## カメラ内部行列を求める際の問題点

例えば上記（１）式の右辺第２項で内部行列 K と 遷移ベクトル t が全く違ってても Kt が正しければ、lossとしては問題なさそう。tildeを間違った推定値として

```math
\tilde{t} = \tilde{K}^{-1}Kt
```

ならば

```math
\begin{eqnarray}
\tilde{K} \tilde{t} &=& \tilde{K} \tilde{K}^{-1}Kt \\
 &=& Kt 
\end{eqnarray}
```

となる。そうするとカメラ内部行列が求まるのか疑問に思える。

しかし著者らの主張では右辺第１項目の制約から求まるそう。

## カメラ内部行列が求まることの証明の概要

まず上記（１）式の場合、

```math
\tilde{K} \tilde{R} \tilde{K}^{-1} = KRK^{-1}
```

とはならないことを示し、次に学習によって焦点距離が


```math
\delta f_x < \frac{2f_x^2}{w^2 r_y} ; \ \delta f_y < \frac{2f_y^2}{h^2 r_x} \tag{3}
```

となることを示す。ここで

```math
\| \delta f_x \|  = \| \tilde{f}_x - f_x \|
```

である。つまり焦点距離の推定値と実際の焦点距離との差。この差が縮まる -> 焦点距離の推定値が実際の値に収束する、ということ。

後者は 論文Appendix A3 までの証明と A3 から(3)式までの証明とにわける。

## （１）式第１項目が間違った K の元では成り立たないことの証明

<font color="blue"> 書きかけ </font>

## 論文中（１）式から論文Appendix （A3）までの導出

まず論文中（１）式から論文Appendix （A3）を求める。<font color="blue">不明点多いです。計算間違ってたら連絡ください</font>

上記（３）式（論文中の（１）式）でrotationに関してはy軸に関する回転のみ考え、またtranslateは無いと仮定する。

まずカメラ内部行列の逆行列は

```math
\begin{eqnarray}
K^{-1} &=& \left(
    \begin{array}{ccc}
      f_x & 0   & x_0 \\
      0   & f_y & y_0 \\
      0   & 0   & 1
    \end{array}
  \right)^{-1} \\

&=& \frac{1}{f_x f_y} 
\left(
    \begin{array}{ccc}
      f_y & 0   & -x_0 f_y \\
      0   & f_x & -y_0 f_x \\
      0   & 0   & f_x f_y
    \end{array}
  \right) \\

&=&  
\left( 
    \begin{array}{ccc}
      \frac{1}{f_x} & 0   & -\frac{x_0}{f_x} \\
      0   & \frac{1}{f_y} & -\frac{y_0}{f_y} \\
      0   & 0   & 1
    \end{array}
  \right) \\
\end{eqnarray}
```

次に回転行列 R だが、先に述べたように y 軸周りの回転角を $r_y$ とする。

```math
R = \left(
    \begin{array}{ccc}
      \cos r_y & 0   & \sin r_y \\
      0   & 1 & 0 \\
      -\sin r_y   & 0   & \cos r_y
    \end{array}
  \right) \\
```

$r_y$ が小さいと考えて<font color="blue">（？）</font>、$\cos r\_y = 1, \sin r\_y = r\_y$ とする？

```math
R = \left(
    \begin{array}{ccc}
      1 & 0   & r_y \\
      0   & 1 & 0 \\
      - r_y   & 0   & 1
    \end{array}
  \right) \\
```

以上から、

```math
\begin{eqnarray}
z' \left(
    \begin{array}{c}
      p_x' \\
      p_y' \\
      1
    \end{array}
  \right)
 &=& \left(
    \begin{array}{ccc}
      f_x & 0   & x_0 \\
      0   & f_y & y_0 \\
      0   & 0   & 1
    \end{array}
  \right)
 \left(
    \begin{array}{ccc}
      1 & 0   & r_y \\
      0   & 1 & 0 \\
      - r_y   & 0   & 1
    \end{array}
  \right)
 \left(
 \begin{array}{ccc}
      \frac{1}{f_x} & 0   & -\frac{x_0}{f_x} \\
      0             & \frac{1}{f_y} & -\frac{y_0}{f_y} \\
      0             & 0             & 1
    \end{array}
  \right) z
 \left(
    \begin{array}{c}
      p_x \\
      p_y \\
      1
    \end{array}
  \right) \\


&=& \left(
    \begin{array}{ccc}
      f_x - x_0 r_y & 0   & f_x r_y + x_0 \\
      -y_0 r_y   & f_y & y_0 \\
      -r_y   & 0   & 1
    \end{array}
  \right)
 \left(
 \begin{array}{ccc}
      \frac{1}{f_x} & 0   & -\frac{x_0}{f_x} \\
      0             & \frac{1}{f_y} & -\frac{y_0}{f_y} \\
      0             & 0             & 1
    \end{array}
  \right) z
 \left(
    \begin{array}{c}
      p_x \\
      p_y \\
      1
    \end{array}
  \right) \\


&=& \left(
    \begin{array}{ccc}
      1- \frac{x_0 r_y}{f_x} & 0   & \frac{x_0^2 r_y}{f_x} + f_x r_y \\
      -\frac{y_0 r_y}{f_x}   & 1 & \frac{x_0 y_0 r_y}{f_x} \\
      -\frac{r_y}{f_x}   & 0   & \frac{x_0 r_y}{f_x} + 1
    \end{array}
  \right)
 z

 \left(
    \begin{array}{c}
      p_x \\
      p_y \\
      1
    \end{array}
  \right) \\

&=& 
 z
 \left(
    \begin{array}{c}
      p_x - \frac{x_0 r_y}{f_x} p_x + \frac{x_0^2 r_y}{f_x} + f_x r_y  \\
      - \frac{y_0 r_y}{f_x} p_x + p_y + \frac{x_0 y_0 r_y}{f_x} \\
      -\frac{r_y}{f_x} p_x + \frac{x_0 r_y}{f_x} + 1
    \end{array}
  \right) \\

&=& 
 z \frac{1}{f_x}
 \left(
    \begin{array}{c}
      f_x p_x - x_0 r_y p_x + x_0^2 r_y + f_x^2 r_y  \\
      - y_0 r_y p_x + f_x p_y + x_0 y_0 r_y \\
      -r_y p_x + x_0 r_y + f_x
    \end{array}
  \right) \\

\end{eqnarray}
```

１行目と３行目の関係から

```math
  \begin{cases}
   z' p_x' = z \frac{1}{f_x} ( f_x p_x - x_0 r_y p_x + x_0^2 r_y + f_x^2 r_y ) \\
   z' = z \frac{1}{f_x} (-r_y p_x + x_0 r_y + f_x)
  \end{cases}
```

下側を上側にぶち込んで

```math
\begin{eqnarray}
(-r_y p_x + x_0 r_y + f_x) p_x' &=& f_x p_x - x_0 r_y p_x + x_0^2 r_y + f_x^2 r_y  \tag{4}\\

\end{eqnarray}
```

これを論文中式（３）

```math
\Delta p_x = p_x' - p_x = r_y f_x + \frac{r_y (p_x - x_0)^2}{f_x}
```

にもっていくため変形する。

$p\_x' - p\_x$ の形にするには（４）式左辺の（）内の形を右辺でも無理やり作るしかなさそう。

```math
\begin{eqnarray}
(-r_y p_x + x_0 r_y + f_x) p_x' &=& f_x p_x - x_0 r_y p_x + x_0^2 r_y + f_x^2 r_y \\
&=& (f_x p_x + x_0 r_y p_x - r_y p_x^2 ) - 2 x_0 r_y p_x + r_y p_x^2 + x_0^2 r_y + f_x^2 r_y \\
(-r_y p_x + x_0 r_y + f_x) (p_x' - p_x) &=& - 2 x_0 r_y p_x + r_y p_x^2 + x_0^2 r_y + f_x^2 r_y \\
(-r_y p_x + x_0 r_y + f_x) (p_x' - p_x) &=& f_x^2 r_y + r_y (p_x - x_0)^2 \tag{5}\\
\end{eqnarray}
```

となり、論文中（３）式にかなり近付いた。ここで仮に

```math
p_x = x_0 \tag{6}
```

を左辺だけに適用すると、上記（５）式は

```math
\begin{eqnarray}
f_x (p_x' - p_x) &=& f_x^2 r_y + r_y (p_x - x_0)^2 \\
\Delta p_x &=& f_x r_y + \frac{r_y (p_x - x_0)^2 }{f_x}  \tag{7}
\end{eqnarray}
```

となり論文中（３）式に一致する。<font color="blue">なぜこの仮定が成り立つ？わかる方いたら連絡ください</font>

## Appendix A3式から論文中３式までの導出
ここは導出が書かれているが省略が多く、やはり不明点が多い。

まずAppendix A3 から A5までがよくわからん。とりあえず、これは認めてしまう。

```math
\Delta  \tilde{p}_x = r_y f_x + \frac{r_y f_x (p_x - x_0)^2}{\tilde{f}_x^2} \tag{A5}
```

チョー適当だが、（A5）式で $f\_x = \tilde{f}\_x$ とすると（７）と一致するので、そのような仮定を置いてるか？

（A5）式から（７）式を引いて

```math
\Delta \tilde{p}_x - \Delta p_x = r_y f_x (p_x - x_0)^2 \frac{1}{\tilde{f}_x^2} - \frac{1}{f_x^2} \tag{A6}

```

次に(A6)から(A7)。

```math
\begin{eqnarray}
\Delta \tilde{p}_x - \Delta p_x &=& r_y f_x (p_x - x_0)^2 \frac{1}{\tilde{f}_x^2} - \frac{1}{f_x^2} \tag{A6} \\
 &=& r_y f_x (p_x - x_0)^2 \frac{(f_x - \tilde{f}_x)(f_x + \tilde{f}_x)}{f_x^2  \tilde{f}_x^2} \\

\end{eqnarray}
```

ここで

```math
f_x + \tilde{f}_x) \simeq 2 f_x
```

とすると

```math
\begin{eqnarray}
\Delta \tilde{p}_x - \Delta p_x &=& r_y f_x (p_x - x_0)^2 \frac{(f_x - \tilde{f}_x) 2f_x^2}{f_x^2  f_x^2} \\
 &=& r_y (p_x - x_0)^2 \frac{(f_x - \tilde{f}_x)}{f_x^2} \tag{A7} \\
\end{eqnarray}
```

とAppendix  A7 式と一致する。

次にA7式からA8式。

A7の右辺 $(p\_x - x\_0)^2$ の最大値を考える。

$x\_0 \simeq \frac{w}{2}$ なので、

```math
p_x = \frac{w}{2}
```
という最大値を考えると

```math
\begin{eqnarray}
\Delta \tilde{p}_x - \Delta p_x &=& r_y (p_x - x_0)^2 \frac{(f_x - \tilde{f}_x)}{f_x^2} \tag{A7} \\
&<& \frac{r_y w^2}{wf_x^2} (f_x - \tilde{f}_x) \tag{A8}
\end{eqnarray}
```

次がよくわからんが、右辺は１より大幅に小さいので

```math
\begin{eqnarray}
\frac{r_y w^2}{wf_x^2} (f_x - \tilde{f}_x) &\ll& 1 \\
\| f_x - \tilde{f}_x \| &=& \| \delta f_x \| \ll \frac{2f_x^2}{w^2 r_y} \tag{A9}
\end{eqnarray}
```

とA9となるらしい。










# reference
[2] P. Fischer, "FlowNet: Learning Optical Flow with Convolutional Networks"