AI_ML_DL’s diary

人工知能、機械学習、ディープラーニングの日記

Kaggleに挑戦-1

Kaggleに挑戦-1

 Peking University/Baidu - Autonomous Driving

Can you predict vehicle angle in different settings?

 

今回の目標

1.リーダーボードに載ること

2.トップを競えるレベルに到達すること

 

今回は、自動運転に関係するコンペである。

自動運転に関しては、もう完成しているものと思っていて、技術資料に目を通したことがなく、よく知らないので、この機会に、勉強してみようと思う。

今回のテーマは、1枚の画像から車の姿勢(6D pose)を、正確に見積もること。

 

1枚の画像から、リアルタイムで、物体の姿勢を予測する方法に関する文献を調べてみた。

Real-Time Seamless Single Shot 6D Object Pose Prediction, B. Tekin, S. N. Sinha, and P. Fua, arXiv:1711.08848v5 [cs.CV] 7 Dec 2018

6次元姿勢予測:6D pose estimation

YOLO(2次元)に刺激を受け、SSD等を参考にして、PnPアルゴリズムにより3次元化している。3次元の物体を9点で表現している。それは、8つのコーナーと1つの重心からなるバウンディングボックスである。

 

f:id:AI_ML_DL:20191211130805p:plainどのようなアルゴリズムで、このようなことができるのだろうか。ベースになっているYOLOを学習すれば、理解できるかもしれない。

YOLOは2次元で、この論文は、3次元化している。どのようにして3次元化しているのだろうか。

2次元の枠から3次元の枠になると、学習に時間がかかるので、ある関数confidence function c(x)を導入して収束が早くなるようにしているとのこと。

CNNの出力の深さ方向:図1(e)の(9x2+1+C)の意味を把握しよう。9x2はバウンディングボックスの頂点8つと重心1つの計9個の(x,y)座標を示している。Cはclass probability、1はconfidence valueと書かれている。損失関数が、座標成分とconfidenceとclassificationとなっているので、1つはバウンディングボックスのことであるが、confidenceは、・・・

3.2. Training Procedureでは、パラメータの設定値についてYOLOを引用しながら説明しているが、YOLOがわかっていないので、わかりにくい。やはり2次元のバウンディングボックスから始めないとだめかな。

 

You Only Look Once : Unified, Real-Time Object Detection, J. Redmon, S. Divvala, R. Girshick and A. Farhadi in CVPR, 2016

YOLOは下図に示されているように、1つのCNNによって、バウンディングボックスによる位置の特定(枠で囲む)と分類を同時にこなす手法である。 

f:id:AI_ML_DL:20191211184635p:plain

 YOLOは動作が非常に速いので、リアルタイムで動作する。

Fast-RCNNは視野が狭いために、背景を物体と間違える確率が高い。YOLOは視野が広いので背景を物体と誤認する確率はその半分以下である。

自然画像でトレーニングして、絵画画像でテストした場合、R-CNNなどの従来の手法よりも性能が高い。(これをgeneralizableと称している)

最新の検出方法に劣るところもある。特に、物体が小さい場合に劣る。

f:id:AI_ML_DL:20191211202809p:plain

 S x Sのグリッドに分割し、物体の中心が入ったグリッドが物体認識に関与する。

各グリッドはB個のバウンディングボックスを予測し、これらのボックスのconfidence scoreを予測する。confidence scoreは、ボックスが物体をどれだけ正確に捉えているかと、その物体をどれだけ正確に分類しているかを表す。

Bはバウンディングボックスの数、*5は、x, y, w, h,(バウンディングボックスの中心の座標と幅と高さ) confidence。Cはクラス確率。

PASCAL VOCでは、S=7, B=2, C=20(クラスの数)であり、最終的な予測結果は、7x7x(10+C)=7x7x30のテンソルとなる。

f:id:AI_ML_DL:20191211215200p:plain

CNNの後方に、4096ユニットの全結合層と7x7x30の全結合層が接続されている。

この2次元検出の7x7x30=7x7x(10+C)が、6D検出では、13x13x(19+C)となっている。

これで、なんとなくわかったような気になる。

明日は、まず、YOLOの損失関数を理解し、その後で、6D検出の損失関数についても理解を試みることにする。
 

つづく

 

f:id:AI_ML_DL:20191210232509p:plain

style 043

f:id:AI_ML_DL:20191210232557p:plain

DeepDream