速度
学習速度
3万枚の画像を50 epoch学習するのにTitan X GPU 1基で約25時間
推論速度
512×256画像で35ms未満 (28 FPS以上) (GPU-CPU間のデータ転送時間込み)
ハイパーパラメータなど
パラメータ数
31 million (ResNetの場合、48 million)
ハイパーパラメータ
\(\alpha_{ap} = 1\), \(\alpha_{lr} = 1\)
前投稿の通り、マルチスケール(4スケール)の視差マップを出力します。
出力される視差は、 \(d_{max}=0.3 \times \)各スケールの視差画像の幅 として、スケールしたsigmoid関数によって\([0, d_{max}]\)に制限されています。
マルチスケールの視差マップを生成するために、2倍のupsamplingを行っているので、結果として、隣接するピクセルの視差はスケール間で2倍変わってきてしまいます。
これを修正するために、\(\alpha_{ds}\)(視差を滑らかにさせるための項)を、各スケールにおいて同程度の平滑化が行えるように\(r\)でスケールさせます。
つまり、\(\alpha_{ds} = \frac{0.1}{r}\)で、ここで\(r\)というのは、donwscaling factor(入力画像の解像度に対して、どの程度downscalingされているか)です。
活性化関数
通常よく使われるReLuではなくelu(exponential linear units)を使用しています。
ReLuだと、中間のスケールの視差が単一の値に固定されてしまうなどの問題があるそうです。
学習
batch sizeは8で、50 epochの学習となっています。
最適化はAdamを使用していて、パラメータは\(\beta_1=0.9, \beta_2=0.999, \epsilon=10^{-8}\)
初期学習率は\(\lambda=10^{-4}\)で、最初の30 epochは固定、そこから10 epoch毎に半減させています。
低解像度のスケールから順に最適化していく(progressive update)よりも、4つのスケールを同時に最適化する方が、安定して収束するようです。
また、ロスの重み付けは各スケールで同じものを用いたほうが、安定するようです。
batch normalizationの精度への貢献はほとんどなかったと述べられています。
Augmentation
Data Augmentation
確率50%で水平方向にフリップして、左右が相対的に正しい位置になるようにスワップさせるAugmentation。
Color Augmentation
確率50%でガンマ値、輝度、色について、それぞれ以下の一様分布からサンプリングした分だけシフトさせるAugmentation。
\(U_{gamma}[0.8, 1.2], U_{brightness}[0.5, 2.0], U_{color}[0.8, 1.2]\)
学習済みモデル
本論文で使用されたデータセット
- Cityscapes 22,973 stereo pairs, KITTIより解像度、画質、多様性に優れている(らしいです)
- KITTI 42,382 rectified stereo pairs/61 scenes/1242×375 pixels
- Make3D 評価用
- CamVid 評価用
- 1080p, 10fpsで撮影したデータセット 60,000 frames
配布されているモデルに関して
- KITTI Split(model_kitti)主に、lossやleft-rightの一貫性の重要性を示すために使われたsplitです。61シーン/42,382枚の校正済みステレオ画像(1242×375)
- 28シーン: KITTIのトレーニングセットからの、200枚の高品質視差画像を評価
- 33シーン: 29,000枚を学習、残りはテスト用
- Eigen Split(model_eigen)こちらもKITTIですが、主に既存手法と比較するために使われたsplitです。
- 29シーン: 評価用
- 32シーン: 22,600枚を学習、残りはテスト用
- Cityscapes(model_cityscapes, model_city2kitti, model_city2eigen)Cityscapesでpre-trainingしたモデルを、Kitti、Eigen、1080p, 10fpsで撮影したデータセットなどで各々fine tuningすることで、より精度があがることが示されています。
- model_city2kitti: Cityscapes(pre-training)+KITTI split(fine-tuning)
- model_city2eigen: Cityscapes(pre-training)+Eigen split(fine-tuning)
テストしたいデータ向けにfine-tuningすることが有効的であると言えます。
例えば、Cityscapes(pre-training)+撮影したデータセット(fine tuning)で学習した場合のデモ(3:49あたりから)
Cityscapes単体での汎化性能
Cityscapesのみを使って学習させたモデルを、他のデータセットで使用してもある程度よい結果が得られるようです。
Make3Dでの結果(論文より引用)
CamVidでの結果(論文より引用) - Resnet50(model_*_resnet)上記のモデルで、Encoder部分をResnet50に変えたものとなっていて、より良い性能が報告されています。
keisuke.kimura in Livox Mid-360をROS1/ROS2で動かしてみた
Sorry for the delay in replying. I have done SLAM (FAST_LIO) with Livox MID360, but for various reasons I have not be...
Miya in ウエハースケールエンジン向けSimulated Annealingを複数タイルによる並列化で実装しました
作成されたプロファイラがとても良さそうです :) ぜひ詳細を書いていただきたいです!...
Deivaprakash in Livox Mid-360をROS1/ROS2で動かしてみた
Hey guys myself deiva from India currently i am working in this Livox MID360 and eager to knwo whether you have done the...
岩崎システム設計 岩崎 満 in Alveo U50で10G Ethernetを試してみる
仕事の都合で、検索を行い、御社サイトにたどりつきました。 内容は大変参考になりま...
Prabuddhi Wariyapperuma in Livox Mid-360をROS1/ROS2で動かしてみた
This issue was sorted....