深度學習經典卷積神經網絡之VGGNet


論文地址:https://arxiv.org/abs/1409.1556

VGGNet是牛津大學計算機視覺組(VisualGeometry Group)和GoogleDeepMind公司的研究員一起研發的的深度卷積神經網絡。VGGNet探索了卷積神經網絡的深度與其性能之間的關系,通過反復堆疊3*3的小型卷積核和2*2的最大池化層,VGGNet成功地構築了16~19層深的卷積神經網絡。VGGNet相比之前state-of-the-art的網絡結構,錯誤率大幅下降,並取得了ILSVRC 2014比賽分類項目的第2名和定位項目的第1名。同時VGGNet的拓展性很強,遷移到其他圖片數據上的泛化性非常好。VGGNet的結構非常簡潔,整個網絡都使用了同樣大小的卷積核尺寸(3*3)和最大池化尺寸(2*2。到目前為止,VGGNet依然經常被用來提取圖像特征。VGGNet訓練后的模型參數在其官方網站上開源了,可用來在特定的圖像分類任務上進行再訓練(相當於提供了非常好的初始化權重),因此被用在了很多地方。

VGGNet論文中全部使用了3*3的卷積核和2*2的池化核,通過不斷加深網絡結構來提升性能。圖1所示為VGGNet各級別的網絡結構圖,圖2所示為每一級別的參數量,從11層的網絡一直到19層的網絡都有詳盡的性能測試。雖然從A到E每一級網絡逐漸變深,但是網絡的參數量並沒有增長很多,這是因為參數量主要都消耗在最后3個全連接層。前面的卷積部分雖然很深,但是消耗的參數量不大,不過訓練比較耗時的部分依然是卷積,因其計算量比較大。這其中的D、E也就是我們常說的VGGNet-16和VGGNet-19。C很有意思,相比B多了幾個1*1的卷積層,1*1卷積的意義主要在於線性變換,而輸入通道數和輸出通道數不變,沒有發生降維

訓練時,輸入是大小為224*224的RGB圖像,預處理只有在訓練集中的每個像素上減去RGB的均值

圖1  VGGNet各級別網絡結構圖

圖2  VGGNet各級別網絡參數量

VGGNet擁有5段卷積,每一段內有2~3個卷積層,同時每段尾部會連接一個最大池化層用來縮小圖片尺寸。每段內的卷積核數量一樣,越靠后的段的卷積核數量越多:64-128-256-512-512。其中經常出現多個完全一樣的3*3的卷積層堆疊在一起的情況,這其實是非常有用的設計。如圖3所示,兩個3*3的卷積層串聯相當於15*5的卷積層,即一個像素會跟周圍5*5的像素產生關聯,可以說感受野大小為5*5。而33*3的卷積層串聯的效果則相當於17*7的卷積層。除此之外,3個串聯的3*3的卷積層,擁有比17*7的卷積層更少的參數量,只有后者的(3*3*3)/(7*7)=55%。最重要的是,33*3的卷積層擁有比17*7的卷積層更多的非線性變換(前者可以使用三次ReLU激活函數,而后者只有一次),使得CNN對特征的學習能力更強。

3  兩個串聯3´3的卷積層功能類似於一個5´5的卷積層

VGGNet在訓練時有一個小技巧,先訓練級別A的簡單網絡,再復用A網絡的權重來初始化后面的幾個復雜模型,這樣訓練收斂的速度更快。在預測時,VGG采用Multi-Scale的方法,將圖像scale到一個尺寸Q,並將圖片輸入卷積網絡計算。然后在最后一個卷積層使用滑窗的方式進行分類預測,將不同窗口的分類結果平均,再將不同尺寸Q的結果平均得到最后結果,這樣可提高圖片數據的利用率並提升預測准確率。在訓練中,VGGNet還使用了Multi-Scale的方法做數據增強,將原始圖像縮放到不同尺寸S,然后再隨機裁切224´224的圖片,這樣能增加很多數據量,對於防止模型過擬合有很不錯的效果。實踐中,作者令S在[256,512]這個區間內取值,使用Multi-Scale獲得多個版本的數據,並將多個版本的數據合在一起進行訓練。圖4所示為VGGNet使用Multi-Scale訓練時得到的結果,可以看到D和E都可以達到7.5%的錯誤率。最終提交到ILSVRC 2014的版本是僅使用Single-Scale的6個不同等級的網絡與Multi-Scale的D網絡的融合,達到了7.3%的錯誤率。不過比賽結束后作者發現只融合Multi-Scale的D和E可以達到更好的效果,錯誤率達到7.0%,再使用其他優化策略最終錯誤率可達到6.8%左右,非常接近同年的冠軍Google Inceptin Net。同時,作者在對比各級網絡時總結出了以下幾個觀點:1LRN層作用不大(VGGNet不使用局部響應標准化(LRN),這種標准化並不能在ILSVRC數據集上提升性能,卻導致更多的內存消耗和計算時間。);2)越深的網絡效果越好;(31*1的卷積也是很有效的,但是沒有3*3的卷積好,大一些的卷積核可以學習更大的空間特征。


4  各級別VGGNet在使用Multi-Scale訓練時的top-5錯誤率

在訓練的過程中,比AlexNet收斂的要快一些,原因為:(1)使用小卷積核和更深的網絡進行的正則化;(2)在特定的層使用了預訓練得到的數據進行參數的初始化。

對於較淺的網絡,如網絡A,可以直接使用隨機數進行隨機初始化,而對於比較深的網絡,則使用前面已經訓練好的較淺的網絡中的參數值對其前幾層的卷積層和最后的全連接層進行初始化。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com