はじめに
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
公式コードは公開されてないらしい
長くなったので2回にわけます。今回のその(1)は概要やロジック、次回のその(2)はオクルージョン対応や実験結果。
その(2):
https://qiita.com/masataka46/items/23d8652f356361d66c2f
概要
- 単眼RGBのビデオカメラからdepth, 物体のmotion, カメラの内部パラメータを推定するモデル
preliminaries
まず論文中の式(1)導出から
$z$ :フレーム1のdepth
$z'$ :フレーム2のdepth
$p$ :フレーム1の画像上の座標
$p'$ :フレーム2の画像上の座標
$R$ :フレーム1からフレーム2への回転行列
$t$ :フレーム1からフレーム2への並進ベクトル
$K$ :カメラの内部行列
つまり
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座標
フレーム1の正規化座標とワールド座標を一致させると
\begin{eqnarray}
zp &=& KX \\
K^{-1}zp &=& X \tag{M1}
\end{eqnarray}
$X$ :任意の点のワールド座標
フレーム2の正規化座標とワールド座標との関係は
z'p' = K(RX + t_{w \to 2}) \tag{M2}
(M2)に(M1)をぶち込んで
\begin{eqnarray}
z'p' &=& K(RK^{-1}zp + t) \\
z'p' &=& K R K^{-1} zp + Kt \tag{1}
\end{eqnarray}
となり論文中の(1)式と一致。
カメラ内部行列が求まることの根拠
カメラ内部行列を求める際の問題点
例えば上記(1)式の右辺第2項で内部行列 K と 遷移ベクトル t が全く違ってても Kt が正しければ、lossとしては問題なさそう。tildeを間違った推定値として
\tilde{t} = \tilde{K}^{-1}Kt
ならば
\begin{eqnarray}
\tilde{K} \tilde{t} &=& \tilde{K} \tilde{K}^{-1}Kt \\
&=& Kt
\end{eqnarray}
となる。そうするとカメラ内部行列が求まるのか疑問に思える。
しかし著者らの主張では右辺第1項目の制約から求まるそう。
カメラ内部行列が求まることの証明の概要
まず上記(1)式の場合、
\tilde{K} \tilde{R} \tilde{K}^{-1} = KRK^{-1}
とはならないことを示し、次に学習によって焦点距離が
\delta f_x < \frac{2f_x^2}{w^2 r_y} ; \ \delta f_y < \frac{2f_y^2}{h^2 r_x} \tag{3}
となることを示す。ここで
\| \delta f_x \| = \| \tilde{f}_x - f_x \|
である。つまり焦点距離の推定値と実際の焦点距離との差。この差が縮まる -> 焦点距離の推定値が実際の値に収束する、ということ。
後者は 論文Appendix A3 までの証明と A3 から(3)式までの証明とにわける。
(1)式第1項目が間違った K の元では成り立たないことの証明
書きかけ
論文中(1)式から論文Appendix (A3)までの導出
まず論文中(1)式から論文Appendix (A3)を求める。不明点多いです。計算間違ってたら連絡ください
上記(3)式(論文中の(1)式)でrotationに関してはy軸に関する回転のみ考え、またtranslateは無いと仮定する。
まずカメラ内部行列の逆行列は
\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$ とする。
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$ が小さいと考えて(?)、$\cos r_y = 1, \sin r_y = r_y$ とする?
R = \left(
\begin{array}{ccc}
1 & 0 & r_y \\
0 & 1 & 0 \\
- r_y & 0 & 1
\end{array}
\right) \\
以上から、
\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}
1行目と3行目の関係から
\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}
下側を上側にぶち込んで
\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}
これを論文中式(3)
\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$ の形にするには(4)式左辺の()内の形を右辺でも無理やり作るしかなさそう。
\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}
となり、論文中(3)式にかなり近付いた。ここで仮に
p_x = x_0 \tag{6}
を左辺だけに適用すると、上記(5)式は
\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}
となり論文中(3)式に一致する。なぜこの仮定が成り立つ?わかる方いたら連絡ください
Appendix A3式から論文中3式までの導出
ここは導出が書かれているが省略が多く、やはり不明点が多い。
まずAppendix A3 から A5までがよくわからん。とりあえず、これは認めてしまう。
\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$ とすると(7)と一致するので、そのような仮定を置いてるか?
(A5)式から(7)式を引いて
\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)。
\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}
ここで
f_x + \tilde{f}_x) \simeq 2 f_x
とすると
\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}$ なので、
p_x = \frac{w}{2}
という最大値を考えると
\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}
次がよくわからんが、右辺は1より大幅に小さいので
\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"