論文はこちらから。
概要
YOLO v2
とYOLO9000
の発表。
YOLO v2
YOLOから改善されたモデルのことです。最先端の検出方法で他のどの検出方法よりも早く動作します。複数の画像サイズで実行すると、早さと正確性はトレードオフとなります。
YOLO9000
YOLOv2を使って扱うデータセットなどを変更したものです。9000以上の物体の検出と分類をリアルタイムで行います。検出と分類のデータセットのギャップを埋める手法を使いました。(具体的にはImageNetとCOCOのデータをWordTreeをつかって合わせた。)
detection dataを扱う新しい手法
多くのlabelingされたclassification dataをdetection dataとして使う手法を提案しています。
joint training
classification dataとdetection dataを合わせて学習させます。
先行研究との比較
YOLOはFast R-CNNと比べ、localization errorが多かったので、その改善を図っています。また、誤検出を減らすためにmodelを複雑にするのではなく、シンプルなまま改善できないかを模索しています。
技術や手法の特徴
Better
YOLOはFast R-CNNとかと比べるとlocalization errorが多かった背景があります。
その原因は誤検出ではなく、見逃しが多かったことにあります(low recall)。
recallなどはこのページによくまとまっています。False Negativeは見逃し、False Positiveは誤検出です。そこで、ここではrecallの改善とlocalization errorの改善を目的としています。
Batch Normalization
基本的には、各ユニットの出力をminibatchごとにnormalizeした新たな値で置き直すことで、内部の変数の分布(内部共変量シフト)が大きく変わるのを防ぎ、学習が早くなる、過学習が抑えられるなどの効果が得られます。
強化学習でいうところのclipと似ている感じですね。変化幅を制限しています。YOLOv2では全てのconv layerに追加してmAPが2%改善しました。これを取り入れることでdropout層をなくせるみたいです。(overfittingの心配がなくなるため)
High Resolution Classifier
ここでいうResolutionは解像度です。YOLOv2では448 x 448の画像でpretrainを行って、224 x 224でtrainingを行っています。それが解像度が違う物体、恐らく大きさが異なるケースでも検出できる精度を上げているのでしょう。mAP4%改善しています。
Convolutional With Anchor Boxes
画像全体のfeature mapsから予め決められたk個の固定枠(Anchor)を用いて特徴を抽出し、RPNの入力とすることで、各場所において物体候補とすべきかどうかを推定します。
そのため、グリッド内でanchor boxを用いて検出の精度を高めるためのものです。YOLOでは全結合のlayerでbounding boxesの予測をしていましたが、YOLOv2では全結合のlayerを取り除いてanchor boxesを使ってbounding boxesの予測をするように修正しています。
bounding boxを奇数個にしたいがために、448 x 448の入力画像を416 x 416に減少させています。YOLOの畳み込み層で32の要素にダウンサンプリングします。そのため、出力mapは13 x 13(32 * 13 = 416)となります。anchor boxesを使ったらmAPは悪くなった(69.5 -> 69.2)が、recallは改善なりました(81% -> 88%)。
Dimension Clusters
Anchor boxesには問題が2つあります。1つ目は、boxの次元を人が手で決めていた点。これをk平均法(k-means clustering)で自動化しました。k平均法は重心(centroid)で判断するんですね。
人手で決めていた時(Anchor Boxes)よりも改善されました(Cluster IOU)。
Direct location prediction
Anchor boxesの2つ目の問題は、学習の初期はモデルが不安定になること。不安定はlocation(x, y)の予測がうまくできていないことが原因。RPNでは以下のような計算式でboxの位置を計算します。
t_xが1のときは、anchor boxの幅(w_a)の分、右へ移動させ、t_xが-1ならば左へ移動させます。つまりここではanchor boxの移動に対して成約はありません。
こんな感じでbounding boxesの場所とサイズを決定します。
Fine-Grained Features
ResNet
のアイディアを採用して早い段階のlayerでは、26 x 26 x 512のfeature mapを使って13 x 13 x 2048へ移行していきます。サイズを小さくすればするほど、解像度が荒くなるから少しずつ解像度を荒くして特徴量をこぼさないようにしているように見えます。
Multi-Scale Training
inputの画像サイズはランダムで選択します。これがrobustにする秘訣らしいです。ランダムで選択するのは320から608までの32の倍数。10batch毎に選択します。
Faster
VGG16は非常に精度が高いが遅いため、YOLOのフレームワークでは、Googlenet architectureを使っています。確かにその方が早いが、精度が低くなります。
Darknet-19
新しいネットワーク。
Training for classification
initial trainingを224 x 224でやると精度が向上します。
Training for detection
追加した3 x 3の1024filtersのlayerや、3 x 3の512filtersのlayerがdetectionに貢献しています。
Stronger
modelのtrainigにdetection用のデータとclassification用のデータを混ぜて使うことによって強度を上げます。detection用のデータは、dogとかboatというラベルが付与されているが、ImageNetでいうとclassification用のデータにはNorfolk terrierとかYorkshire terrierとかBedlington terrierとか、情報の粒度が異なってきます。
Hierarchical classification
ImageNetのlabelは、WordNetから引っ張ってきており、例えば、Norfolk terrierはdogの中のhunting dogという種類であるとわかるようになっています。(WordNetは言語のデータベース)ただ、木構造ではなく直接的なグラフ構造になっています。例えば、動物 -> 犬 -> 柴犬というのでなく、動物 -> 柴犬と犬 -> 柴犬というような感じです。
その結果、分類毎にsoftmaxが使えるようになる。
Database combination with WordTree
WordTreeを使っていろいろなデータセットを組み合わせることができます。
Joint classification and detection
classificationとdetectionのデータを合わせた大規模なデータで学習した方が精度が向上しました。
検証方法
PASCAL VOC2012で比較。
参考
localization error
場所の誤検出。