はじめに
depth推定系の論文から、わりと初期の
[1] I. Laina, et. al. "Deeper Depth Prediction with Fully Convolutional Residual Networks
", 2016 Fourth International Conference on 3D Vision (3DV)
のまとめ
arXiv:
https://arxiv.org/abs/1606.00373
github:
https://github.com/iro-cp/FCRN-DepthPrediction
tensorflow実装等。
概要
- 単眼RGB画像からdepthを推定する
- モデルはresidualなモジュールを使った全畳み込み層であり、MRF等の後処理等は必要ない
- モデルの後半でup-samplingを使って解像度を上げるが、この際にup-projectonなる仕組みを用いる
- reverse Huber lossを用いる
モデル全体のアーキテクチャ
モデルの全体像は以下。
図の通り、encodeして、その後解像度を上げる形。2列目あたりまではResNet-50を転移学習させたもの。なのでresidualなblockを多段にしたものとなっている。
3列目のup-samplingする部分が本論文の特徴の1つである。
NYU-depth v2 datasetであれば入力サイズを304x228とし、それより少し粗い160x128を出力する。
Up-Projection Blocks
本論文が提案している仕組みの1つ。以下の図で
(a)はun-poolingした後に5x5のカーネルでconvする単純なblock。
これに対し、Up-Projectionなるblockはun-poolingしたのちに2つのbranchに分ける。
一方は5x5カーネルでconvしたのちに3x3カーネルでconvする。もう一方は5x5カーネルでconvするのみ。これをaddし、さらにconvする。
(a)と(c)との精度の差は後述。
(b)と(d)は略。
Reverse Huber Loss
本論文の特徴の1つ。
L2 lossと以下のHuber lossを試している。
\mathcal{B}(x) = \begin{cases}
| x | & | x | \leq c, \\
\frac{x^2 + c^2}{2c} & |x| \geq c.
\end{cases}
つまり、[-c, c] 間で L1 loss、その外側で L2 lossとしている。
ここで c はバッチ内でpredictとtargetとの差の最大値に対し、その1/5と定める。
c = \frac{1}{5}\max_i (| \tilde{y}_i - y_i| )
ざっくり考えると、L2だとpredictとtargetの差が大きい場合に勾配が大きくなるので、大きな差を縮小させる作用が強いが、一方でpredictとtargetとの差が小さい場合はlossも極端に小さくなり、考慮されない。結果、全体がぼやけたlow distortionのdepth mapが形成されるだろう。
そこで、差が小さい場合はL1とし、小さな差もそこそこ重視する、という感じだろうか。
これが NYU depth dataset のようなものとなったときに、効果を発揮するらしい。同 datasetはこんな感じで
long tailな分布だそう。画像内に遠い背景が一部写っているような状況だろうか。
そうした場合に、L2 だけだと近いか遠いかは区分できそうだが、近い中のより近いか、ちょっと遠いかは重視できない。だが、おおよそ距離を正確に欲しいのは手前の椅子とか机とかの物体なので、これでは不都合。
reverse Huber lossだと近いものに対してもより正確にその距離を推定できそう。
実験と結果
1. ablation study的なもの
NYU Depth v2 datasetを使った精度は以下。
ベースとするアーキテクチャに関しては、当然ながらResNetの方がAlexNetやVGGより良い。
またL2 loss と berHu(reverse Huber loss)とを比較した場合、後者の方が微妙に良い。(差はそれほどないね)
さらに、up-convとup-projectionとを比較した場合、後者の方が微妙に良い。(工夫したわりには差が少ない)
2. 他の有名モデルとの比較
以下は他の有名モデルとの比較表で、やはりNYU Depth v2 datasetを用いたもの。
この論文が出た2016年あたりではSOTA。
3. 定性的評価
NYU Depth dataset を用いた場合のdepth推定結果の例は以下。
説明が気にも書いてるが、左から4列目のResNet-50はResNetの全結合層を用いた場合(つまり本提案手法のup-projectを全結合+それをreshapeしてマップを作成に変えたもの)
この時代のモデルとしてはよさげ。