GoogleNet模型解讀

GoogleNet模型解讀

GoogleNet模型解讀

GoogLeNet, 2014年ILSVRC挑戰賽冠軍,將Top5 的錯誤率降低到6.67%. 一個22層的深度網路.

一、特別之處

文章提出獲得高質量模型最保險的做法就是增加模型的深度(層數)或者是其寬度(層核或者神經元數),但是這裡一般設計思路的情況下會出現兩個缺陷(1.引數太多,容易過擬合,若訓練資料集有限;2.網路越大計算複雜度越大,難以應用;3.網路越深,梯度越往後穿越容易消失,難以優化模型)。

Inception結果的主要思路是用密整合分來近似最優的區域性稀疏結構。如下圖的a圖所示,卷積核大小不同,感受野的大小也不同,最後的拼接意味著不同尺度性的融合。卷積核大小為1、3、5,是為了對齊方便,比如在卷積步長為1時,只要分別設定pad為0、1、2,則卷積後就可以得到相同維度的特徵。

googlenet的主要思想就是圍繞這兩個思路去做的:

1.深度,層數更深,文章採用了22層,為了避免上述提到的梯度消失問題,googlenet巧妙的在不同深度處增加了兩個loss來保證梯度回傳消失的現象。

2.寬度,增加了多種核1×1,3×3,5×5,還有直接max pooling的,但是如果簡單的將這些應用到feature map上的話,concat起來的feature map厚度將會很大,所以在googlenet中為了避免這一現象提出的inception具有如下結構,在3×3前,5×5前,max pooling後分別加上了1×1的卷積核起到了降低feature map厚度的作用。5*5的卷積核會帶來巨大的計算量,所以採用1 * 1的卷積核進行降維。下面的B圖,以下是googlenet用的inception可以稱之為inception v1,如下圖所示:

image

綜上googlent有兩個最重要的創新點分別是為了解決深度和寬度受限來設計的,由於googlenet的兩個輔助loss的限制,很多文章拿base model的時候比較偏向於vgg。

二、模型解讀

image

caffe的實現和原來論文的模型是有不同的:
GoogLeNet共有22層,原始資料輸入大小為224 * 224 * 3.

第一層卷積層 conv1 ,pad是3,64個特徵,7 * 7 步長為2,輸出特徵為 112 * 112 * 64,然後進行relu,經過pool1(紅色的max pool) 進行pooling 3 * 3的核,步長為2, [(112 – 3 1)/2] 1 = 56 特徵為56 * 56 * 64 , 然後進行norm

第二層卷積層 conv2, pad是1,3 * 3,192個特徵,輸出為56 * 56 * 192,然後進行relu,進行norm,經過pool2進行pooling,3 * 3的核,步長為2 輸出為28 * 28 * 192 然後進行split 分成四個支線

第三層開始時 inception module ,這個的思想受到使用不同尺度的Gabor過濾器來處理多尺度問題,inception module採用不同尺度的卷積核來處理問題。3a 包含 四個支線:

  • 1: 64個1 * 1的卷積核(之後進行RULE計算) 變成28 * 28 * 64

  • 2: 96個1 * 1的卷積核 作為 3 * 3卷積核之前的reduce,變成28 * 28 * 96, 進行relu計算後,再進行128個3 * 3的卷積,pad為1, 28 * 28 * 128

  • 3:16個1 * 1的卷積核 作為5 * 5卷積核之前的reduce,變成28 * 28 * 16, 進行relu計算後,再進行32個5 * 5的卷積,pad為2,變成28 * 28 * 32

  • 4:pool層,3 * 3的核,pad為1,輸出還是28 * 28 * 192,然後進行32個 1 * 1的卷積,變成 28 * 28 * 32。

將四個結果進行連線,輸出為28 * 28 * 256。

image

然後將3a的結果又分成四條支線,開始建立3b的inception module

3b

1:128個1 * 1的卷積核(之後進行RULE計算) 變成28 * 28 * 128

2:128個1 * 1的卷積核 作為3 * 3卷積核之前的reduce,變成28 * 28 * 128, 再進行192個3 * 3的卷積,pad為1, 28 * 28 *192,進行relu計算

3:32個1 * 1的卷積核 作為5 * 5卷積核之前的reduce,變成28 * 28 * 32, 進行relu計算後,再進行96個5 * 5的卷積,pad為2,變成28 28 96

4:pool層,3 * 3的核,pad為1,輸出還是28 * 28 * 256,然後進行64個1 * 1的卷積,變成28 * 28 * 64。

三、引數

image

四、總結

GoogLenet採用Inception結構,不僅進一步提升了預測分類的準確率,而且極大地減少了引數量,分析原因如下:

1.採用了模組化的結果,方便增添和修改;
2.網路最後採用average pooling來代替全連線層,將top-1的成功率提高了0.6%;
3.網路移除了全連線層,但是保留了Dropout層;
4.網路增加了兩個輔助的softmax用於向前傳到梯度,避免梯度消失。

Reference

1.http://www.cnblogs.com/gkwang/p/4625410.html
2.http://blog.csdn.net/sunbaigui/article/details/50807362
3.《深度學習-caffe之經典模型詳解與實戰》

其他比較全面的解讀:

1.http://blog.csdn.net/shuzfan/article/details/50738394 GoogLeNet系列解讀