VGG網路結構分析

一:VGG詳解

本節主要對VGG網路結構做一個詳細的解讀,並針對它所在Alexnet上做出的改動做詳解的分析。
首先,附上一張VGG的網路結構圖:

這裡寫圖片描述
由上圖所知,VGG一共有五段卷積,每段卷積之後緊接著最大池化層,作者一共實驗了6種網路結構。分別是VGG-11,VGG-13,VGG-16,VGG-19,網路的輸入是224*224大小的影象,輸出是影象分類結果(本文只針對網路在影象分類任務上,影象定位任務上暫不做分析)
接下來開始對VGG做詳細的分析,首先VGG是基於Alexnet網路的,VGG在Alexnet基礎上對深度神經網路在深度和寬度上做了更多深入的研究,業界普遍認為,更深的網路具有比淺網路更強的表達能力,更能刻畫現實,完成更復雜的任務。
首先,VGG與Alexnet相比,具有如下改進幾點:

  • 去掉了LRN層,作者發現深度網路中LRN的作用並不明顯,乾脆取消了
  • 採用更小的卷積核-3×3,Alexnet中使用了更大的卷積核,比如有7×7的,因此VGG相對於Alexnet而言,引數量更少
  • 池化核變小,VGG中的池化核是2×2,stride為2,Alexnet池化核是3×3,步長為2

這樣做改進都是有一些原因的,首先為了更好的探究深度對網路的影響,必須要解決引數量的問題,更深的網路意味著更多的引數,訓練更困難,使用大卷積核時尤其明顯。作者通過分析,認為由於卷積神經網路的特性,3×3大小的卷積核足以捕捉到橫、豎以及斜對角畫素的變化。使用大卷積核會帶來引數量的爆炸不說,而且影象中會存在一些部分被多次卷積,可能會給特徵提取帶來困難,所以在VGG中,普遍使用3×3的卷積。
另外在VGG網路的最後幾層使用了三層全連線層,最終接一個softmax,事實上,這三層全連線層的引數在VGG的整體引數中佔據了很大一部分,不過就目前來講,為了減少引數量,後幾層的全連線網路都被全劇平均池化(globalglobal averageaverage poolingpooling)和卷積操作代替了,但是全域性平均池化也有很大的優點,下文會詳細介紹。

眾所周知,VGG是一個良好的特徵提取器,其與訓練好的模型也經常被用來做其他事情,比如計算perceptual loss(風格遷移和超解析度任務中),儘管現在resnet和inception網路等等具有很高的精度和更加簡便的網路結構,但是在特徵提取上,VGG一直是一個很好的網路,所以說,當你的某些任務上resnet或者inception等表現並不好時,不妨試一下VGG,或許會有意想不到的結果。

VGG之所以是一個很好的特徵提取器,除了和它的網路結構有關,我認為還和它的訓練方式有關係,VGG並不是直接訓練完成的,它使用了逐層訓練的方法。

分析到這裡可以得出結論,VGG對於Alexnet來說,改進並不是很大,主要改進就在於使用了小卷積核,網路是分段卷積網路,通過maxpooling過度,同時網路更深更寬。