大話經典卷積神經網絡-VGGNet

《Very Deep Convolutional Networks for Large-Scale Image Recognition》

1、VGG簡介

自Alexnet於2012年的ILSVRC大賽中奮勇奪魁後,ConvNet就不可抑制地大發展了起來。2014年新的一屆ILSVRC大賽中Googlenet與VGG的身影分外亮眼。Googlenet相對VGG而言在網絡結構上有了更新的突破,不過其複雜度也大大增加了。VGG相對Googlenet雖然精度略遜些,但其整體網絡框架還是延續了Alexnet及更早的Lenet等的一貫思路,此外還更深入的探討了ConvNet深度對模型性能可能的影響。由於其整個網絡結構的簡單、強大,VGG16/VGG19曾一度廣泛被用作各種檢測網絡框架像Faster-RCNN/SSD等的主幹特徵提取網絡,直到Resnet提出之後,它才漸漸完成了其歷史使命,退居二線了。。不過至今仍有許多計算機視覺領域內的任務會考慮VGG的網絡設計來構建其新的應用網絡模型。

牛津大學VGG(Visual Geometry Group)組在2014年ILSVRC提出的模型被稱作VGG模型 。該模型相比以往模型進一步加寬和加深了網絡結構,它的核心是五組卷積操作,每兩組之間做Max-Pooling空間降維。同一組內採用多次連續的3X3卷積,卷積核的數目由較淺組的64增多到最深組的512,同一組內的卷積核數目是一樣的。卷積之後接兩層全連接層,之後是分類層。由於每組內卷積層的不同,有11、13、16、19層這幾種模型,下圖展示一個16層的網絡結構。VGG模型結構相對簡潔,提出之後也有很多文章基於此模型進行研究,如在ImageNet上首次公開超過人眼識別的模型就是借鑑VGG模型的結構。

2、VGG原理

VGG 相比 AlexNet 的一個改進是採用連續的幾個3x3的卷積核代替較大卷積核(11x11,7x7,5x5)。對於給定的感受野(與輸出有關的輸入圖片的局部大小),採用堆積的小卷積核是優於採用大的卷積核,因爲多層非線性層可以增加網絡深度來保證學習更復雜的模式,而且代價還比較小(參數更少)。

簡單來說,在VGG中,使用了3個3x3卷積核來代替7x7卷積核,使用了2個3x3卷積核來代替5*5卷積核,這樣做的主要目的是在保證具有相同感知野的條件下,提升了網絡的深度,在一定程度上提升了神經網絡的效果。

比如,3個步長爲1的3x3卷積核的一層層疊加作用可看成一個大小爲7的感受野(其實就表示3個3x3連續卷積相當於一個7x7卷積),其參數總量爲 3x(9xC^2) ,如果直接使用7x7卷積核,其參數總量爲 49xC^2 ,這裏 C 指的是輸入和輸出的通道數。很明顯,27xC2小於49xC2,即減少了參數;而且3x3卷積核有利於更好地保持圖像性質。

作用在於:

  1. 增加了兩層非線性層 ReLU,

  2. 減少了網絡的參數

爲什麼使用2個3x3卷積核可以來代替5*5卷積核:

5x5卷積看做一個小的全連接網絡在5x5區域滑動,我們可以先用一個3x3的卷積濾波器卷積,然後再用一個全連接層連接這個3x3卷積輸出,這個全連接層我們也可以看做一個3x3卷積層。這樣我們就可以用兩個3x3卷積級聯(疊加)起來代替一個 5x5卷積。

具體如下圖所示:

至於爲什麼使用3個3x3卷積核可以來代替7*7卷積核,推導過程與上述類似,大家可以自行繪圖理解。

參數優勢:

由於參數個數僅與卷積核大小有關,所以3*3級聯卷積核佔優勢。

3、VGG網絡結構

下面是VGG網絡的結構(VGG16和VGG19都在):

VGG網絡

可以從圖中看出,從A到最後的E,他們增加的是每一個卷積組中的卷積層數,最後D,E是我們常見的VGG-16,VGG-19模型,C中作者說明,在引入1*1是考慮做線性變換(這裏channel一致, 不做降維),後面在最終數據的分析上來看C相對於B確實有一定程度的提升,但不如D。

  • VGG16包含了16個隱藏層(13個卷積層和3個全連接層),如上圖中的D列所示

  • VGG19包含了19個隱藏層(16個卷積層和3個全連接層),如上圖中的E列所示

VGG網絡的結構非常一致,從頭到尾全部使用的是3x3的卷積和2x2的max pooling。

如果你想看到更加形象化的VGG網絡,可以使用經典卷積神經網絡(CNN)結構可視化工具來查看高清無碼的VGG網絡

4、VGG優缺點

VGG優點

  • VGGNet的結構非常簡潔,整個網絡都使用了同樣大小的卷積核尺寸(3x3)和最大池化尺寸(2x2)。
  • 幾個小濾波器(3x3)卷積層的組合比一個大濾波器(5x5或7x7)卷積層好:
  • 驗證了通過不斷加深網絡結構可以提升性能。

VGG缺點

  • VGG耗費更多計算資源,並且使用了更多的參數(這裏不是3x3卷積的鍋),導致更多的內存佔用(140M)。其中絕大多數的參數都是來自於第一個全連接層。VGG可是有3個全連接層啊!

PS:有的文章稱:發現這些全連接層即使被去除,對於性能也沒有什麼影響,這樣就顯著降低了參數數量。

注:很多 pretrained 的方法就是使用 VGG 的 model(主要是16和19),VGG 相對其他的方法,參數空間很大,最終的 model 有500多m,AlexNet只有200m,GoogLeNet更少,所以train一個vgg模型通常要花費更長的時間,所幸有公開的 pretrained model 讓我們很方便的使用。

5、VGG Tensorflow2.0實現

GitHub地址:https://github.com/freeshow/ComputerVisionStudy

6、相關鏈接

  • https://zhuanlan.zhihu.com/p/41423739

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章