【苦しみながら理解する深層学習】 YOLO9000: Better, Faster, Stronger

俗に言うYOLO9000YOLO v2はイコールかと思っていまいしたが、そうではなかったですw

どんなもの?

YOLO v2YOLO9000の発表。

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を複雑にするのではなく、シンプルなまま改善できないかを模索した。

技術や手法のキモはどこ?

table2

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)で判断するんですね…
ここがわかりやすかったです。
IOUもちゃんと復習しておきましょう。

人手で決めていた時(Anchor Boxes)よりも改善された(Cluster IOU)。

table1

Direct location prediction

Anchor boxesの2つ目の問題は、学習の初期はモデルが不安定になること。
不安定はlocation(x, y)の予測がうまくできていないことが原因。

RPNでは以下のような計算式でboxの位置を計算する。

式1

t_xが1のときは、anchor boxの幅(w_a)の分、右へ移動させ、t_xが-1ならば左へ移動させる。
つまりここではanchor boxの移動に対して成約はない。

式2

figure3

こんな感じでbounding boxesの場所とサイズを決定する。

Fine-Grained Features

ResNetのアイディアを採用して早い段階のlayerでは、26 x 26 x 512のfeature mapを使って13 x 13 x 2048へ移行していく。
サイズを小さくすればするほど、解像度が荒くなるから少しずつ解像度を荒くして特徴量をこぼさないようにしてるのだろうか。

Multi-Scale Training

inputの画像サイズはランダムで選択する。これがrobustにする秘訣らしい。
10batch毎に選択する。
ランダムで選択するのは320から608までの32の倍数から。

Faster

VGG16は非常に精度が高いが遅いため、YOLOのフレームワークでは、Googlenet architectureを使っている。
確かにその方が早いが、精度が低くなる。

Darknet-19

新しいネットワークを考えた。
table6

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が使えるようになる。

figure 5

Database combination with WordTree

WordTreeを使っていろいろなデータセットを組み合わせることができる。

Joint classification and detection

classificationとdetectionのデータを合わせた大規模なデータで学習した方が精度が向上する。

どうやって有効だと検証した?

PASCAL VOC2012で比較。

table4

次に読むべき論文は?

  • SDD: YOLOOよりも精度が高いらしい
  • Faster R-CNN: bounding boxの予測方法をみたい
  • Googlenet: ここで使っているフレームワークだから
  • 論文ではないが一度YOLOv2の実装をみる

その他

localization error

場所の誤検出。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です