Kaggleに挑戦-9
課題1:GitHubのexperiencor / image-to-3d-bboxのプログラムコードを理解すること
課題2:3D Bounding Box Estimation Using Deep Learning and Geometry, A. Mousavian et.al., arXiv:1612.00496v2 [cs.CV] 10 Apr 2017を理解すること
データベース:KITTI left color images of object data set (12 GB)
今日の課題
*入力データの前処理:anchorの計算とanchor, BINの意味、annotationの読み込み
*データベースのチェック
論文中の図面や主要な式とその説明文について、しばし、ながめてみる。
著者らの方法は、2D bounding box を推定し、それをベースに、3D bounding boxを推定しているようである。
2D bbxに3D bbxが内接しているようにみえる。KITTIデータベースは、物体のhright, width, lengthを実物サイズ(メートル単位)で与えており、物体の位置x, y, zも実サイズ(メートル単位)で与えているので、訓練データで学習しているときに、これらの値をうまく組み合わせ、計算することによって、2D bbxから3D bbxの予測を高い精度で行うことができ、それを分岐した3つの全結合層のノードに学習させているのだろう。
さて、テストデータによる予測の際には、当然のことながら、画像が入力されるだけ。それが、CNN層で分類され、それに基づいて2D bbxが推測され、さらに、分岐した3つの全結合層を通過することによって、3D bbxが再現される。というシナリオなのだろうけど、どうしてそのようなことが可能になるのか、わからないな。不思議だな。
annotationをきちんと理解できていない。物体(type)を車に限定して、チェックした。train_2のimageとrabelを突き合わせて確認してみた。type:OK, truncated:OK, occluded:OK, alph:カメラに向かって来る方向がプラス、カメラから離れていく方向がマイナスであることが確認できた。
bbox二次元で、縦375ピクセル、横1242ピクセルにおいて、左上を(0, 0)としてピクセル単位で表されていることを確認した。(KITTIのsensor setupには、カメライメージは1382x512ピクセルとあったので、鵜呑みにしていたが、「ペイント」でデータベースから読み込んだ画像は1242 x 375ピクセルだった。これは、labelの2D bboxの位置とも合う)
小数点以下2桁表示だが、整数で良いのではと思った。dimensionsは、車の実サイズのようで、小数点以下2桁のメートル単位で表示されている。hが1.32から1.51m、wが1.35から1.61m、l(L)3.23から4.44mとなっている。location:物体の位置を小数点以下2桁表示しているとなっているが、車高のyは1.38から2.02m、距離のzは11.21から47.66mと、それらしい値になっているが、xが-6.77から+6.07までの値をとっており、車幅でもないし、よくわからない。符号がマイナスの車は画面の左側、プラスの車は画面の右側を走っている。ryは回転角で、グローバルな回転角すなわち車の進行方向を示しているようである。このあたりを確実なものにするため、Kaggleに挑戦-10で、labelファイルから読み取った数値から、方位や2D bounding box, 3D bounding boxを画像上に重ね書きするプログラムの作成に取り組む。
これは、車の回転角と進行方向との関係を説明するための図である。
これがモデルの計算モデルのブロックダイヤグラムで、CNN層で物体認識し、全結合層で物体の形状や方位を回帰により推測するものである。
ラベルデータが示している2D bbxが左側の映像に重ね書きされ、3D bbxが右側の映像に重ね書きされている。まずは、これと同じものを、画像とラベルのペアから作成するためのプログラムをつくる。
*3D bounding box推定に関する数式とその説明文
*これらの式をきちんと読み解いて、プログラム化することが、学習プログラムを作成する前にやっておくべきことである。
つづく