〖想觀看更多中文論文導讀,至[論文速速讀]系列文章介紹可以看到目前已發布的所有文章!〗
VGG,ILSVRC 2014的亞軍(同年冠軍為GoogLeNet),儘管是亞軍但他提出來的設計構想對於CNN系列也有著很重要的影響,至今仍然是非常知名的一個Model。
paper網址: https://arxiv.org/pdf/1409.1556.pdf
ABSTRACT
In this work we investigate the effect of the convolutional network depth on its accuracy in the large-scale image recognition setting. Our main contribution is a thorough evaluation of networks of increasing depth using an architecture with very small (3×3) convolution filters, which shows that a significant improvement on the prior-art configurations can be achieved by pushing the depth to 16–19 weight layers
本篇文章主要的貢獻在於: 透過小的Conv filter(3x3)不斷疊加,使得CNN模型可以達到一個更深的層數且得到更好的精準度。
儘管這個概念很簡單,但是非常重要,當時對於filter參數到底要設大還有著許多的疑問和研究,例如AlexNet採用了極大的size(11x11)、ZFNet將size調小了但仍然使用到了7x7,GoogLeNet同時使用了不同的filter size…
但VGG這篇卻告訴你: 3x3就夠了!
INTRODUCTION
In this paper, we address another important aspect of ConvNet architecture design – its depth. To this end, we fix other parameters of the architecture, and steadily increase the depth of the network by adding more convolutional layers, which is feasible due to the use of very small (3 × 3) convolution filters in all layers.
這篇主要關注在ConvNet的設計架構上一個很重要的觀點: 深度,透過不斷堆疊小的Conv,我們可以走得更高更遠
這時候應該要再把NIN那個meme拿出來用
CONVNET CONFIGURATIONS
ARCHITECTURE
- 輸入的圖像都是224x224的RGB image,唯一做的preprocessing就是減去RGB的mean
- 然後圖片會經過一堆3x3 Conv with stride 1, padding 1
- 為什麼是3x3? 因為這是捕捉周圍(上下左右)關係的最小size
- stride跟padding這樣的設置使得Conv後圖片大小仍然不變
- 每個Conv後面都有接activation function
- 這邊論文提出了多種不同的架構,其中一種架構也引入了NIN的1x1Conv(參考[論文速速讀]Network In Network)來提高Non-linearity
- 經過總共5次的maxpooling,maxpooling使用2x2的size, with stride 2
- 但不是所有Conv後面都會接maxpooling,參照後面架構圖就知道了
Conv後面的Classifier的部分都由相同的架構組成: 3層的FC layer
- 前兩層分別是4096個neurons
- 最後一層是1000類with softmax
最後,關於其他的設置:
- Activation function都統一採用ReLU
- 除了其中一種架構外,其餘的架構都沒採用AlexNet的LRN(Local Response Normalization),他們發現LRN並不會提升效果反而增加了計算量
CONFIGURATIONS
總共有6種不同的架構被設計出來實驗,粗體字代表該架構比左邊的架構多出來的部分
- Conv3-64代表3x3的Conv,然後該層有64個channel
- model D & E 就是知名的VGG16和VGG19
接下來關於參數量的部分:
儘管層數很深,但使用的參數量也沒超過像GoogLeNet這種使用較大kernel size的模型(GoogLeNet使用了144M)
DISCUSSION
相較於以往在淺層使用較大的Conv使得模型學習到較大的感受野(Receptive fields),如AlexNet和ZFNet,VGG透過使用多個3x3的Conv疊加一樣能夠學到大的Receptive fields,例如:
- 兩層3x3 Conv可以學習到5x5的區塊
- 三層3x3 Conv可以學到7x7的區塊
如此使用的參數量更少,下面這張圖我覺得就解釋得足夠清楚了,這張圖是本文精華,懂了就差不多惹:
CLASSIFICATION FRAMEWORK
關於一些訓練階段的細節,參數設置的部分我就跳過了。執得一提的是關於參數初始化的部分,文章中提到:
The initialisation of the network weights is important, since bad initialisation can stall learning due to the instability of gradient in deep nets. To circumvent this problem, we began with training the configuration A (Table 1), shallow enough to be trained with random initialisation. Then, when training deeper architectures, we initialised the first four convolutional layers and the last three fullyconnected layers with the layers of net A (the intermediate layers were initialised randomly)
糟糕的參數初始化會使得深層網路學不好甚至不好收斂,所以他們從層數較淺的模型A開始訓練(shallow enough to be trained with random initialization),然後拿A的參數去初始化其他模型的前四層Conv和後三層FC layer,其餘的部分仍然是random初始化。
關於training image的部分,為了得到224x224他們做了randomly crop,並且做了random horizontal flipping & random RGB colour shift。同時,他們也考慮了多尺度下的模型訓練,這幾個部分有興趣的再去看原文。
CLASSIFICATION EXPERIMENTS
首先是針對單個模型的評估
- LRN的效果並沒有比較好
- 加入了1x1 Conv確實效果有提升(C>B),但包含Non-linearity又同時能捕捉周圍關係的3x3 Conv能有更好的表現(D>C)
- 其實模型D&E在這個深度下,錯誤率無法再繼續往下降低了,畢竟層數越深information越難向下傳遞下去,面臨了Gradient Vanishing的問題
此外,他們也將B模型的2個3x3 Conv置換成一個由5層5x5 Conv組成的淺層網路(具有相同的Receptive field),發現這樣做top-1 error上升了7%,證實了使用小filter的深層網路比大filter的淺層網路效果還要好。
對於圖像處理,他們也比較了使用multi-scale和multi-crop下的效果,數據證實效果確實有比較好的,不過這算是數據前處理的部份所以我就沒放上來做太多著墨。
最後在競賽上,和GoogLeNet相同VGG也採用了訓練多個模型然後做ensemble的做法來提昇精準度。下圖是跟其他模型的比較數據。
- 在競賽結束後,VGG又有做了一些實驗,可以看到最後在單一個模型的效果上VGG是優於GoogLeNet的。
總結
- VGG很大的一個設計思維就是: 透過淺而深的卷積神經網路來做到高準確度的表現
- 為什麼用3x3 Conv? 因為這是最小能夠包含周遭資訊的size
- AlexNet的LRN在這裡被證實沒有幫助,淘汰
- 看似模型越小越深越好,但其實在VGG19的時候深度就已經接近飽和了(因為Gradient Vanishing),此時就需要考慮如何解決這個問題
- 所以明年的冠軍ResNet準備跳出來摟,解決完問題就給你來個100多層真棒!
References
- VGG深度學習原理
- [DL]淺談CNN在Object Classification上的各種架構
- [論文速速讀]ImageNet Classification with Deep Convolutional Neural Networks
- [論文速速讀]Network In Network