--- tags: Deep learning --- # 論文閱讀: VGG(VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION) [論文](https://arxiv.org/pdf/1409.1556.pdf) ## Introduction VGGNet 承襲 AlexNet,提出了通過使用更小的kernel size(3x3的filter),使網路架構更有彈性,得以堆疊出深度更深,表現更好的CNN模型。 ## ConvNet Configurations ### Architecture * VGG的input為224 × 224的RGB image,在training set上會將原始pixel值減去平均的RGB值做pre-processing。 * 在VGG中,使用了大量的3x3 filter取代在AlexNet中較大(11x11、7x7、5x5)的convolution filter。使network在相同的receptive field下,可以通過多層非線性層,學習到更複雜的pattern。 * 此外也使用了1 × 1 的convolution filters,它可以被視為將input channel做linear transform,提高non-linearity。 * 下採樣的部分使用了Max-pooling(2 × 2 pixel window, stride 2) * VGG架構的最後三層為Fully-Connected layers: 其中前兩層各有4096個channels,最後一層則因應ILSVRC共1000種類別對應1000個channel,並且是一個soft-max層。 * 激活函數使用AlexNet中提到的ReLu。 * 論文中經過實驗認為: 在AlexNet中使用的LRN只會單純增加計算量,然而對於performance卻沒有幫助。 ### Configurations 如下表,論文中嘗試實驗不同深度的CNN。 至於每一層的寬度(width, the number of channels),從第一層的64 channel開始,每經過一層max-pooling就增加一倍,直到512 channel為止。 ![](https://i.imgur.com/F93x93Y.png) ### Discussion VGG中,最重要的想法就是使用大量的3 X 3 Conv。作者認為這些改變有幾個好處: 1. 我們可以利用小的Conv的組合,達到與大的conv相同的receptive field。如下圖,透過3x3的Conv組合,就足以表現出其他更大的Conv。並且這些組合的可能性超過直接使用大的Conv的數量。 ![](https://i.imgur.com/coO5YgX.png) 2. 使用較多的較小的Conv可以提高Non-Linearity。比起使用單個7x7的Conv,使用3個3x3的結合可以使decision function更discriminative(更有區別能力) 3. 比起使用相對大的Conv,使用小的Conv可以減少parameter。 * 假設input、output都是C個channel的話,使用7x7的單層Conv需要7^2^xC^2^ = 49xC^2^個parameters, * 然而若使用3個堆疊的3 × 3的話,parameters的數量為 3x(3^2^xC^2^) = 27xC^2^ 另外,論文通過1x1 conv的使用,在不會影響receptive的前提下,增加decision function的nonlinearity(P.S. 雖然論文中並非為此目的,但1x1 conv也可以被用來降維,減少network參數的使用,詳細可以閱讀[卷積神經網路(Convolutional neural network, CNN): 1×1卷積計算在做什麼](https://medium.com/@chih.sheng.huang821/%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-convolutional-neural-network-cnn-1-1%E5%8D%B7%E7%A9%8D%E8%A8%88%E7%AE%97%E5%9C%A8%E5%81%9A%E4%BB%80%E9%BA%BC-7d7ebfe34b8)。) ## Classification Framework (主要是如何調整參數,怎麼處理traning、testing data等細節,詳請閱讀論文) 稍微提及scale的方法: 由於network輸入必須為224x224,因此需對原始資料作調整。training方面,論文的做法是先將其scale到size S後,再把多出來的部分crop(類似AlexNet的做法)。並且有使用Multiple scale training: 在每次training 時,從一個固定的亂數範圍中,scale至範圍內的random值,再做crop。 然後輸入的test set則會scale到size Q,並使用多個crop進行預測,利用固定的crop大小預測左上、右上、左下、右下跟中間,並平均成最後預測結果。 training set的S與test set的Q不必相同。 ![](https://i.imgur.com/LQ2lEpU.png) ## Classification Experiment (此部分只大概整理一些重點,詳細請閱讀論文內容) ### Dataset 使用ILSVRC-2012 dataset。包含1000種類別資料,並且被分成training (1.3M images)、validation (50K images)、testing (100K images with held-out class labels)三種。 論文中絕大部分以validation set作為實驗的test set。 ### Single Scale Evaluation 首先,論文先使用了沒有scale的test set做實驗,結果如下表。(A-E對應上面架構的表格) ![](https://i.imgur.com/fQPzlfH.png) (表中S的[256;512]表示輸入的scale S會在兩數字間隨機選擇) 由於LRN的使用並沒有顯著的提升,因此作者在B-E的架構中就沒有實驗加入LRN的該種Network。 論文發現,雖著網路深度越深(從11層的A至19層的E),預測的結果也有所提升。 比較B與C的表現(有沒有1x1 Conv),我們可以看出1x1 Conv的加入對於表現有所提升。然而比較C(使用1x1 Conv)的表現卻比D(使用3x3 Conv)的差。論文由此推測,雖然額外的non-linearity有所幫助(C>B),但是萃取空間域的複雜特徵依然十分重要(D>C) ### Multi-Scale Evaluation 此部分中,test set中同一筆data會用不同的scale Q輸入,再把所有output(對於各個類別的score)平均起來作為最終結果。 結果如下圖,可以看到準確度有所提升。 ![](https://i.imgur.com/swL7jVd.png) ### Multi-Crop Evaluation 論文中也展示了input多種crop區域的Multi-Crop方法,以及結合Multi-Crop與Multi-Scale的結果,如下表。 ![](https://i.imgur.com/rGaopA8.png) ### ConvNet Fusion 如下表,論文也展示了使用多個model ensemble的結果。 ![](https://i.imgur.com/mmCmX8T.png) ### Comparison With The State Of Art 如下表,論文比較自己與當時的state-of-art的結果。 ![](https://i.imgur.com/O4hkhJC.png) ## Conclusion VGG展示了deeper network可以達到better result的效果。不過如果比較D跟E的結果,會發現performance的提升似乎已經到了緊繃。難道不是越深的網路越好嗎?這些問題在ResNet將得以解決。 另一方面,VGG透過使用大量3x3 filter替代size更大的filter,並證明其可以提升預測的表現,為deep learning模型的設計提出了重要的看法。 ## Reference [VGG_深度學習_原理](https://medium.com/@danjtchen/vgg-%E6%B7%B1%E5%BA%A6%E5%AD%B8%E7%BF%92-%E5%8E%9F%E7%90%86-d31d0aa13d88)