VGG Net

一、簡介

       VGG Net由牛津大學的視覺幾何組(Visual Geometry Group)和 Google DeepMind公司的研究員一起研發的的深度卷積神經網絡,在 ILSVRC 2014 上取得了第二名的成績,將 Top-5錯誤率降到7.3%。它主要的貢獻是展示出網絡的深度(depth)是算法優良性能的關鍵部分。目前使用比較多的網絡結構主要有ResNet(152-1000層),GooleNet(22層),VGGNet(19層),大多數模型都是基於這幾個模型上改進,採用新的優化算法,多模型融合等。到目前爲止,VGG Net 依然經常被用來提取圖像特徵。

二、VGG Net的結構

  

                  圖1:VGG16結構圖

  輸入是大小爲224*224的RGB圖像,預處理(preprocession)時計算出三個通道的平均值,在每個像素上減去平均值(處理後迭代更少,更快收斂)。

  圖像經過一系列卷積層處理,在卷積層中使用了非常小的3*3卷積核,在有些卷積層裏則使用了1*1的卷積核。

  卷積層步長(stride)設置爲1個像素,3*3卷積層的填充(padding)設置爲1個像素。池化層採用max pooling,共有5層,在一部分卷積層後,max-pooling的窗口是2*2,步長設置爲2。

  卷積層之後是三個全連接層(fully-connected layers,FC)。前兩個全連接層均有4096個通道,第三個全連接層有1000個通道,用來分類。所有網絡的全連接層配置相同。

  全連接層後是Softmax,用來分類。

  所有隱藏層(每個conv層中間)都使用ReLU作爲激活函數。VGGNet不使用局部響應標準化(LRN),這種標準化並不能在ILSVRC數據集上提升性能,卻導致更多的內存消耗和計算時間(LRN:Local Response Normalization,局部響應歸一化,用於增強網絡的泛化能力)。

三、討論

  

  1、選擇採用3*3的卷積核是因爲3*3是最小的能夠捕捉像素8鄰域信息的的尺寸。

  2、使用1*1的卷積核目的是在不影響輸入輸出的維度情況下,對輸入進行形變,再通過ReLU進行非線性處理,提高決策函數的非線性。

  3、2個3*3卷積堆疊等於1個5*5卷積,3個3*3堆疊等於1個7*7卷積,感受野大小不變,而採用更多層、更小的卷積核可以引入更多非線性(更多的隱藏層,從而帶來更多非線性函數),提高決策函數判決力,並且帶來更少參數。

  4、每個VGG網絡都有3個FC層,5個池化層,1個softmax層。

  5、在FC層中間採用dropout層,防止過擬合,如下圖:

  

  左邊的圖爲一個完全的全連接層,右邊爲應用dropout後的全連接層。

  我們知道,典型的神經網絡其訓練流程是將輸入通過網絡進行正向傳導,然後將誤差進行反向傳播。dropout就是針對這一過程之中,隨機地刪除隱藏層的部分單元,進行上述過程。步驟爲:

  (1)、隨機刪除網絡中的一些隱藏神經元,保持輸入輸出神經元不變;

  (2)、將輸入通過修改後的網絡進行前向傳播,然後將誤差通過修改後的網絡進行反向傳播;

  (3)、對於另外一批的訓練樣本,重複上述操作(1)。

  dropout可以有效防止過擬合,原因是:

  (1)、達到了一種vote的作用。對於單個神經網絡而言,將其進行分批,即使不同的訓練集可能會產生不同程度的過擬合,但是我們如果將其公用一個損失函數,相當於對其同時進行了優化,取了平均,因此可以較爲有效地防止過擬合的發生。

  (2)、減少神經元之間複雜的共適應性。當隱藏層神經元被隨機刪除之後,使得全連接網絡具有了一定的稀疏化,從而有效地減輕了不同特徵的協同效應。也就是說,有些特徵可能會依賴於固定關係的隱含節點的共同作用,而通過dropout的話,就有效地組織了某些特徵在其他特徵存在下才有效果的情況,增加了神經網絡的魯棒性。

  6、如今用得最多的是VGG16(13層conv + 3層FC)和VGG19(16層conv + 3層FC),注意算層數時不算maxpool層和softmax層,只算conv層和fc層。

三、訓練

  訓練採用多尺度訓練(Multi-scale),將原始圖像縮放到不同尺寸 S,然後再隨機裁切224*224的圖片,並且對圖片進行水平翻轉和隨機RGB色差調整,這樣能增加很多數據量,對於防止模型過擬合有很不錯的效果。

  初始對原始圖片進行裁剪時,原始圖片的最小邊不宜過小,這樣的話,裁剪到224*224的時候,就相當於幾乎覆蓋了整個圖片,這樣對原始圖片進行不同的隨機裁剪得到的圖片就基本上沒差別,就失去了增加數據集的意義,但同時也不宜過大,這樣的話,裁剪到的圖片只含有目標的一小部分,也不是很好。

  針對上述裁剪的問題,提出的兩種解決辦法: 

  (1) 、固定最小邊的尺寸爲256;

  (2) 、隨機從[256,512]的確定範圍內進行抽樣,這樣原始圖片尺寸不一,有利於訓練,這個方法叫做尺度抖動(scale jittering),有利於訓練集增強。

四、測試

  將全連接層等效替換爲卷積層進行測試,原因是:

  卷積層和全連接層的唯一區別就是卷積層的神經元和輸入是局部聯繫的,並且同一個通道(channel)內的不同神經元共享權值(weight)。卷積層和全連接層的計算實際上相同,因此可以將全連接層轉換爲卷積層,只要將卷積核大小設置爲輸入空間大小即可:例如輸入爲7*7*512,第一層全連接層輸出4096;我們可以將其看作卷積核大小爲7*7,步長爲1,沒有填充,輸出爲1*1*4096的卷積層。這樣的好處在於輸入圖像的大小不再受限制,因此可以高效地對圖像作滑動窗式預測;而且全連接層的計算量比較大,等效卷積層的計算量減小了,這樣既達到了目的又十分高效。

五、問題

  1、雖然 VGGNet 減少了卷積層參數,但實際上其參數空間比 AlexNet 大,其中絕大多數的參數都是來自於第一個全連接層,耗費更多計算資源。在隨後的 NIN 中發現將這些全連接層替換爲全局平均池化,對於性能影響不大,同時顯著降低了參數數量。

  2、採用 Pre-trained 方法訓練的 VGG model(主要是 D 和 E),相對其他的方法參數空間很大,所以訓練一個 VGG 模型通常要花費更長的時間,所幸有公開的 Pre-trained model 讓我們很方便的使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章