ざっくばらんメモ_25:kaggle bowl2018, Coursera Robotics Perception

kaggle, bowl2018

コンペ
code
まずはtensorflowベースのUNetを用いた手法がkernelに公開されているのでそれに沿って 実装を行っていく。
ただそのまま走らせるのでは面白くないので、いくつかdata augmentation手法を適用して データを増やしたものを用いて学習をする。
ひとまず、そのまま走らせた結果:LB:0.303。
その後、データをいくつか見ると、白黒反転した画像がいくつか含まれている事が分かったので、 data augmentationに白黒反転を追加しテスト。結果:LB:0.341
Leader Boardを見ていると、まだ終盤ではないからか得点が拮抗しておらず、 上位勢においてもばらつきが大きい。
いずれにせよ上位勢はLB0.5を超えているので先は長い。

データをもう少し眺めてみると、比較的白黒に近い画像が多いのに対して、 たまに色がしっかりとついた画像が散在する。
こうした画像に対するロバスト性を上げるための工夫が必要なように思える。

Coursera: Robotics Perception

前回までは非線形最適化を用いたPnP問題などの解法について学んだ。

今回はOptical Flowについて学ぶ。
Optical Flowでは微小変化した2つのposeから得られた画像を用いてその間の変分量を考える。
この変化量を各画像特徴点ごとに求め、そのベクトルを示したものがoptical flowになる。
その変化量は、pose位置の変化量に対応した特徴点のtranslationとrotationに関する変化の和として考える事が出来る。
ここでrotationは深さに独立した値として求まる。
translationは深さに依存するが、深さセンサ搭載のカメラを利用した場合、解くのは簡単になる。
そうでない場合でも、特徴点、点の移動方向、移動量との幾何学的関係を用いて、移動量に関する最小二乗誤差の問題にできる。
この場合移動量をサンプリングして、最も誤差が少なるものを選び取る手法が用いられる。

続いて、Structure from Motion (SfM)について学んだ。
SfMでは、複数の画像を入力として、画像内の物体を3次元復元し、かつ各画像に対応してカメラ位置を推定する。
この場合、物体の特徴点に関する3次元点から各画像の2次元への写像を考え、 その写像の推定値に関する2次元点の写像誤差を最小化する。
この問題はBundle Adjustmentと呼ばれる。
誤差を最小化は勾配法(Gauss-Newton法)が用いられるがそのためには全特徴点と全パラメータに関する、 ヤコビアン行列Jを求め、そのJT*Jの逆行列を計算する必要があり、高コストである。
そこでJに関する変換をいくつか重ねる事で、フレーム間の関係と特徴点間の関係に切り分ける事が可能で、 その事により効率的な計算が可能になる。

SfMに関連した技術としてVisual Odometry (VO)についても学んだ。
VOは複数画像をもとにカメラ位置を推定する点ではSfMに似ているが、 逐次的に前回までの結果から次の画像に関するカメラ位置、つまり軌跡(odometry)を予測していく。
またVSLAMはVOと同一視されるが、VSLAMの場合はさらに復元した3次元特徴を利用した 地図生成までを扱う。
VOにおいても、直近の観測結果を用いてBundle Adjustmentが行われる。
この時、外れ値除去が非常に重要で、どのフレームのどの特徴点対応を用いるかで結果が大きく変わってしまう。
また軌跡を描いていくにあたって、以前訪れた場所に再訪した場合、以前観測した3次元特徴点との対応をとる事も 精度の面で重要で、これはloop closureと呼ばれる。