—— 原文發佈於本人的微信公衆號「大數據與人工智能Lab」(BigdataAILab),歡迎關注。算法
2014年,牛津大學計算機視覺組(Visual Geometry Group)和Google DeepMind公司的研究員一塊兒研發出了新的深度卷積神經網絡:VGGNet,並取得了ILSVRC2014比賽分類項目的第二名(第一名是GoogLeNet,也是同年提出的)和定位項目的第一名。
VGGNet探索了卷積神經網絡的深度與其性能之間的關係,成功地構築了16~19層深的卷積神經網絡,證實了增長網絡的深度可以在必定程度上影響網絡最終的性能,使錯誤率大幅降低,同時拓展性又很強,遷移到其它圖片數據上的泛化性也很是好。到目前爲止,VGG仍然被用來提取圖像特徵。
VGGNet能夠當作是加深版本的AlexNet,都是由卷積層、全鏈接層兩大部分構成。卷積神經網絡技術原理、AlexNet在本博客前面的文章已經有做了詳細的介紹,有興趣的同窗可打開連接看看(大話卷積神經網絡,大話CNN經典模型:AlexNet)。微信
1、VGG的特色
先看一下VGG的結構圖
一、結構簡潔
VGG由5層卷積層、3層全鏈接層、softmax輸出層構成,層與層之間使用max-pooling(最大化池)分開,全部隱層的激活單元都採用ReLU函數。
二、小卷積核和多卷積子層
VGG使用多個較小卷積核(3x3)的卷積層代替一個卷積核較大的卷積層,一方面能夠減小參數,另外一方面至關於進行了更多的非線性映射,能夠增長網絡的擬合/表達能力。
小卷積核是VGG的一個重要特色,雖然VGG是在模仿AlexNet的網絡結構,但沒有采用AlexNet中比較大的卷積核尺寸(如7x7),而是經過下降卷積核的大小(3x3),增長卷積子層數來達到一樣的性能(VGG:從1到4卷積子層,AlexNet:1子層)。
VGG的做者認爲兩個3x3的卷積堆疊得到的感覺野大小,至關一個5x5的卷積;而3個3x3卷積的堆疊獲取到的感覺野至關於一個7x7的卷積。這樣能夠增長非線性映射,也能很好地減小參數(例如7x7的參數爲49個,而3個3x3的參數爲27),以下圖所示:
三、小池化核
相比AlexNet的3x3的池化核,VGG所有采用2x2的池化核。
四、通道數多
VGG網絡第一層的通道數爲64,後面每層都進行了翻倍,最多到512個通道,通道數的增長,使得更多的信息能夠被提取出來。
五、層數更深、特徵圖更寬
因爲卷積核專一於擴大通道數、池化專一於縮小寬和高,使得模型架構上更深更寬的同時,控制了計算量的增長規模。
六、全鏈接轉卷積(測試階段)
這也是VGG的一個特色,在網絡測試階段將訓練階段的三個全鏈接替換爲三個卷積,使得測試獲得的全卷積網絡由於沒有全鏈接的限制,於是能夠接收任意寬或高爲的輸入,這在測試階段很重要。
如本節第一個圖所示,輸入圖像是224x224x3,若是後面三個層都是全鏈接,那麼在測試階段就只能將測試的圖像所有都要縮放大小到224x224x3,才能符合後面全鏈接層的輸入數量要求,這樣就不便於測試工做的開展。
而「全鏈接轉卷積」,替換過程以下:
例如7x7x512的層要跟4096個神經元的層作全鏈接,則替換爲對7x7x512的層做通道數爲409六、卷積核爲1x1的卷積。
這個「全鏈接轉卷積」的思路是VGG做者參考了OverFeat的工做思路,例以下圖是OverFeat將全鏈接換成卷積後,則能夠來處理任意分辨率(在整張圖)上計算卷積,這就是無需對原圖作從新縮放處理的優點。網絡
2、VGG的網絡結構
下圖是來自論文《Very Deep Convolutional Networks for Large-Scale Image Recognition》(基於甚深層卷積網絡的大規模圖像識別)的VGG網絡結構,正是在這篇論文中提出了VGG,以下圖:
在這篇論文中分別使用了A、A-LRN、B、C、D、E這6種網絡結構進行測試,這6種網絡結構類似,都是由5層卷積層、3層全鏈接層組成,其中區別在於每一個卷積層的子層數量不一樣,從A至E依次增長(子層數量從1到4),總的網絡深度從11層到19層(添加的層以粗體顯示),表格中的卷積層參數表示爲「conv⟨感覺野大小⟩-通道數⟩」,例如con3-128,表示使用3x3的卷積核,通道數爲128。爲了簡潔起見,在表格中不顯示ReLU激活功能。
其中,網絡結構D就是著名的VGG16,網絡結構E就是著名的VGG19。架構
以網絡結構D(VGG16)爲例,介紹其處理過程以下,請對比上面的表格和下方這張圖,留意圖中的數字變化,有助於理解VGG16的處理過程:
一、輸入224x224x3的圖片,經64個3x3的卷積核做兩次卷積+ReLU,卷積後的尺寸變爲224x224x64
二、做max pooling(最大化池化),池化單元尺寸爲2x2(效果爲圖像尺寸減半),池化後的尺寸變爲112x112x64
三、經128個3x3的卷積核做兩次卷積+ReLU,尺寸變爲112x112x128
四、做2x2的max pooling池化,尺寸變爲56x56x128
五、經256個3x3的卷積核做三次卷積+ReLU,尺寸變爲56x56x256
六、做2x2的max pooling池化,尺寸變爲28x28x256
七、經512個3x3的卷積核做三次卷積+ReLU,尺寸變爲28x28x512
八、做2x2的max pooling池化,尺寸變爲14x14x512
九、經512個3x3的卷積核做三次卷積+ReLU,尺寸變爲14x14x512
十、做2x2的max pooling池化,尺寸變爲7x7x512
十一、與兩層1x1x4096,一層1x1x1000進行全鏈接+ReLU(共三層)
十二、經過softmax輸出1000個預測結果分佈式
以上就是VGG16(網絡結構D)各層的處理過程,A、A-LRN、B、C、E其它網絡結構的處理過程也是相似,執行過程以下(以VGG16爲例):
從上面的過程能夠看出VGG網絡結構仍是挺簡潔的,都是由小卷積核、小池化核、ReLU組合而成。其簡化圖以下(以VGG16爲例):函數
A、A-LRN、B、C、D、E這6種網絡結構的深度雖然從11層增長至19層,但參數量變化不大,這是因爲基本上都是採用了小卷積核(3x3,只有9個參數),這6種結構的參數數量(百萬級)並未發生太大變化,這是由於在網絡中,參數主要集中在全鏈接層。
經做者對A、A-LRN、B、C、D、E這6種網絡結構進行單尺度的評估,錯誤率結果以下:
從上表能夠看出:
一、LRN層無性能增益(A-LRN)
VGG做者經過網絡A-LRN發現,AlexNet曾經用到的LRN層(local response normalization,局部響應歸一化)並無帶來性能的提高,所以在其它組的網絡中均沒再出現LRN層。
二、隨着深度增長,分類性能逐漸提升(A、B、C、D、E)
從11層的A到19層的E,網絡深度增長對top1和top5的錯誤率降低很明顯。
三、多個小卷積核比單個大卷積核性能好(B)
VGG做者作了實驗用B和本身一個不在實驗組裏的較淺網絡比較,較淺網絡用conv5x5來代替B的兩個conv3x3,結果顯示多個小卷積核比單個大卷積核效果要好。oop
最後進行個小結:
一、經過增長深度能有效地提高性能;
二、最佳模型:VGG16,從頭至尾只有3x3卷積與2x2池化,簡潔優美;
三、卷積可代替全鏈接,可適應各類尺寸的圖片性能
牆裂建議學習
2014年,K. Simonyan等人發表了關於VGGNet的經典論文《Very Deep Convolutional Networks for Large-Scale Image Recognition》(基於甚深層卷積網絡的大規模圖像識別),在該論文中對VGG的思想、測試狀況進行了詳細介紹,建議閱讀這篇論文加深瞭解。測試
掃描如下二維碼關注本人公衆號「大數據與人工智能Lab」(BigdataAILab),而後回覆「論文」關鍵字可在線閱讀這篇經典論文的內容。
推薦相關閱讀