VGGNet: 初期の定番CNNバックボーン

1. 概要

VGGNet [Simonyan and Zisserman, 2015] は,Andrew Zisserman主催のOxford大学の研究室VGG (Visual Geometry Group) と,彼が提携している Google Deep Mind により提案された,代表的な物体画像認識向けのCNNバックボーンである.VGGチームから発表されたことからVGGNetと呼ばれている.2014年のISLVRC勝者である.

論文名に「Very Deep Convolutional Networks for Large-Scale Visual Recognition」とある通り,(AlexNet [Krizhevsky et al,. 2012] よりも)更に深い層数のCNNを構築すれば,画像認識CNNの性能が向上することを示すことが,論文の目的であった.これに対して「小さな 3×3フィルタ中心の構造にして,CNN構造をより深くした」というのが,論文の中心アイデアである.

具体的には,畳み込み層の3×3 化に加え,データ拡張を複数スケール化するなどにより(3節),更に層の深いCNNを高精度に学習可能となった.これ以後,ResNet の登場までは,VGGNetが標準的なCNNバックボーンとして広く使用されることになる.

1.1 この記事の構成

2節以降のこの記事の構成は以下の通りである

  • 2節 VGGNetの構造
  • 3節 VGGNetの特徴・工夫
    • 3.1 3×3畳み込みカーネルによるパラメータ削減
    • 3.2 ReLU前の 1×1 畳み込み層の導入
    • 3.3 3.4 複数スケール画像でのデータ拡張とテスト実施.
  • 4節 まとめ

2. VGGNetの構造

VGGNetでは,AlexNetで使用された大きめのカーネルサイズ (11×11, 5×5, 3×3)を,全て3×3カーネルに代替させつつも,元のカーネルサイズの受容野(receptive field)の大きさは保持する.これにより,パラメータの削減を達成しながらも,元のカーネルサイズと同等の畳み込みを使用できる.

結果として層数を16-19層まで増やすことで,期待通り深さ拡大による精度向上を達成し,なおかつモデルのパラメータ削減も実現できた.(ただし,3 x 3で代替するせいで,各畳み込み層のチャンネル数はAlexNetより増えている).

VGGNetの構造(VGG-16層)
図1 VGGNetの構造(VGGNet-16層).特徴マップ,大きさの変化を描いた図である.

VGGNet [Simonyan and Zisserman, 2015] の実験では,ネットワーク構造を6タイプ変えて試すアブレーション実験が行われた.そのうち性能と効率性のバランスが良かった「VGG-16層」の構造が,特に多く用いられることになった.

以下にそのVGG-16層の構成 (学習可能層 x 16層)を紹介する:

  • 入力:224 x 224の3チャンネルカラー画像 (カラー白色化済み ※ AlexNetの記事の3.2.1節)
  • Conv1_1:畳み込み層 – [3 x 3]カーネル x 64チャンネル + ReLU
  • Conv1_2:畳み込み層 – [3 x 3]カーネル x 64チャンネル + ReLU
  • P1:プーリング層 – 最大値プーリング, [2 x 2]カーネル, stride = 2
  • Conv2_1:畳み込み層 – [3 x 3]カーネル x 128チャンネル + ReLU
  • Conv2_2:畳み込み層 – [3 x 3]カーネル x 128チャンネル + ReLU
  • P2:プーリング層 – 最大値プーリング, [2 x 2]カーネル, stride = 2
  • Conv3_1:畳み込み層 – [3 x 3]カーネル x 256チャンネル + ReLU
  • Conv3_2:畳み込み層 – [3 x 3]カーネル x 256チャンネル + ReLU
  • Conv3_3:畳み込み層 – [1 x 1]カーネル x 256チャンネル + ReLU
  • P3:プーリング層 – 最大値プーリング, [2 x 2]カーネル, stride = 2
  • Conv4_1:畳み込み層 – [3 x 3]カーネル x 512チャンネル + ReLU
  • Conv4_2:畳み込み層 – [3 x 3]カーネル x 512チャンネル + ReLU
  • Conv4_3:畳み込み層 – [1 x 1]カーネル x 512チャンネル + ReLU
  • P4:プーリング層 – 最大値プーリング, [2 x 2]カーネル, stride = 2
  • Conv5_1:畳み込み層 – [3 x 3]カーネル x 512チャンネル + ReLU
  • Conv5_2:畳み込み層 – [3 x 3]カーネル x 512チャンネル + ReLU
  • Conv5_3:畳み込み層 – [1 x 1]カーネル x 512チャンネル + ReLU
  • P5:プーリング層 – 最大値プーリング [7 x 7]カーネル
  • (学習時のみ:Dropout)
  • FC14:全結合層 – (7 x 7 x 512) v.s. 4096
  • (学習時のみ:Dropout)
  • FC15:全結合層 – 4096 v.s. 4096
  • FC16:全結合層 – 4096 v.s. 1000
  • 出力:softmax関数で確率化した1000次元ベクトル (各次元の出力確率).

以上,16層の学習可能層(13畳み込み層+3全結合)で構成されているのが,VGGNetである.

ちなみにこの巨大モデルをゼロから学習したり,もしくはFine-tuningするには学習の安定性を欠き,時間もかかる.よって,バッチ正規化登場後は,バッチ正規化層も挿入して学習を行うのが一般的である.

3. VGGNet の特徴・工夫

VGGNetの論文では ablation studyを行い,層数や畳み込みカーネルのサイズの組み合わせを変えて試し,最終的に性能が良かったVGG-16層(図1)とVGG-19層を提案モデルとした.これによりVGG-16層とVGG-19層が.コンピュータビジョン業界でよく使用されるようになった.

3.1 畳み込み層のパラメータ削減: 3 x 3カーネル2層を代わりに使用.

 3x3フィルタ2層の受容野
図2 3×3フィルタ2層による受容野. 畳み込み層 5 x 5フィルタの受容野を,3 x 3フィルタ2層へ分割.

3 x 3サイズのフィルタ2層 (stride = 1)をお互い1画素位置をずらして使用したものが5 x 5 領域の受容野をカバーしていることに相当する(図2).これにより元の 5 x 5 カーネルを構成する25個(= 5 x 5)のパラメータによる畳み込み操作を,18個 ((3 x 3) x 2層)のパラメータで済ますことができ,受容野を保持したまま計8個(= 25 -18)のパラメータ削減が達成できる.

こうしてVGGNetの全ての畳み込み層は,小さい3 x 3 フィルタ (padding=1)でどの層でも実施するゆえ,プーリングしない限りは,特徴マップの空間サイズはずっと保持され,使用者はフィルタと特徴マップの関係が明快になっておりわかりやすい.また各3層ブロックのチャンネル数も,2n の数列 (64, 128, 256, 512, 512) にそれぞれなっていて,これもわかりやすい.また

つまりは,均一的な畳み込み層を3 x 3カーネル(stride = 1)のみ使用するように設計されたおかげで,各層の設計と,隠れ層の特徴マップの変化が全て均一的になり,構造をユーザーが理解しやすくなりながらも,精度向上をもたらすことができた. ただしこの工夫の代償として,VGGNet-16は約1億4千万個の膨大なパラメータ数から構成されるので,学習に時間がかかるデメリットはある.

3.2 ReLU前の 1 x 1 畳み込み層の導入

VGGNetでは,1 x 1 カーネルの畳み込み層をReLUの前に導入したことも,パラメータ数を抑えながらの精度向上に効いている.

1×1 畳み込みカーネルだと,受容野(receptive field)サイズの変更がないので,チャンネル方向にだけ特徴に変化を持たせることができる.また,手前の3×3 畳み込み層とチャンネル数を揃えるので,1 x 1 畳み込み自体は線形射影(linear projection)である.しかし,1×1畳み込み層は,その直後の活性化関数(ReLU)と組み合わさっていることから,更なる非線形性をその2つのペアで毎回獲得できる.こうして,1 x 1 畳み込み層は,省パラメータながらも,CNNの表現力を向上させる.

その後,1 x 1 畳み込み層は,特にモデルサイズ削減目的のCNNアーキテクチャにおいて,隠れ層の次元削減の目的で大いに活用されることとなる.

3.3 複数スケールのデータ拡張

複数スケールのデータ拡張 (VGGNet)
図3 複数スケールのデータ拡張.上側:高さ256と高さ384になるようにリサイズした物体画像を,元画像からそれぞれ作成.下側:2つの画像から224 x 224サイズのVGGNet入力画像をランダムに切り出す.

VGGNetでは,複数スケールのデータ拡張を提案した(図3).AlexNetでは,ImageNetの元画像を縦256に揃える正規化した画像から,「224 x 224」サイズの入力画像をランダムに切り取ることで,データ拡張を行っていた(図3 左半分).それに加えてVGGNetでは,縦サイズ384にリサイズした別のスケールの画像からも,224 x 224の入力画像をランダムに切り抜く(図3 右半分).

この2スケールへのリサイズを行うデータ拡張により,VGGNetは2スケール分の多様性を学習することができるようになり,識別精度が向上した.

3.4 マルチスケールのテスト

モデルがマルチスケール画像に対応しているので,テスト時にも入力画像を複数スケールに増やして実験し,複数クロップに対する結果を平均化したものを最終予測とするようにした.

これにより,VGGNetのスケール変化耐性も向上することが実験で示された.

4 まとめ

初期の代表的バックボーンとして定番となったVGGNetについて,この記事では紹介した.

VGGNetの工夫の中心は,「3 x 3 カーネルに畳み込み層を統一し,チャンネル数を増やしたことで,AlexNetよりだいぶ深いCNNを学習できるようになった」という点である.提案後のVGGNetは,物体検出やセマンティックセグメンテーションをはじめとして,多くの画像認識応用のバックボーンCNNとして使用されることになった.

References

  • [Krizhevsky et al,. 2012] Krizhevsky A, Sutskever I, Hinton GE. ImageNet classification with deep convolutional neural networks. NeurIPS. 2012
  • [Simonyan and Zisserman, 2015] Simonyan K, Zisserman A “Very deep convolutional networks for large-scale image recognition” In ICLR, 2015.

外部参照リンク

関連記事