キカベン
機械学習でより便利な世の中へ
G検定対策
お問い合わせ
   

YOLOv1:You Look Only Onceの最初のバージョンを解説します

thumb image

YOLO(You Look Only Once)はワシントン大学Joseph Redmonらによって開発された物体検出深層学習モデルです。ほぼ同時期に発表されたFaster R-CNNRoss Girshickが共同研究者として名を連ねています。

ちなみに、YOLOの最初の論文arXivで発表された際、Ross GirshickはMicrosoftの研究チームに在籍していました。Joseph Redmonが在籍しているワシントン大学もシアトルにあり、マイクロソフトのオフィスに近いので彼らの間には親しい交流があったのかもしれません(憶測ですが)。

YOLOとFaster R-CNNには構造的に似たところもありますが、違いが多くあります。特に注目すべき点はYOLOの方がはるかにスピードが速くなっているところです。この記事では、この辺りを詳しく解説します。

YOLOの論文の第4版がarXivに発表された際にはRoss GirshickはFacebookの研究チームに移籍しています。それと関連があるかは分かりませんが、YOLOv2の論文にはRoss Girshickの名前はありません。研究者として別の道を辿ったと思われますが、Ross GirshickはFaster R-CNNを改良してMask R-CNNへと発展させたのに対し、Joseph Redmonは研究をやめる旨を発表しています。

この記事では、上記のバージョンのYOLOをYOLOv1と呼び、その後のバージョンと区別します。Joseph RedmonはYOLOv3まで開発しました。現状のところYOLOと名の付くモデルにはYOLOv5までありますが、Joseph Redmonによるものではありません。

1. YOLOv1の全体像🔝

YOLOv1の構造は非常にシンプルです。入力画像(448×448ピクセル)に畳み込み処理と最大値プーリングを繰り返し施して7×7の大きさまで圧縮します。その際に抽出された特徴量は1024チャンネルの特徴マップになっています。下図では右から3番目のところまでが畳み込みと最大値プーリングになっています。

その後に特徴マップがフラット化され、全結合層による物体位置(矩形領域)とクラスの確率の両方に対しての回帰予測を行なっています。大まかな仕組みとしてはこれだけです。

画像元:論文

あとは、NMS(Non-Maximum Suppression)によって物体位置(矩形領域)の重なりを取り除く処理が続きます。

YOLOとFaster R-CNNをざっくり比べると、畳み込みによる特徴マップを全結合層に渡して物体位置やクラス確率の予測へ使うという流れがお互い良く似ています。しかし、領域選定などを分けて考えないYOLOの方がより単純な構造になっており、まさに「You Look Only Once(一度しか見ない)」になっていると言えます。YOLOのスピードは条件によってはFaster R-CNNの6倍になるケースもあります。ただし、精度(mAP)で比べるとYOLOよりもFaster R-CNNの方が成績が良くなっています。

なお、Faster R-CNNで見られたアンカーはYOLOv1にはありません(YOLOv2でアンカーは導入されました)。では、どのようにしてYOLOv1は物体位置の予測をしているのでしょうか。

2. YOLOv1の物体位置予測の仕組み🔝

YOLOv1の最後の畳み込み層から全結合層の部分を拡大しました。

畳み込みからの特徴マップ(7x7x1024)をフラット化し全結合層を2回通すことで1470次元のベクトルになります。そのベクトルを7x7x30に形状変換(reshape)したものが、入力画像を7×7のグリッド(セル)に分割したものに対応します。

ここで重要なのは、全てのセルに対して入力画像全体からの特徴量を全結合層によって集約していることです。これによってYOLOv1では画像全体から必要な情報を見て各々のセルで物体位置やクラス確率を計算していると言えます。

その一方、Faster R-CNNでは領域選定された場所の中の特徴量だけを使って各々の物体位置とクラス確率を判断していました。このため、Faster R-CNNはYOLOv1よりも背景を誤認識して物体だと予測することが多かったそうです。

下図の一番左のように入力画像を7×7に分割したセルを考えます。セルの範囲に物体の中心がきた場合、そのセルでの予測が物体の教師データと比べれらることになります。よって各セルごとに複数の物体の位置(矩形領域)とクラス確率を予測し、最後にNMS(non-maximum suppression)処理を行うという手順です。

画像元:論文

YOLOv1をPascal VOCで訓練・評価する際に、各セルごとに2つの物体の予測をしました。物体ごとに5つの数値を計算します。まず、自信度(confidence score)で、これは物体がそのセルに対応した位置にあるかどうかを表します。

もし、物体の中心点がそのセルの中にあるとしたら、そこには物体があると考えます。物体の大きさがセルよりも大きくなる場合にも対応できます。

さらに、物体の位置を矩形領域$(x, y, w, h)$で予測します。物体の中心の横と縦の位置と物体の幅と高さになります。横$x$縦$y$の位置はセルのサイズを基準に位置を0から1の数値で表したもので、幅$w$と高さ$h$の値は入力画像の幅と高さに対する割合になっており、これも0から1の値をとります。

各セルごとに2つの物体の予測をするので合計10の数値を物体位置として計算します。さらに、Pascal VOCでは20のクラスがあるので20個の確率を予測します。よって合計30の数値を7×7のセルに対して計算するので最後のブロックが7x7x30になっています。

なお、自信度(上図のc)は、$P(\text{object}) * \text{IoU}_{\text{pred}}^{\text{truth}}$と定義されています。もし、オブジェクトがないと予測したら$P(\text{object})$はゼロになります。絶対に物体があると予測するなら1になります。

IoUの部分は予測した矩形領域が教師データとどのくらいマッチしているかを予測したものです。これが0なら全くマッチしていない、1なら完全にマッチしていると予測していることになります。

$P(\text{object})$とIoUの両方を掛け合わせて0から1の値になり、1であれば自信満々(絶対物体があるし、位置も正確だ)といったところでしょうか。この自信度を二つ予測して高い方を採用します。

クラス確率は$P(\text{class}_i|\text{object})$と条件付き確率になっています。つまり、そのセル内に物体があるという条件のもとに、クラスごとに確率を予測しています。自信度とクラス確率を掛け合わせると以下のようになります。

$P(\text{class}_i|\text{object})*P(\text{object})*IoU_{\text{pred}}^{\text{truth}} = P(\text{class}_i)*IoU_{\text{pred}}^{\text{truth}}$

あるクラスに対する確率と物体位置の正確さの積の予測になっています。

3. YOLOv1の限界🔝

論文の中で、Joseph RedmonはYOLOv1の限界について解説しています。

  • セル一つに対して物体位置を2つ予測しますが、クラス確率は最大のものを選ぶので一つになります。このため物体が近くに複数ある場合に予測がうまくできません。例えば、小さい鳥がたくさん集まっている場合などです。
  • 物体位置(矩形領域)を予測するようにデータから学習するので、形が普段と違ったりすると対応しきれていません。(おそらく動物の姿勢とかが通常と違ったりした場合だと思われます)
  • 最終的な特徴マップの段階ではかなり圧縮されているので細かいものを判断できません。
  • 大きな物体の位置の誤差は、小さな物体の位置の誤差と比べて重要度が異なるので、訓練の際の誤差計算に工夫が必要です。論文では、これに対して部分的に物体の幅と高さの平方根を予測する(損失関数に2乗誤差を使っているので)ことで対応していますがまだ満足ではなかったようです。

4. Fast YOLO🔝

YOLOv1は45FPS(毎秒処理できる画像の数)でFaster R-CNNが7FPSだったのに対してとても高速です。さらに、精度と引き換えに畳み込み層の数を減らすことでスピードを速くしたものがFast YOLOと呼ばれています(この名前の付け方はズバリFast R-CNNの影響でしょう)。24層の畳み込みを9層にまで減らしたFast YOLOは155FPSになっていますが、mAPを比べるとYOLOv1は63.4%だったに対しFast YOLOは52.7%になっています。

下表は他のモデルとも速度比較したものです。

画像元:論文

「Less Than Real-Time」から下は「リアルタイムじゃない」モデルと分類されており全てのR-CNN系モデルは入っています。「Ross Girshickは本当にこの論文に参加していたのでしょうか?」と思ってしまいます。30FPSより下はリアルタイムではないということなのでしょうけど。

YOLO VGG-16というのはYOLOv1のバックボーン(畳み込み層などで特徴量を抽出する部分)にVGG-16を使ったものです。mAPは少し良くはなっていますがかなり遅いなっています。それにしても、Faster R-CNN VGG-16はかなり精度が良いですね。

5. 汎化性能🔝

YOLOv1は特に人物の検出が得意なようで論文でも他のモデルとの比較性能が掲載されています。下表のVOC2007は人物(person)だけで評価したものです。

画像元:論文

また、絵画やインターネットからの画像を使った実験結果もサンプルとして掲載されています。

画像元:論文


コメントを残す

メールアドレスは公開されません。