1. 程式人生 > >VGG(2014),3x3卷積的勝利

VGG(2014),3x3卷積的勝利

目錄

  • 寫在前面
  • 網路結構
  • multi-scale training and testing
  • 其他有意思的點
  • 參考

部落格:blog.shinelee.me | 部落格園 | CSDN

寫在前面

VGG(2014)網路出自paper《Very Deep Convolutional Networks for Large-Scale Image Recognition》,為ILSVRC2014 localization冠軍和classification亞軍方法(冠軍為GoogLeNet),首次提交arXiv時間為2014年9月,後發表在ICLR2015,截止20191011引用量達27612。因為出自牛津大學Visual Geometry Group,所以網路被命名為VGG,根據層數不同,又分為VGG16、VGG19等。

論文的主要貢獻:

  • 探究了網路深度對效能的影響,通過疊加捲積層來增加深度,效能變好——“Our results yet again confirm the importance of depth in visual representations”。
  • 只使用\(3\times 3\)的卷積核,通過多個\(3 \times 3\)卷積層疊加來獲得與大卷積核相同的感受野,同時引入更多的非線性,減少了引數。若有\(C\)個channel,3個\(3\times 3\)的卷積層引數量為\(3(3^2C^2)=27C^2\),1個\(7\times 7\)卷積層的引數量為\(7^2C^2=49C^2\),兩者的感受野相同。

網路結構

文中列舉了配置不同的5個網路,分別命名為A、A-LRN、B、C、D、E,網路結構及引數量如下圖所示,

這些網路配置的特點是:

  • A-LRN與A相比,僅在第一個卷積層後加入LRN層,A和A-LRN含可學習引數的層數均為11層
  • B比A多了2個\(3 \times 3\)卷積層,為13層
  • C比B多了3個\(1\times 1\)卷積層,為16層
  • D將C的3個\(1\times 1\)卷積層替換為\(3\times 3\)卷積層,仍為16層
  • E在D的基礎上又增加了3個\(3\times 3\)卷積層,為19層
  • 每次maxpool後,feature map尺寸減半,緊隨其後的卷積層會將feature map的數量加倍,64→128→256→512

B網路有個特點,每2個\(3\times 3\)卷積層一組,再接maxpool。實際上,在實驗中還配置了另一個網路——將B的“each pair of \(3\times 3\) conv”替換為1個\(5\times 5\)卷積層,其效能要比B差7%,所以paper認為小卷積核深網路要比大卷積核淺網路好。

paper中的實驗均在上述網路中進行,下面具體看一下。

multi-scale training and testing

在訓練階段,VGG的輸入固定為\(224\times 224\),對尺寸不同的影象需要先scale再crop到\(224\times 224\),理論上只需要將影象最短的邊scale到大於等於224即可進行crop,paper中設定了2種scale方式,第一種scale到256或384,第二種隨機scale到\([256, 512]\)之間——384恰好位於256和512的中間,做了對比實驗。

測試階段,不再進行crop操作,而是採用了Overfeat中的一個技巧,將網路最後的3個全連線層在實現上轉化成卷積層,以適應不同尺寸的輸入,這個技巧在paper中稱之為dense。全連線層的運算方式是輸入向量與權重矩陣相乘,當權重矩陣的尺寸確定了,輸入向量的長度就不可改變了,而卷積的運算方式是權重在輸入上滑動內積,所以只需要輸入的尺寸大於kernel的視窗即可。具體地,如果輸入恰好為\(224\times 224\),經歷過5次maxpool後,feature map尺寸變為\(7 \times 7\),當輸入尺寸大於224時,這個feature map將大於等於\(7\times 7\)。將3個全連線層依次轉化為\(7\times 7\)卷積和2個\(1\times 1\)卷積,這種轉化並不改變權重,只是實現方式上的變化,此時整個網路為全卷積網路。如果輸入影象大於\(224\times 224\),網路最後輸出的class score map將大於\(1000 \times 1\),為了得到固定長度為1000的class score vetor,只需將其進行spatially average(sum-pooled),然後再softmax。更多可以參見Converting Fully-Connected Layers to Convolutional Layers的解釋。

預測階段的multi scale,即將輸入影象做不同scale,分別輸入網路,對預測結果取平均。

下圖分別為single scale和mutiple scale測試的結果,測試庫為ILSVRC-2012 dataset,

上面的對比實驗,可得出以下結論:

  • 隨著深度增加,效能變好
  • 與A相比,A-LRN效能沒有改善,LRN用途不大
  • 無論是training還是testing,multiple scale均能改善效能,兩者結合使用效果更佳
  • 在當前資料集和網路結構配置上,VGG16(D)和VGG19(E)效能基本一樣,接近飽和

對於multi scale對效能的改善,想來也是合理的,因為影象中目標的尺寸並不確定,有大有小,在訓練階段通過scale jittering來增廣資料,可讓網路在一定程度上cover這種變化,而在預測階段,multi scale可以看成在輸入資料上做的整合學習,亦是提升效能的常規操作。

其他有意思的點

論文中還有一些其他有意思的點,簡單總結如下,

  • 為了網路能正常收斂,權重的初始化很重要,原來是先訓練淺層網路A,然後用A的權重初始化後面深層網路前4個卷積層和最後3個全連線層,其他層從高斯分佈中隨機初始化。在paper submission後發現,直接採用Understanding the difficulty of training deep feedforward neural networks中的初始化方法就可以,即Xavier方法。
  • paper中評論,因為A-LRN中的Local Response Normalisation(LRN)沒有效果,還增加了記憶體使用和計算量,所以後面的BCDE網路就不用了(微笑)。
  • 在ILSVRC-2014 challenge中,VGG提交的是7模型融合結果,提交後他們測試2模型的融合結果要更好,top1 val好1%,top5 val好0.5%,不過是在multi-scale traing、multi-crop和dense一起加成下取得的結果。
  • VGG (1 net, multi-crop & dense eval) 單網路比GoogLeNet單網路的效能要好約1%。
  • 2014年,ImageNet競賽Top5錯誤率首次進入0~10%區間。

以上。

參考