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

YOLOv2:より良く より速く より強く。YOLO9000はどのように生まれたのか

thumb image

Fast R-CNNFaster R-CNNと比べてYOLOv1は物体位置の予測の精度が良くありませんでした。また、領域選定を専門に行うR-CNN系のモデルと比べて物体がある場所を見抜く能力(再現率)が低いことがわかりました。よって、再現率と物体位置の予測を向上させることが一番の課題となっていました。

Joseph RedmonAli Farhadiによって発表されたYOLOv2は、その論文のタイトル「YOLO9000: Better, Faster, Stronger」にもあるように、より良く、より速く、より強くなっています。よってYOLOv1とYOLOv2を比べるとかなりの改良点があり、その一つ一つに対しでどれほど精度が上がったのかも報告されておりとても興味深いです。

この記事では細かく論文を追っていきます。

1. より良く🔝

ここではmAPで計測された精度の向上をYOLOv2ではどのように達成したのかを解説します。

1.1. バッチ正規化🔝

バッチ正規化を全ての畳み込み層に取り入れました。これによって学習が速くなり、mAPが2%向上しました。また、ドロップアウトを外しても過学習することがなかったのでドロップアウトが不要となりました。

1.2. 高解像分類器🔝

YOLOv1では画像分類器をImageNetからの画像(サイズが224×224)を使って訓練した後に、物体検出のために一番最初の畳み込みを448×448の画像に対応するように変更しています。

画像元:YOLOv1論文

つまり、YOLOv1を物体検出ために訓練するときには、高解像度に対応するのと物体検出の学習を同時に行なっていたことになります。

YOLOv2では、物体検出の学習を後回しにしました。ImageNetでの訓練の後に畳み込み層の変更をして大きな画像で画像分類器のファインチューニングをします。そして、物体検出の訓練に移行しました。これによってmAPが4%向上しました。

1.3. アンカーの導入🔝

Faster R-CNNのRPNのアイデアを取り入れて、アンカーを導入しました。YOLOv1では画像のサイズを1として相対的な矩形領域を予測していましたが、アンカーを取り入れることでアンカーに対しての相対領域を予測すれば良くなり学習がより簡単になると考えたからです。

Faster R-CNNのRPNでは領域選定を行なっていましたが、YOLOv2ではアンカーと畳み込みで物体位置を直接計算します。よって、YOLOv1では必要だった物体位置の計算をする全結合層が不要となりました。

なお、アンカーが画像の中心に一つ来るように(つまりアンカーの数が縦と横で奇数個になるように)、入力画像のサイズを448×448から416×416に変更しました。大きな物体の中心が画像の真ん中に来ることが多いからです。

YOLOv2は入力画像を縦横32分の1に圧縮するので、最終的には13×13になります。つまり、入力画像は13×13のグリッド(セル)に分割されます。以前は7×7だったのでもう少し細かくなっています。

また、YOLOv1ではクラス確率の推定は、各セルに1つだけでしたが、YOLOv2ではアンカーごとに行うことにしました。YOLOv1では98(=7x7x2)しかなかった物体位置(矩形領域)の予測が、YOLOv2では1000以上になります。これによって再現率が81%から88%へと向上しました。

反面、mAPは69.5%から69.2%へ減少しましたが、再現率の増加によってもっと改善できる可能性が増えたと考えました。つまり、物体があるかどうかがわからない状態だとそれ以上の改善の余地がないですが、物体の存在を多く見抜くことができたのであれば、物体位置や画像分類の予測精度を上げたりなどの工夫ができるということです。

1.4. アンカーのサイズ🔝

人間が選んだアンカーのサイズを使うよりも、より良いサイズを選定するためにk平均法によるクラスタリングを行いました。よくある形や大きさをアンカーとして提供した方が学習が楽になると考えたからです。

このため、訓練データセット(Pascal VOCとMS COCO)の教師データを使って物体位置(矩形領域)にクラスタリングを行い、再現率(アンカーと正解データ間のIoU)とモデルの複雑さ(アンカーの数)とのバランスを考慮してk=5が良いと結論しました。

画像元:論文

下表ではクラスタリングによる平均IoUがk=5の時に61.0%なのに対し、Faster R-CNNからの9個のアンカーによる平均IoUは60.9%だったことがわかります。SSEは二乗誤差の和(sum of squared error)をIoUの代わりに使った場合です。

画像元:論文

1.5. 位置推定の計算🔝

物体の中心位置の予測を(13×13のグリッドの)セル内に限定しました。Faster R-CNNのやり方だと物体中心の相対位置がセルの外にはみ出てしまう可能性があり、同じ方法をYOLOv2で行おうとすると学習の初期にはなかなか予測が安定しませんでした。

よって、YOLOv2ではシグモイド関数を活性化関数として適用することで0から1の値、つまりはセルの内部の値に限定するようにしました。つまり、YOLOv1の時と同じ考えですが全結合層ではなく畳み込みで計算されています。

以上によってランダムに初期化された重みを使っていても位置推定の学習が安定するようになりました。

画像元:論文

$(b_x, b_y)$は予測した物体位置(矩形領域)の中心で、セルの左上$(c_x, c_y)$からの相対位置になります。$\sigma$はシグモイド関数です。13×13の一点が1つのセルに相当するので、$(b_x, b_y)$の値が$(0, 0)$ならセルの右上、$(1, 1)$なら右下に相当します。

$(b_w, b_h)$は物体位置(矩形領域)の幅と高さです。$(p_w, p_h)$はアンカーの幅と高さです。これを拡大縮小するための$(t_w, t_h)$を予測しています。$e^{t_w}$と$e^{t_h}$となっているのは数値を0から正の無限大に限定するためです。

画像元:論文

自信度(スコア)はYOLOv1と同様で$P(\text{object}) * \text{IoU}_{\text{pred}}^{\text{truth}}$です。「セルに物体がある確率の予想」と「物体位置の予測と正解のIoU」を掛け合わせたものを予測したものになっており0から1の値を取ります。これもシグモイド関数で0から1の範囲に限定されています。

アンカーのサイズをクラスタリングで計算したことと上記の位置推定の変更によって、アンカーなしのバージョンと比べてmAPが5%向上しました。

1.6. 詳細特徴量🔝

YOLOv1では小さい物体の検出がうまくいきませんでした。これを改善するためにYOLOv2の畳み込みでは26×26の段階での特徴量を1×1の畳み込みで512チャンネルから64チャンネルにした後、13x13x256に形状変換して最後の特徴マップと結合させました。

これにおって細かい部分の特徴量を利用することができます。ResNetのスキップ結合に似た手法になっています。これによってmAPが1%向上しました。

1.7. 複数スケールの画像による学習🔝

YOLOv2の畳み込みは入力画像を32分の1にするので32の倍数である320×320、352×352、…、608×608の入力画像を使ってYOLOv2を訓練しました。これによって高解像から低解像まで対応できるモデルになしました。

下図の2つは、Pascal VOC 2007による実験結果です。

画像元:論文
画像元:論文

以上がより良くなった点です。論文でも下表のようにまとめられています。

画像元:論文

2. より速く🔝

Faster R-CNNなどはVGG-16をベース(特徴マップを抽出する層)として使うことで精度を上げているが、VGG-16では306.9億の浮動小数点による計算が行われる。これに対し、YOLOv1ではGoogLeNetをベースにしたモデルが使われており計算量が85.2億にとどまっている。ただし、ImageNetでの画像分類における上位5位までの正解率で比べるとYOLOv1のカスタムモデルは88%で、VGG-16の90.0%には届かなかった。

よって、YOLOv2ではベースのネットワークを改善する試みがなされた。

2.1. Darknet-19🔝

YOLOv2のベースとして新しい画像分類器Darknet-19が提案された。このネットワークの特徴のいくつかは「より良く」のセクションで解説したものです。

VGG-16にあるような3×3のカーネルによる畳み込みと最大値プーリングによる画像サイズの圧縮を繰り返す構造になっています。

加えてNetwork in network(GoogLeNetのInceptionモジュールの原案になったモデル)からのグローバルアベレージプーリングや1×1のカーネルによる畳み込みでチャンネルの次元を圧縮する手法などが取り入れられている。

Darknet-19には全部で19の畳み込み層と5つの最大値プーリングがあります。

画像元:論文

Darknet-19は55.8億の浮動小数点計算しかないが、正解率は72.9%(上位5位だと91.2%)を達成した。

2.2. 画像分類器の訓練🔝

Darknet-19はImageNetの1000のクラスを使った画像分類のタスクで訓練された。

ハイパーパラメータ
エポック数160
オプティマイザSGD
学習率の初期値0.1
学習率低減注*1)
重量減衰(L2正則化0.0005
モーメンタム0.9

注*1)学習率低減(polynomial learning rate decay)は、学習率をバッチごとに低減させる手法で、最後になるにつれて学習率がゆっくりと0に向かって低減する。

$\text{学習率}\times(1-\frac{\text{バッチのステップ数}}{\text{バッチの最大ステップ数}})^4$

あとは、画像データの拡張として以下が行われた。

  • ランダムに切り取る(crop)
  • ランダムに回転(rotation)
  • ランダムに色相(hue)、彩度(saturation)露出(exposure)をシフトさせる。

画像系の訓練ではよく見られる手法です。

224×224の画像分類の訓練が終わった後に、448×448でファインチューニングを行う。この時のエポック数は10で学習率はより小さい$10^{-3}$となっている。

この大きさの画像での正解率は76.5%(上位5位だと93.3%)を達成した。

2.3. 物体検出器の訓練🔝

物体検出の訓練を行うために448×448の入力画像を受け入れるDarknet-19の最後の畳み込み層(分類予想をする部分)を取り除き、次の畳み込み層を追加します。また、Darknet-19の13番目の畳み込み層からのスキップ結合を連結し、画像からのより詳細な特徴量を取り入れます。

フィルタ数サイズ出力
畳み込み10243×313×13
畳み込み1024 3×313×13
結合(concat)注*2)128013×13
畳み込み10243×313×13
畳み込み注*3) 125 1×113×13

注*2)13番目の畳み込みの結果は26x26x512です。これに1x1x64の畳み込み処理をして26x26x64にします。さらに、形状変換して13x13x256にしたものを上表2番目の13x13x1024に結合するのでフィルタ数が1024+256=1280になります。

注*3)Pascal VOCでは5個の矩形領域を13×13のセルに対して計算します。一つのアンカーに対して1つのスコア、横縦幅高さの4つの値、20クラスの確率を計算します。これを一つのセルに対して5セット計算するので、$(1+4+20) \times 5=125$がフィルタ数になります。

訓練で使われたハイパーパラメータは以下の通りです。Pascal VOCとMS COCOで共通です。

ハイパーパラメータ
エポック数160
オプティマイザSGD
学習率の初期値$10^{-3}$
学習率低減エポックが60と90の時に10で割る
重量減衰(L2正則化0.0005
モーメンタム0.9

3. より強く🔝

YOLOv2の訓練を工夫することでYOLO9000という名のモデルが作られました。「より強く」とは9000クラスの物体を検出し識別できるようになったことです。物体検出の教師ありデータセットが少ないので豊富にある画像分類のデータを利用することが考えられました。

つまり、物体検出用のデータセットを使っているときはネットワーク全体の誤差逆伝播を使い、画像分類用のデータセットを使っているときはネットワークのなかで画像分類に関わる損失だけから誤差逆伝播を適用する手法が考えられました。

しかし、問題がありました。物体検出では「犬」とか「ボート」とか大まかな分類になっているのに対し、画像分類ではもっと細かいラベルの付け方がされていたことです。犬の種類だと100以上もあります。

これを解決するのが階層的分類です。

3.1. 階層的分類🔝

ImageNetのクラスはWordNetから来ています。WordNetにはクラスの階層構造があり、例えばヨークシャテリア(Yorkshire terrir)とノーフォークテリア(Norfolk terrier)は両方ともテリア(terrier、狩猟犬の一種)となるので両方とも犬のクラスだとわかります。

WordNetの構造を単純化してWordTreeという階層モデル作りました。例えば、ヨークシャテリアはテリアで、テリアは狩猟犬で…続けて…哺乳類で、動物で、物体です、といった感じです。

まず、ImageNetの1000個のクラスを階層化します。すると、WordTree内の1369のカテゴリが当てはまります。階層があるためにカテゴリが増えます。

この1369のカテゴリについてDarknet-19が予測をします。もし、入力画像がヨークシャテリアであるかどうかを知りたければ次のように確率を計算します。

$P(\text{ヨークシャテリア})=P(\text{ヨークシャテリア}|\text{テリア}) \\\qquad\times P(\text{テリア}|\text{狩猟犬})\\\qquad\times … \\\qquad\times P(\text{哺乳類}|\text{動物}) \\\qquad\times P(\text{動物}|\text{物体}) \\\qquad\times P(物体)$

画像分類では$P(\text{物体})=1$とします。

ラベルがヨークシャテリアだったとしたら、WordTreeの階層をたどりながらDarknet-19が予測した値を使って条件付き確率を計算し掛け合わせていきます。同じグループのカテゴリに関してはソフトマックス関数を使ってグループごとに確率を計算します。

画像元:論文

3.2. 複数のデータセットの組み合わせ🔝

WordTreeを使えば複数のデータセットからのラベルを階層構造に組み込めます。フルバージョンのImageNetから上位9000のラベルを使いMS COCOの物体検出のデータと合わせてWordTreeで階層化しました。ImageNetにも物体検出のデータセットがあるのでそこからのクラスを追加すると全部で9418になります。ImageNetの方がMS COCOよりはるかに大きいのでサイズ比が4:1になるように調節しました。

画像元:論文

3.3. 分類と検出を合体させる🔝

YOLOv2をベースとしてYOLO9000を訓練したのですが、出力の数を減らすためにアンカーの数を5から3に減らしています。物体検出では物体位置とクラス確率の両方の予測から誤差を計算します。画像分類ではクラス確率のみから計算します。

例えば、「犬」というラベルだったら、「犬」に関連するカテゴリをWordTreeを「物体」へ向かってたどっていくことで予想の確率を計算します。この場合は、ヨークシャテリアなのかどうかといった情報からは損失を計算しません。

また、画像分類の場合は、予測のうちで最もラベルのクラスの可能性が高いものを選びました。また、最低0.3IoUはあると想定して自信度(スコア)の損失を計算しました。

以上によってYOLO9000はMS COCOの物体検出ができ、ImageNetの画像分類ができるようになりました。

YOLO9000はImageNetの物体検出のデータセットをテストデータとして検証されました。ImageNetの物体検出のデータセットとMS COCOの物体検出のデータセットでは44の物体だけが共通なので、画像分類に関しては大多数を見ていますが、物体検出に関しては初めて物体位置を予測するものばかりでした。

それでもYOLO9000は19.7mAPを出しました。また、物体検出したことのない156のクラスについても16.0mAPの結果が出ました。しかも、リアルタイムで推論が可能でした。

物体検出に関しては動物の方が簡単そうだと論文では述べられています。それは、MS COCOに動物のデータがたくさんあり物体があるかどうかのスコア(予測)がよくできるようになっていたからだと推測しています。逆に洋服やサングラスなどはなかったのでImageNetの物体検出データセットでテストした際に成績が悪かったそうです。

論文ではこのような研究をセグメンテーションでもやって行きたいと述べられております。もっと色々な構造を工夫してさらに強いモデルを作りたいと結ばれています。


しかし、この希望に満ちた文章のトーンがYOLOv3の論文では大きく変わります。

4. 参照🔝

4.1. YOLO9000: Better, Faster, Stronger🔝

Joseph RedmonAli Farhadi

https://arxiv.org/abs/1612.08242



コメントを残す

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