1. 程式人生 > >谷歌系列 :Inception v1到v4

谷歌系列 :Inception v1到v4

Paper列表:

[v1] Going Deeper with Convolutions, 6.67% test error, http://arxiv.org/abs/1409.4842
[v2] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift, 4.8% test error, http://arxiv.org/abs/1502.03167
[v3] Rethinking the Inception Architecture for Computer Vision, 3.5% test error,

http://arxiv.org/abs/1512.00567
[v4] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning, 3.08% test error, http://arxiv.org/abs/1602.07261

大體思路:

Inception v1(ILSVRC14):

1、傳統的ConvNet是將Convulution layer stack在一起,而Inception最大的改變就是時Inception模組疊加的形式構造網路。按論文裡面說就是,用Inception(稠密的可利用的元件)近似一個稀疏結構。
將1x1,3x3,5x5的conv和3x3的pooling,stack在一起,一方面增加了網路的width,另一方面增加了網路對尺度的適應性.
主要特點是提高了網路內部計算資源的利用率。
結構如下圖:
這裡寫圖片描述


2、作者以Inception為基本構造塊構造成了GoogLenet。GoogLenet有兩個主要特點:
(1)在低層時候仍然用傳統的方式,高層用Inception塊疊加。(論文中說這可能反應了當前構造的不足)
(2)用Average pooling 替換傳統的FC
(3)為了解決梯度彌散的問題,在4a 和4d的後面新增輔助loss,該loss僅在訓練的時候以一定的weight參與梯度傳遞,而在test的時候不用。
網路結構:
這裡寫圖片描述
3、論文總結的或許導致實驗效果好的一些因素
訓練時
訓練了7個模型,為了使問題更精細,一些模型在較小的crop上訓練,一些模型則在大的crop上訓練。
使模型訓練較好的因素包括:
(1)影象各種尺寸patch的取樣,這些patch 的size平均分佈在影象區域的8%到100%間,長寬比例在3/4和4/3間。
(2)[8]的光照變化對於對抗過擬合有用。
(3)在後期使用隨機差值進行影象的resize
測試時

1、訓練7個相同的模型,其中包括一個較寬的版本,並且對結果進行整合。這些模型用相同的初始化和學習率測量,不同的是取樣的方法不同和輸入影象的順序不同。
2、測試時更暴力的crop。
把影象resize成4個不同的尺度,使的短邊分別是256,288,320和352.從這些resize後的影象中取左中右的方塊。對每一個方塊,取4個角落,中間的224*224crops,以及整個方塊的224*224的resize,同時對這patch映象。這樣每個影象提取出的patch數是:4*3*6*2=224.
然而,似乎這種crop不是必須的。
3.softmax概率在多個crops和所有分類器上進行平均,獲得最終的預測
paper1

Inception-v2:

第4個版本把這個版本稱為Inception-v2,但是看到在作者的第三篇paper裡面稱這個版本為BN-inception.
在v1的基礎上,進行了改進,一方面了加入了BN層,減少了Internal Covariate Shift(內部neuron的資料分佈發生變化),使每一層的輸出都規範化到一個N(0, 1)的高斯,另外一方面學習VGG用2個3x3的conv替代inception模組中的5x5,既降低了引數數量,也加速計算;
論文閱讀:happynear 的部落格
網路結構:這裡寫圖片描述
Figure 5 documents the changes that were performed compared to the architecture with respect to the GoogleNet archictecture. For the interpretation of this table, please consult (Szegedy et al., 2014). The notable architecture changes compared to the GoogLeNet model include:
• The 5×5 convolutional layers are replaced by two consecutive 3×3 convolutional layers. This increases the maximum depth of the network by 9 weight layers. Also it increases the number of parameters by 25% and the computational cost is increased by about 30%.
• The number 28×28 inception modules is increased from 2 to 3.
• Inside the modules, sometimes average, sometimes maximum-pooling is employed. This is indicated in the entries crresponding to the pooling layers of the table.
• There are no across the board pooling layers between any two Inception modules, but stride-2 convolution/pooling layers are employed before the filter concatenation in the modules 3c, 4e.
Our model employed separable convolution with depth multiplier 8 on the first convolutional layer. This reduces the computational cost while increasing the memory consumption at training time.(不明白)

Inception-v3:

這裡寫圖片描述
(1)7*7的卷積層替換成了3個3*3的卷積
(2)第一塊Inception變成了3個(同BN-Inception)
(3)第一塊Inception是傳統的
第二塊Inception是 Fig.5. 5*5替換成兩個3*3
第三塊Inception是Fig.6. 1*n 和n*1
v3一個最重要的改進是分解(Factorization),將7x7分解成兩個一維的卷積(1x7,7x1),3x3也是一樣(1x3,3x1),這第一個樣的好處,既可以加速計算(多餘的計算能力可以用來加深網路),又可以將1個conv拆成2個conv,使得網路深度進一步增加,增加了網路的非線性,還有值得注意的地方是網路輸入從224x224變為了299x299,更加精細設計了35x35/17x17/8x8的模組;
具體來講:
訓練的技巧增加了:
這裡寫圖片描述
上圖增加的內容是累加的,最後一個就是Inception v3.
(1)RMSProp: 一種引數優化的方式
在caffe中,solver裡面定義:
solver_type:RMSProp
關於solver_type,caffe一共提供六種:
Stochastic Gradient Descent (type: “SGD”),
AdaDelta (type: “AdaDelta”),
Adaptive Gradient (type: “AdaGrad”),
Adam (type: “Adam”),
Nesterov’s Accelerated Gradient (type: “Nesterov”) and
RMSprop (type: “RMSProp”)
詳見:
http://www.cnblogs.com/denny402/p/5074212.html
(2)label smoothing
(3)Factorized 7*7
把第一個7*7的卷積層替換成了3個3*3的卷積(可是,前面定義的Inception-v2裡面已經有了。。。。)
(4)BN-auxiliary:在輔助層的全連線層後面也進行BN操作。

Inception-v4 Inception-ResNet v1 Inception-ResNet v2:

研究了Inception模組結合Residual Connection能不能有改進?發現ResNet的結構可以極大地加速訓練,同時效能也有提升,得到一個Inception-ResNet v2網路,同時還設計了一個更深更優化的Inception v4模型,能達到與Inception-ResNet v2相媲美的效能。