VGGNet网络结构学习
前言
VGG是Oxford的Visual Geometry Group的組提出的(大家應該能看出VGG名字的由來了)。該網絡是在ILSVRC 2014上的相關工作,主要工作是證明了增加網絡的深度能夠在一定程度上影響網絡最終的性能。VGG有兩種結構,分別是VGG16和VGG19,兩者并沒有本質上的區別,只是網絡深度不一樣。
VGGNet網絡
深度神經網絡一般由卷積部分和全連接部分構成。卷積部分一般包含卷積(可以有多個不同尺寸的核級聯組成)、池化、Dropout等,其中Dropout層必須放在池化之后。全連接部分一般最多包含2到3個全連接,最后通過Softmax得到分類結果,由于全連接層參數量大,現在傾向于盡可能的少用或者不用全連接層。神經網絡的發展趨勢是考慮使用更小的過濾器,如11,33等;網絡的深度更深(2012年AlenNet8層,2014年VGG19層、GoogLeNet22層,2015年ResNet152層);減少全連接層的使用,以及越來越復雜的網絡結構,如GoogLeNet引入的Inception模塊結構。
VGGNet獲得2014年ImageNet亞軍,VGG是牛津大學 Visual Geometry Group(視覺幾何組)的縮寫,以研究機構命名。
VGG在AlexNet基礎上做了改進,整個網絡都使用了同樣大小的33卷積核尺寸和22最大池化尺寸,網絡結果簡潔。一系列VGG模型的結構圖:
VGG原理
VGG16相比AlexNet網絡而言改進是采用幾個連續的33的卷積核代替了AlexNet網絡中的較大的卷積核(1111, 77, 55)。對于給定的感受野(與輸出相關的輸入圖片的局部大小), 采用堆積的小卷積是由于采用較大的卷積核, 因為多層非線性層可以增加網絡深度來保證學習更復雜的模式,而且代價還比較小。
簡單來說,VGG使用了3個33的卷積核代替了77的卷積核, 使用了2個33 的卷積核代替了55的卷積核, 這樣的主要目的是在保證具有相同的感受野的條件下,提升了網絡的深度, 在一定程度上提升了網絡的效果。
比如,3個步長為1的3x3卷積核的一層層疊加作用可看成一個大小為7的感受野(其實就表示3個3x3連續卷積相當于一個7x7卷積),其參數總量為 3x(9xC^2) ,如果直接使用7x7卷積核,其參數總量為 49xC^2 ,這里 C 指的是輸入和輸出的通道數。很明顯,27xC2小于49xC2,即減少了參數;而且3x3卷積核有利于更好地保持圖像性質。
這里解釋一下為什么使用2個33的卷積核來代替55 的卷積核?
5x5卷積看做一個小的全連接網絡在5x5區域滑動,我們可以先用一個3x3的卷積濾波器卷積,然后再用一個全連接層連接這個3x3卷積輸出,這個全連接層我們也可以看做一個3x3卷積層。這樣我們就可以用兩個3x3卷積級聯(疊加)起來代替一個 5x5卷積。
具體如下圖所示:
至于為什么使用3個3x3卷積核可以來代替7*7卷積核,推導過程與上述類似,大家可以自行繪圖理解。
VGG網絡結構
下面是VGG網絡結構(vgg16和vgg19):
-
VGG16包含了16個隱藏層(13個卷積層和3個全連接層),如上圖中的D列所示
-
VGG19包含了19個隱藏層(16個卷積層和3個全連接層),如上圖中的E列所示
VGG的網絡結構非常一直,從頭到尾采用的都是33的卷積核和22的max pooling。
VGG16包含16層,VGG19包含19層。一系列的VGG在最后三層的全連接層上完全一樣,整體結構上都包含5組卷積層,卷積層之后跟一個MaxPool。所不同的是5組卷積層中包含的級聯的卷積層越來越多。
AlexNet中每層卷積層中只包含一個卷積,卷積核的大小是77。在VGGNet中每層卷積層中包含2~4個卷積操作,卷積核的大小是33,卷積步長是1,池化核是2*2,步長為2。VGGNet最明顯的改進就是降低了卷積核的尺寸,增加了卷積的層數。
使用多個較小卷積核的卷積層代替一個卷積核較大的卷積層,一方面可以減少參數,另一方面作者認為相當于進行了更多的非線性映射,增加了網絡的擬合表達能力。
VGGNet的圖片預處理
VGG的輸入224*224的RGB圖像,預處理就是每一個像素減去了均值。
VGG的多尺度訓練
VGGNet使用了Multi-Scale的方法做數據增強,將原始圖像縮放到不同尺寸S,然后再隨機裁切224′224的圖片,這樣能增加很多數據量,對于防止模型過擬合有很不錯的效果。實踐中,作者令S在[256,512]這個區間內取值,使用Multi-Scale獲得多個版本的數據,并將多個版本的數據合在一起進行訓練。VGG作者在嘗試使用LRN之后認為LRN的作用不大,還導致了內存消耗和計算時間增加。
雖然網絡層數加深,但VGG在訓練的過程中比AlexNet收斂的要快一些,主要因為:
(1)使用小卷積核和更深的網絡進行的正則化;
(2)在特定的層使用了預訓練得到的數據進行參數的初始化。對于較淺的網絡,如網絡A,可以直接使用隨機數進行隨機初始化,而對于比較深的網絡,則使用前面已經訓練好的較淺的網絡中的參數值對其前幾層的卷積層和最后的全連接層進行初始化。
VGG優缺點
VGG優點
1、VGGNet的結構非常簡潔,整個網絡都使用了同樣大小的卷積核尺寸(3x3)和最大池化尺寸(2x2)。
2、幾個小濾波器(3x3)卷積層的組合比一個大濾波器(5x5或7x7)卷積層好:
3、驗證了通過不斷加深網絡結構可以提升性能。
VGG缺點
·VGG耗費更多計算資源,并且使用了更多的參數(這里不是3x3卷積的鍋),導致更多的內存占用(140M)。其中絕大多數的參數都是來自于第一個全連接層。VGG可是有3個全連接層啊!
PS:有的文章稱:發現這些全連接層即使被去除,對于性能也沒有什么影響,這樣就顯著降低了參數數量。
注:很多pretrained的方法就是使用VGG的model(主要是16和19),VGG相對其他的方法,參數空間很大,最終的model有500多m,AlexNet只有200m,GoogLeNet更少,所以train一個vgg模型通常要花費更長的時間,所幸有公開的pretrained model讓我們很方便的使用。
VGGNet改進點總結
一、使用了更小的33卷積核,和更深的網絡。兩個33卷積核的堆疊相對于55卷積核的視野,三個33卷積核的堆疊相當于77卷積核的視野。這樣一方面可以有更少的參數(3個堆疊的33結構只有77結構參數數量的(333)/(77)=55%);另一方面擁有更多的非線性變換,增加了CNN對特征的學習能力。
二、在VGGNet的卷積結構中,引入1*1的卷積核,在不影響輸入輸出維度的情況下,引入非線性變換,增加網絡的表達能力,降低計算量。
三、訓練時,先訓練級別簡單(層數較淺)的VGGNet的A級網絡,然后使用A網絡的權重來初始化后面的復雜模型,加快訓練的收斂速度。
四、采用了Multi-Scale的方法來訓練和預測。可以增加訓練的數據量,防止模型過擬合,提升預測準確率
注:寫的不好的地方還請大家見諒,若有錯誤,還大佬們指出。
總結
以上是生活随笔為你收集整理的VGGNet网络结构学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统选择题
- 下一篇: 代码比对工具-Diffmerge