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 x 3] 畳み込みカーネルによるパラメータ削減
- 3.2 ReLU前の 1 x 1 畳み込み層の導入
- 3.3 3.4 複数スケール画像でのデータ拡張とテスト実施.
- 4節 まとめ
2. VGGNetの構造
VGGNetでは,AlexNetで使用された大きめのカーネルサイズ ([11 x 11], [5 x 5],[3 x 3])を,全て[3 x 3] カーネル1種類に代替させつつも,元のカーネルサイズの受容野(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次元ベクトル (各次元の出力確率).
以上,この例のVGG-16層では,16個の学習可能層 (13個の[3 x 3] or [1 x 1] 畳み込み層 + 3個の終盤の 全結合層)と,5回のプーリングによるダウンサンプリングで構成されている.
ちなみにこの巨大モデルをゼロから学習したり,もしくはFine-tuningするには,勾配消失などが起こりやすくて学習の安定性を欠き,時間もかかる.よって,バッチ正規化登場後は,バッチ正規化層も挿入して学習を行うのが一般的である
※ バッチ正規化が登場したあと,標準的なCNNの構成がどう変わったかは, CNN の記事の4.5.2節にまとめてある.
3. VGGNet の特徴・工夫
VGGNetの論文では ablation studyを行い,層数や畳み込みカーネルのサイズの組み合わせを変えて試し,最終的に性能が良かったVGG-16層(図1)とVGG-19層を提案モデルとした.これによりVGG-16層とVGG-19層が.コンピュータビジョン業界でよく使用されるようになった.
3.1 パラメータ削減: 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は,以前のCNNよりもネットワーク構造が単純になり理解しやすくなりながらも,精度向上をもたらすことができた. ただし,この設計の代償として,VGGNet-16は約1億4千万個の膨大なパラメータ数から構成されるので,学習に時間がかかるデメリットが(当時は)あった.
3.2 [3 x 3] 畳み込み層を [1 x 1] 畳み込み層で差し替え
VGGNetでは,各プーリング層の前の「畳み込み層 + ReLU」で,[3 x 3] カーネルの畳み込み層の代わりに,1 x 1 畳み込み層を導入したことも,パラメータ数を抑えながらの精度向上に効いている.差し替えた各層の部分は,1/9のパラメータ数に削減されるが,それでもCNNの表現力を向上させる.
1 x 1 畳み込み層部分も,直前の手前の3 x 3 畳み込み層とチャンネル数は毎回同じにするので,受容野の変更が起きず,チャンネル方向にだけ特徴に変形をもたらす「線形射影(Linear Projection)」と働く.しかし,1 x 1 畳み込み層は,その直後のReLUによる活性化とペアとなることで力を発揮し,更なる非線形性を「1 x 1 畳み込み層 + ReLU」のペアで,毎回獲得できる (図1).
その後,1 x 1 畳み込み層は,特にモデルサイズ削減目的のCNNアーキテクチャにおいて,隠れ層のチャンネル方向次元削減の目的で大いに活用されることとなる.
※ VGGNetではチャンネル数はキープしているので次元削減目的ではない.受容野を 1 x 1 に制限しただけ.
3.3 VGG式 データ拡張: 複数スケールのサンプルを水増し
VGGNetでは,複数スケールのデータ拡張を提案した(図3).AlexNetでは,ImageNetの元画像を縦256に揃える正規化した画像から,(224 x 224)サイズの入力画像をランダムに切り取ることで,データ拡張を行っていた(図3 左半分).それに加えてVGGNetでは,縦サイズ384にリサイズした別のスケールの画像からも,(224 x 224)の入力画像をランダムに切り抜く(図3 右半分).
この2スケールへのリサイズを行うVGGNet方式のデータ拡張により,VGGNetは2スケール分の多様性を学習することができるようになり,識別精度が向上した.
3.4 マルチスケールのテスト
モデルがマルチスケール画像に対応しているので,テスト時にも入力画像を複数スケールに増やして実験し,複数クロップに対する結果を平均化したものを最終予測とするようにした.
これにより,VGGNetのスケール変化耐性も向上することが,実験で示された.
4 まとめ
初期の代表的バックボーンとして定番となったVGGNetについて紹介した.VGGNetの工夫の中心は「3 x 3 カーネルに畳み込み層を統一し,チャンネル数を増やしたことで,AlexNetよりだいぶ深いCNNを学習できるようになった」点である.
提案後のVGGNetは,物体検出やセマンティックセグメンテーションをはじめとして,多くの画像認識応用のバックボーンCNNとして使用されることになった.
参考書籍
- 画像認識(機械学習プロフェッショナルシリーズ) 原田達也,講談社,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.