1. VGG-Net網絡的特點
自從AlexNet在ILSVRC2012上面大放光芒之后,接下參加ImageNet競賽的所有top模型基本上都采用了CNN網絡架構。CNN網絡架構在2013年沒有很大的進展,其中相對引人注目的一個模型被稱為ZF-Net,來自下面這篇論文:
這篇論文的亮點是做了一些CNN網絡中各個卷積層feature map的可視化工作,試圖解釋不同深度/level的卷積層到底學習到了圖像內容的哪些特征,探究CNN從低層到高層是如何一步步先提取圖像的低級特征,然后對低級特征進行組合,進而得到更加抽象的高級語義特征的。
但從網絡結構上來說,ZF-Net沒什么亮點,只是對AlexNet進行了小修小補(比如把AlexNet第一個卷積層kernel=11x11/s=4改為kernel=7x7/s=2),最終在ImageNet分類競賽上面的top-5準確率,也只從AlexNet的16.4%提升到ZF-Net的14.8%。
而在接下來的2014年,CNN網絡架構設計迎來了第二次爆發,代表性的兩個模型是VGG-Net和GoogleNet。這一節介紹VGG-Net。
VGG-Net這篇論文的主要亮點有:
- 通過詳細的對比試驗,探究了在統一的CNN網絡架構下,不同深度的卷積層對CNN網絡性能的影響;
- 卷積層全部使用了3X3的卷積核,組成了一個相當優雅的網絡結構,并指出了小的卷積核的優勢;
- 從CNN分類網絡構成思想來看,VGG-Net延續了包括LeNet-5、AlexNet以及ZF-Net在內的一貫作風,即卷積層+全連接層的網絡組成,一系列卷積層用于提取圖像特征,最后使用3個全連接層/MLP用作分類器,并且將這一構成模式發揮到了極致,通過后面我們對NIN/Inception/ResNet的分析中將會看到,全連接層的使用會大大增加CNN分類模型的空間復雜度(正比于模型參數數量,也可以從模型文件的大小來理解),對于分類網絡來說,使用全局平均池化(global average pooling)層代替全連接層是更優的選擇。
VGG-Net總共包含了5個版本ABCDE,每個版本的網絡結構如下表所示:
VGG-Net網絡設計的特點如下:
所有VGG-Net版本在全連接層部分完全相同,所有卷積層完全相同:kernel=3x3,padding=1,stride=1,這樣造成的結果是,卷積前后圖像/feature map的尺寸保持不變。通過5個kernel=2x2,stride=2的最大池化層來逐漸減小feature map的分辨率;
5個VGG-Net版本,從A-E,通過逐漸增加卷積層,使得模型的性能逐漸提升,很好地驗證了CNN網絡的深度/depth對網絡性能的影響,網絡越深,模型性能越好;
-
全程使用3x3的小卷積核,是VGG-Net的另一大特點,我們知道,對于感受野來講,2個3x3卷積相當于1個5x5卷積操作,3個3x3卷積相當于1個7x7卷積,那3個3x3卷積相比于1個7x7卷積有什么優勢呢?具體包含兩個優點:
- 第一點,3個3x3卷積包含了3個Relu非線性層,1個7x7卷積只有一個Relu非線性層,顯然3個Relu層能使得學習到的決策函數的識別能力更強;
- 第二點,3個3x3卷積相比于1個7x7卷積,包含了更少的模型參數。假設輸入層和輸出層的通道數都為C,3個3x3卷積總共包含3x3x3xCxC=27C2個權重參數,而1個7x7卷積包含7x7xCxC=49C2個權重參數,多了81%,更少的權重參數,使得模型更不容易過擬合(over-fitting)。
VGG-Net也有一個缺點,就是網絡的模型參數很多,下圖是VGG-Net的5個版本的模型參數量:
其中用的最多的是VGG-Net的D版本,習慣上稱為VGG16,因為它包含16個權重層。后面我們會知道,VGG-Net的空間復雜度基本上是主流的CNN分類模型中最大的之一。
- 另外,關于VGG-Net的模型的數據增強,訓練策略,以及測試時的多尺度/裁剪策略等,不是這一系列文章的重點,感興趣可以看論文中的細節,我們重點是學習總結每個經典CNN網絡的架構設計特點。
2. 總結
VGG-Net延續了分類網絡中,卷積層+全連接層的設計特點,全程采用了非常小的3x3卷積核,通過實驗,不斷加深卷積層的數目,得到了一個結構優雅,同時性能強大的經典CNN模型(唯一的缺點是模型復雜度很大),值得一提的是,雖然VGG16在2014年的ImageNet分類競賽中不敵GoogleNet只得了亞軍,但那是多個模型融合后的結果,單個模型的性能的話,VGG16是比GoogleNet強的。這也側面地證明了VGG卷積架構的優異性。
因此在隨后幾年,其他領域比如目標檢測、場景文本檢測以及風格遷移,很多經典模型都使用了VGG16的卷積部分作為特征提取主干網絡。