1. 簡介
2014年,Karen Simonyan, Andrew Zisserman在《Very Deep Convolutional Networks For Large-Scale Image Recognition》提出VGG-16,奪得ILSVRC 2014的亞軍。VGG代表了牛津大學的Oxford Visual Geometry Group,該小組隸屬於1985年成立的Robotics Research Group,該Group研究範圍包括了機器學習到移動機器人。
VGGNet的兩個特點:層數更深更寬、卷積核更小 。
各個級別VGG的模型結構如下表所示,其下方爲不同模型的參數數量。可以看到,雖然從A到E每一級網絡逐漸變深,但是網絡的參數量並沒有增長很多,這是因爲參數量主要都消耗在最後3個全連接層了。不過訓練耗時的依然是卷積層,因爲這部分計算量比較大。其中D,E分別爲VGG16和VGG19。
VGGNet使用的全部都是3 × 3 3 \times 3 3 × 3 的小卷積核和2 × 2 2 \times 2 2 × 2 的池化核,通過不斷加深網絡來提升性能。其中經常出現多個完全一樣的3 × 3 3 \times 3 3 × 3 卷積層堆疊在一起的情況。兩層3 × 3 3 \times 3 3 × 3 的串聯卷積結果相當於一個5 × 5 5 \times 5 5 × 5 的卷積,即最後一個像素會與周圍5 × 5 5 \times 5 5 × 5 個像素產生關聯,可以說感受野大小爲5 × 5 5 \times 5 5 × 5 。而3層3 × 3 3 \times 3 3 × 3 的卷積核的串聯結果則相當於1個7 × 7 7 \times 7 7 × 7 的卷積層。
除此之外,3個串聯的3 × 3 3 \times 3 3 × 3 卷積層的參數數量要比一個7x7卷積層的參數數量小得多,更少的參數意味着減少過擬合,而且更重要的是3個3 × 3 3 \times 3 3 × 3 卷積層擁有比1個7 × 7 7 \times 7 7 × 7 的卷積層更多的非線性變換,使得CNN對特徵的學習能力更強。
2. 網絡結構
VGG擁有5個卷積段,每一個卷積段有2-3個卷積層,同時每段的結尾都會連接一個最大池化層,來縮小圖片尺寸。每段內的卷積核數量都一樣,越靠後的段的卷積核數量越多:64 − 128 − 256 − 512 − 512 64-128-256-512-512 6 4 − 1 2 8 − 2 5 6 − 5 1 2 − 5 1 2 。
Layer Conv1-1 :
輸入:224 × 224 × 3 224 \times 224 \times 3 2 2 4 × 2 2 4 × 3
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度64 64 6 4
輸出:224 × 224 × 64 224 \times 224 \times 64 2 2 4 × 2 2 4 × 6 4
Layer Conv1-2 :
輸入:224 × 224 × 64 224 \times 224 \times 64 2 2 4 × 2 2 4 × 6 4
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度64 64 6 4
輸出:224 × 224 × 64 224 \times 224 \times 64 2 2 4 × 2 2 4 × 6 4
Layer POOL-1 :
輸入:224 × 224 × 64 224 \times 224 \times 64 2 2 4 × 2 2 4 × 6 4
卷積核:2 × 2 2 \times 2 2 × 2 ,步長2 2 2 ,padding0 0 0 ,深度64 64 6 4
輸出:112 × 112 × 64 112 \times 112 \times 64 1 1 2 × 1 1 2 × 6 4
Layer Conv2-1 :
輸入:112 × 112 × 64 112 \times 112 \times 64 1 1 2 × 1 1 2 × 6 4
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度64 64 6 4
輸出:112 × 112 × 128 112 \times 112 \times 128 1 1 2 × 1 1 2 × 1 2 8
Layer Conv2-2 :
輸入:112 × 112 × 128 112 \times 112 \times 128 1 1 2 × 1 1 2 × 1 2 8
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度128 128 1 2 8
輸出:112 × 112 × 128 112 \times 112 \times 128 1 1 2 × 1 1 2 × 1 2 8
Layer POOL-2 :
輸入:112 × 112 × 128 112 \times 112 \times 128 1 1 2 × 1 1 2 × 1 2 8
卷積核:2 × 2 2 \times 2 2 × 2 ,步長2 2 2 ,padding0 0 0 ,深度128 128 1 2 8
輸出:56 × 56 × 128 56 \times 56 \times 128 5 6 × 5 6 × 1 2 8
Layer Conv3-1 :
輸入:56 × 56 × 128 56 \times 56 \times 128 5 6 × 5 6 × 1 2 8
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度256 256 2 5 6
輸出:56 × 56 × 256 56 \times 56 \times 256 5 6 × 5 6 × 2 5 6
Layer Conv3-2 :
輸入:56 × 56 × 256 56 \times 56 \times 256 5 6 × 5 6 × 2 5 6
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度256 256 2 5 6
輸出:56 × 56 × 256 56 \times 56 \times 256 5 6 × 5 6 × 2 5 6
Layer Conv3-3 :
輸入:56 × 56 × 256 56 \times 56 \times 256 5 6 × 5 6 × 2 5 6
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度256 256 2 5 6
輸出:56 × 56 × 256 56 \times 56 \times 256 5 6 × 5 6 × 2 5 6
Layer POOL-3 :
輸入:56 × 56 × 256 56 \times 56 \times 256 5 6 × 5 6 × 2 5 6
卷積核:2 × 2 2 \times 2 2 × 2 ,步長2 2 2 ,padding0 0 0 ,深度256 256 2 5 6
輸出:28 × 28 × 256 28 \times 28 \times 256 2 8 × 2 8 × 2 5 6
Layer Conv4-1 :
輸入:28 × 28 × 256 28 \times 28 \times 256 2 8 × 2 8 × 2 5 6
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度512 512 5 1 2
輸出:28 × 28 × 512 28 \times 28 \times 512 2 8 × 2 8 × 5 1 2
Layer Conv4-2 :
輸入:28 × 28 × 512 28 \times 28 \times 512 2 8 × 2 8 × 5 1 2
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度512 512 5 1 2
輸出:28 × 28 × 512 28 \times 28 \times 512 2 8 × 2 8 × 5 1 2
Layer Conv4-3 :
輸入:28 × 28 × 512 28 \times 28 \times 512 2 8 × 2 8 × 5 1 2
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度512 512 5 1 2
輸出:28 × 28 × 512 28 \times 28 \times 512 2 8 × 2 8 × 5 1 2
Layer POOL-4 :
輸入:28 × 28 × 512 28 \times 28 \times 512 2 8 × 2 8 × 5 1 2
卷積核:2 × 2 2 \times 2 2 × 2 ,步長2 2 2 ,padding0 0 0 ,深度512 512 5 1 2
輸出:14 × 14 × 512 14 \times 14 \times 512 1 4 × 1 4 × 5 1 2
Layer Conv5-1 :
輸入:14 × 14 × 512 14 \times 14 \times 512 1 4 × 1 4 × 5 1 2
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度512 512 5 1 2
輸出:14 × 14 × 512 14 \times 14 \times 512 1 4 × 1 4 × 5 1 2
Layer Conv5-2 :
輸入:14 × 14 × 512 14 \times 14 \times 512 1 4 × 1 4 × 5 1 2
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度512 512 5 1 2
輸出:14 × 14 × 512 14 \times 14 \times 512 1 4 × 1 4 × 5 1 2
Layer Conv5-3 :
輸入:14 × 14 × 512 14 \times 14 \times 512 1 4 × 1 4 × 5 1 2
卷積核:3 × 3 3 \times 3 3 × 3 ,步長1 1 1 ,padding1 1 1 ,深度512 512 5 1 2
輸出:14 × 14 × 512 14 \times 14 \times 512 1 4 × 1 4 × 5 1 2
Layer POOL-5 :
輸入:14 × 14 × 512 14 \times 14 \times 512 1 4 × 1 4 × 5 1 2
卷積核:2 × 2 2 \times 2 2 × 2 ,步長2 2 2 ,padding0 0 0 ,深度512 512 5 1 2
輸出:7 × 7 × 512 7 \times 7 \times 512 7 × 7 × 5 1 2
參考
代碼實現