VGG網絡原理介紹

VGG的起源

 

VGG網絡起源於Simonyan 和Zisserman的文章Very Deep Convolutional Networks for Large Scale Image Recognition,其中VGG是兩位作者所在的牛津大學視覺幾何組(Visual Geometry Group)的縮寫。

 

VGG網絡在2014年ImageNet圖像分類與定位挑戰賽中獲得分類任務的第二名和定位任務的第一名,因其優異的性能爲人熟知。該網絡的主要工作證明了增加網絡深度能夠在一定程度上影響網絡的最終性能。

 

 

VGG網絡的基本結構

 

VGG網絡根據卷積核大小和尺寸的不同可以分爲六種配置方式,其中最爲人所熟知的配置方式爲VGG16和VGG19兩種結構。

    VGG網絡結構如下圖所示,其中VGG16的基本結構如圖中的綠色標註部分,共包含:

13個卷積層(Convolutional Layer),分別用conv3-xxx表示

3個全連接層(Fully Connected Layer),分別用FC-xxxx表示

5個池化層(Pool layer),分別用maxpool表示

注意一些表示方法:

   Conv3-512   第三層卷積後圍堵編程512;

   Conv3_2 s=2 第三層卷積層裏面的第二子層,滑動步長等於2(每次移動2個格子)

 

   卷積層和全連接層具有權重係數,因此也被稱之爲權重層,總數目爲13+3=16,這即是VGG16中16的來源。(池化層不涉及權重,因此不屬於權重層,不被計數)

 

   儘管VGG的結構簡單,但是所包含的權重數目非常大,達到了驚人的139,357,544個參數,這些參數包括剪輯和權重和全連接層權重。

 

    例如:第一層卷積,由於輸入圖像的通道數爲3,網絡必須學習大小爲3*3,通道數爲3的卷積核,這樣的卷積核有64個,因此總共有(3*3*3)*64=1728個參數。

 

    計算全連接層權重參數數目的方法爲:前一層節點數*本層的節點數 前一層維度*本層的節點數,因此,全連接層的參數分別爲:

    7*7*512*4096=1027,645,444

    4096*4096=16,781,321

    4096*1000=4096000

    FeiFei Li教授在CS231的課件中給出了整個網絡的全部參數計算過程(不考慮偏置),如下:

其中藍色爲計算權重參數數量,紅色爲計算所需內存容量。

 

VGG的優缺點

 

VGG的優點:

    1. 結構簡潔,整個網絡都是用了同樣大小的卷積核(3*3)和最大池化尺寸(2*2);

     2. 幾個小濾波器(3*3)卷積層的組合要比一個大濾波器(5*5或7*7)卷積層好;

     3. 驗證了通過不斷加深網絡結構可以提升性能;

 

VGG的缺點:

 

    VGG耗費了更多計算資源,並且使用了更多的參數(這裏不是3*3卷積的鍋),導致更多的內存佔用(140M),其中絕大多數的參數都是來自於第一個全連接層。並且VGG共有3個全連接層。其缺點可以總結爲以下兩點:

    1.訓練時間過長,調參難度大;

    2.需要的存儲容量大,不利於部署;

 

PS:目前一些文章發現,VGG網絡中的全連接層即使被去除,對於性能也沒有什麼影響,這樣就顯著降低了參數數量。

 

注:很多預訓練方法均使用CGG的Model(16或者19),VGG相對其他的方法,參數空間很大,最終的model有500多M,AlexNet只有200M,GoogLeNet更少,所以train一個vgg模型通常要花費更長的時間,所幸有公開的pretrained model讓我們很方便的使用。

 

關於感受野:

假設你一層一層的重疊了3個3*3的卷積層(層與層之間有非線性激活函數)。在這個排列下,第一個卷積層中的每個神經元都對輸入數據體有一個3*3的視野。

 

        下一篇文章將爲大家介紹一下VGG16做圖像分類的實例,歡迎大家持續關注!