目次
1. 概要
VGGNet とは,初期の代表的な少し深い物体画像認識向けの,畳み込みニューラルネットワーク(CNN)である [Simonyan and Zisserman, 2015] .Andrew Zisserman 主催の Oxford大の研究室「VGG (Visual Geometry Group)」と,VGGが提携しているGoogle Deep Mindにより提案された.そのVGGチームから発表されたことから「VGGNet」と呼ばれており,2014年のISLVRC勝者である.
この記事ではVGGNetについて簡潔に紹介する.
論文名に「Very Deep Convolutional Networks for Large-Scale Visual Recognition」とある通り,当時最先端であった AlexNet [Krizhevsky et al,. 2012] などよりも,更に深い層数のCNNを構築すれば,画像認識CNNの性能が向上することを示すことが研究の目的であった.これに対して「小さな 3×3フィルタ中心の構造にして,CNN構造をより深くした」というのがVGGNetの中心となるアイデアである.
具体的には,畳み込み層の3 x 3 化に加え,「データ拡張のマルチスケール化」や,1 x 1 畳み込み層による「中間層ごとの次元削減」などにより(3節),パラメータを抑えながらも,更に層の深いくて高精度な物体画像認識CNNを学習可能になった.また,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 x 11, 5 x 5, 3 x 3)を,全て3×3カーネルに代替させつつも,元のカーネルサイズの受容野(receptive field)の大きさは保持する.これにより,パラメータの削減を達成しながらも,元のカーネルサイズと同等の畳み込みを使用できる.
結果として層数を16-19層まで増やすことで,期待通り深さ拡大による精度向上を達成し,なおかつモデルのパラメータ削減も実現できた.(ただし,3 x 3畳み込みで代替するせいで,各畳み込み層のチャンネル数はAlexNetより増えている).

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 パラメータ削減: 5 x 5 の代わりに 3 x 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 3 x 3 畳み込み層 の代わりに 1 x 1 畳み込み層
VGGNetでは,毎回のプーリングの前の「畳み込み+ReLU」で,3 x 3 畳み込みの代わりとして,1 x 1 畳み込み層を導入したことも,パラメータ数を抑えながらの精度向上に効いている.3×3 畳み込みの代わりに,同じチャンネル数の 1 x 1 畳み込み層を用いているが,(3×3畳み込みより1/9のパラメータ数の)省パラメータながらも,CNNの表現力を向上させる.
直前の,手前の3 x 3 畳み込み層とチャンネル数は毎回同じなので,1 x 1 畳み込み層では受容野の変更が起きず,チャンネル方向にだけ特徴に変形をもたらす「線形射影(Linear Projection)」と働く.しかし,1 x 1 畳み込み層は,その直後の活性化関数(ReLU)と組み合わさって力を発揮し,更なる非線形性をその2つのペア「1 x 1 畳み込み + ReLU」で,毎回獲得できる(図1).
その後,1 x 1 畳み込み層は,特にモデルサイズ削減目的のCNNアーキテクチャにおいて,隠れ層のチャンネル方向次元削減の目的で大いに活用されることとなる.(※ このVGGNetではチャンネル数はキープしているので次元削減目的ではない.受容野を 1 x 1に制限しただけ)
3.3 複数スケールのデータ拡張

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として使用されることになった.
参考書籍
- つくりながら学ぶ!PyTorchによる発展ディープラーニング ,マイナビ出版,小川 雄太郎 (2019).
- 1章 「画像分類と転移学習(VGG)」(p 2~)
- 画像認識(機械学習プロフェッショナルシリーズ) 原田達也,講談社,2017.
- 6.6.1 AlexNet と VGGNet (p 189)
- Deep learning for NLP and speech recognition, Kamath, Uday, John Liu, and James Whitaker.Vol. 84. Cham: Springer, 2019.
関連記事
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.