從圖像中提取CNN特征,VGG模型是首選算法 。VGG是牛津大學?Visual Geometry Group(視覺幾何組)的縮寫,以研究機構命名。
VGG論文給出了一個非常振奮人心的結論:卷積神經網絡的深度增加和小卷積核的使用對網絡的最終分類識別效果有很大的作用,VGG基本全部是 3x3小卷積核 和 2x2池化核。
VGG典型的有16層的VGG16和19層的VGG19,VGG之所以堆疊很多3x3的小卷積核的卷積層,就要說到CNN感受野的問題了。
關于感受野有一個說法:兩個3x3卷積層等于一個5x5卷積層,三個3x3卷積層,等于一個7x7卷積層。
感受野(receptive field)用來表示網絡內部的不同神經元對原圖像的感受范圍的大小,或者說,CNN每一層輸出的特征圖(feature map)上的像素點在原始圖像上映射的區域大小。
舉個例子,在單個maxpooling層中,如果它的kenerl size是2x2,輸出結果中的每一個元素都是其對應輸入的2x2的區域中的最大值,所以這一層的感受野大小就是2。其實感受野的大小是由kernel size和stride size一起決定的,公式是:?
rfsize = f(out, stride, ksize) = (out - 1) * stride + ksize (?其中out是指上一層感受野的大小)
注意:感受野在計算的時候不考慮“邊界填充”,因為填充的邊界已經不是原始圖像本身的內容了,感受野描述的是輸出特征到原始圖像的映射關系,故而不考慮padding 。實際建模過程中可能需要填充邊界,原理一樣,只是計算稍微復雜點。?
而不考慮padding的卷積的正向維度計算公式是:??
? ,是上式反推
上面是遞推的公式,下面是卷積過程的圖解,為了簡單,步幅設定為1.
從上面可以看出:第一層網絡輸出的圖像中,輸出結果為8x8,output1輸出的每一個特征(即每一個像素)受到原始圖像的3x3區域內的影響,故而第一層的感受野為3,用字母表示為
RF1=3 (每一個像素值與原始圖像的3x3區域有關)
再說回VGG用多個3x3卷積層疊加而不是更少的大尺寸卷積核的原因
這樣做的主要目的是:
(1)保證具有相同感知野的條件下,提升了網絡的深度,在一定程度上提升了神經網絡的效果;
(2)減少計算參數量。一個7x7卷積核的參數有49個,三個3x3卷積核的參數有27個,減少約一半
(3)多個?3x3?的卷基層比一個大尺寸?filter卷積層有更多的非線性(更多層的非線性函數),使得判決函數更加具有判決性