画像認識における深層学習モデルのCNNにはAlexNet(アレックスネット)やResNet(レズネット)など様々なモデルがありますよね。本記事ではそのCNNの中でもVGGというモデルについて解説していきましょう。
VGGは2014年に提案されたモデルでありながら、そのシンプルなアーキテクチャと高い性能から現在も利用されるシーンがいくつもあるモデルです。
VGGとは
VGGとは2014年に提案されたCNNのモデルのひとつで、Oxford大学の研究グループによって発表されました。以下のリンクがVGGが提案された論文です。
VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION
このVGGモデルは提案された2014年のILSVRCというImageNetを用いた画像認識の精度を競うコンペティションにおいて、なんと画像分類部門で2位、物体のローカライゼーション部門で1位を獲得!!このコンペティションで一躍有名になったVGGモデルは現在もtensorflowやPyTorchなどで実装とImageNetの学習済みモデルが用意されており、簡単に利用することができるようになっています。
VGGは16層のバージョンと19層のバージョンがあり、論文のタイトルからわかる通り当時のCNNとしては圧倒的に多くの層が重なっているモデルです。2012年のILSVRC優勝モデルのAlexNetは8層、2013年に提案されたZFNetが同様に8層であることから当時のVGGがいかに深い層を持つモデルであったかが理解できますよね。
またVGGは学習済みモデルが公開されたこともり、SSDなどの物体検出モデルでも特徴抽出器として利用されています。
VGGNetのアーキテクチャ
VGGNetの特徴としてはシンプルなアーキテクチャを持ち、また3×3のカーネルサイズの小さな畳み込みを多く利用していることが挙げられます。この3×3のサイズの小さな畳み込みを利用し、チャネル数を増やすという構造はResNetなどVGGNet以降の様々なモデルで利用されるようになりました。
以下の画像にVGGNetの16層バージョンの構造を示しましょう。
基本的には畳み込みを2~3回繰り返してその後にMaxPoolingを行う流れの繰り返しです。またそのPooling処理の後の畳み込みでチャネル数を倍にしていき、Poolingのストライドは常に2を使用します。そして各畳み込みの後には活性化関数としてReLUを用います。また実装によっては畳み込み、バッチノーマライゼーション、ReLUというように重ねるものもあります。
ここからは畳み込み処理にフォーカスして解説していきましょう。
各畳み込み処理は3×3のカーネルサイズ、ストライド1、パディングサイズ1のパラメータを持ちます。この畳み込みでは特徴マップのサイズが変わらないという点で利用しやすく、他のCNNでも広く利用されています。また3×3の畳み込みを2つつなげた場合5×5の畳み込み1つと比較してパラメータ数が削減でき、かつ同様の受容野を持ちます。
ただし、この構造にはチャネル数が多いことと最後に全結合層を3つ重ねていることから学習すべきパラメータ数が比較的多いという問題があるため注意が必要でしょう。
VGGNetの問題点
VGGNetでは層が深くなったことで勾配消失問題を起こし、全ての層を1度に学習することが難しいという問題がありました。この問題点を解決し152層もの深い構造を持つようになったのが2015年に提案されたResNetで、ResNetではskip connectionという構造を持つことでこの勾配消失問題を解決しています。
まとめ
VGGについて重要な点をまとめましょう。
- 2014年のILSVRC準優勝モデルのCNN
- シンプルな構造と3×3の畳み込みを用いた現在のCNNの発展に寄与したモデル
- 2014年当時としては非常に多い19層もの層を重ねた
- tensorflowやPyTorchから簡単に利用できる