VGG(2014),3×3卷積的勝利
- 2019 年 10 月 14 日
- 筆記
部落格: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」。
- 只使用(3times 3)的卷積核,通過多個(3 times 3)卷積層疊加來獲得與大卷積核相同的感受野,同時引入更多的非線性,減少了參數。若有(C)個channel,3個(3times 3)的卷積層參數量為(3(3^2C^2)=27C^2),1個(7times 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個(1times 1)卷積層,為16層
- D將C的3個(1times 1)卷積層替換為(3times 3)卷積層,仍為16層
- E在D的基礎上又增加了3個(3times 3)卷積層,為19層
- 每次maxpool後,feature map尺寸減半,緊隨其後的卷積層會將feature map的數量加倍,64→128→256→512
B網路有個特點,每2個(3times 3)卷積層一組,再接maxpool。實際上,在實驗中還配置了另一個網路——將B的「each pair of (3times 3) conv」替換為1個(5times 5)卷積層,其性能要比B差7%,所以paper認為小卷積核深網路要比大卷積核淺網路好。
paper中的實驗均在上述網路中進行,下面具體看一下。
multi-scale training and testing
在訓練階段,VGG的輸入固定為(224times 224),對尺寸不同的影像需要先scale再crop到(224times 224),理論上只需要將影像最短的邊scale到大於等於224即可進行crop,paper中設置了2種scale方式,第一種scale到256或384,第二種隨機scale到([256, 512])之間——384恰好位於256和512的中間,做了對比實驗。
測試階段,不再進行crop操作,而是採用了Overfeat中的一個技巧,將網路最後的3個全連接層在實現上轉化成卷積層,以適應不同尺寸的輸入,這個技巧在paper中稱之為dense。全連接層的運算方式是輸入向量與權重矩陣相乘,當權重矩陣的尺寸確定了,輸入向量的長度就不可改變了,而卷積的運算方式是權重在輸入上滑動內積,所以只需要輸入的尺寸大於kernel的窗口即可。具體地,如果輸入恰好為(224times 224),經歷過5次maxpool後,feature map尺寸變為(7 times 7),當輸入尺寸大於224時,這個feature map將大於等於(7times 7)。將3個全連接層依次轉化為(7times 7)卷積和2個(1times 1)卷積,這種轉化並不改變權重,只是實現方式上的變化,此時整個網路為全卷積網路。如果輸入影像大於(224times 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%區間。
以上。
參考
- arXiv: Very Deep Convolutional Networks for Large-Scale Image Recognition
- Large Scale Visual Recognition Challenge 2014 (ILSVRC2014)
- Review: VGGNet — 1st Runner-Up (Image Classification), Winner (Localization) in ILSVRC 2014