YOLO

スライディングウィンドウ(従来手法)

ある画像中に目的の画像が含まれているかを判定するために、検出ウィンドウの位置、サイズを変えながら探索する。全ての位置、大きさを探索するのは非常にコストが掛かる。そこで一定間隔ごとに荒く探索し、物体らしい領域のみ詳細に探索したりする。

YOLO(You Only Look Once)

YOLO(You Only Live Once,人生は一度きり)のもじり。
画像を一回DNN処理するだけで、画像に含まれる複数の物体の位置をbounding boxで取得できる。スライディングウィンドウのように画像の位置を一通り探索する方法に比べ一回の演算で済むので大幅に性能が改善される。

推論時の入力と出力

YOLOのDNNへの入力は規定のサイズ(416x416)にリサイズした画像である。YOLOのDNNは以下を出力する。

S x S x (5 x B + C)

ここでSはグリッドの数(論文では7)で、画像を7x7のグリッドに分割したときのそれぞれのグリッドについて、(5 x B + C)の情報が返る。

5はbounding boxの座標(x, y, w, h)と信頼度(confidence)の5値を意味する。(x, y) は、グリッドセルから相対でのbounding boxの中心位置を示す。w, h はグリッドセルのサイズからの相対でのbounding boxの幅と高さを示す。confidenceは物体が存在する信頼度である。

Bはbounding boxの数でYOLOの論文では2である。つまり一つのグリッドセルあたり2つまでに物体を含むことができる。Cは物体の種類で、20なので20種類の物体についてそれぞれである確率を返す。20なのはPascal VOCというデータセットが20クラスのため。

学習

グリッドセルごとにbounding boxを学習するというのは、つまり例えば犬の肩部分の画像が犬の画像全体のどの部分なのか(犬画像における位置)を学習することと言える。


推論

画像を与えると、7x7のグリッドセルごとに2つまでの物体の形状とその分類の確率が返る。複数のグリッドセルにまたがる物体がある場合、複数のグリッドセルがその物体のbounding boxを返すので、それを統合して物体の位置を求める。

物体の形状が2つだが分類の確率は共通である。それぞれのbounding boxごとにCを持つべきな気がするが、理由は分からない。

背景は学習に影響するか

つまり、学習時と同じ背景でないと物体を検知できないのか?
学習の仕組みを考えるとそうであるように思われる。しかしYOLOのデモ動画では、何かの映画のワンシーンの車や人をリアルタイムでbounding box描画しているが、この動画を学習に使ったのではないはず。

YOLOはR-CNNより背景の誤検出(物体が無いのに物体を検出してしまうミス)が少ないとYOLOの論文にある。

仮に、犬を含んでいるグリッドが(尻尾も含めて)6グリッドセルだとすると、その6グリッドセルの画像が犬の位置を学習している。物体を含んでいないグリッドセルは学習に寄与しない。
しかし「物体が無い」ということを学習しているのかもしれない。

物体を含んでいるグリッドセルの背景は直接学習に影響するはずである。おそらく複数のグリッドセルが推論するbounding boxを統合する部分で背景への依存を無くしているのかもしれない。