GoogLeNet:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning論文筆記

論文地址:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

前言

ResNet以及GoogLeNet在圖像識別上都取得了非常優異都效果,並且都具有各自都風格和特點。ResNet的Residual block因其identity connection,具有簡單無公害的結構,能夠很好都解決當模型層次加深、複雜度加大時產生都優化難題,基於此,甚至提出了超過1000層的ResNet框架,可見這種結構都強大性。而GoogLeNet,尤其是Inception V3的版本,具有非常複雜而強大都拓撲結構,包含了3中類型都Inception模塊,而且似乎並不會出現任何優化困難,網絡的效果也非常好。因此,人們自然而然都提出了這樣一個問題,如果將ResNet都Residual block和GoogLeNet都Inception block結合起來,是否可以生成一種結構更加複雜、性能更加強大的模型呢?答案是肯定的,這是否也能夠證明上一篇文章都觀點:優化問題和計算量是今後深度網絡重要的研究方向呢?

Inception V4

話不多說,直接上圖:
這裏寫圖片描述

其中Stem模塊如下:
這裏寫圖片描述
我們發現Stem中使用了Inception V3中使用的並行結構、不對稱卷積核結構,可以在保證信息損失足夠小的情況下,使得計算量降低。結構中1*1的卷積核也用來降維,並且也增加了非線性。圖中帶V的標記說明該卷積核使用valid padding,其餘的使用same padding。之後的結構也是這樣。我們發現這個stem結構實際上是替代了Inception V3中第一個Inception block之前的結構,在V3中僅僅是一些3*3卷積核的堆積,輸出的feature map爲35*35*288,而在這裏結構更加複雜、層次更深,輸出的feature map爲35*35*384,比V3的也更多。但是正因爲之前的一系列修改,保證了計算量。

接下來Inception-A:
這裏寫圖片描述
Inception-B:
這裏寫圖片描述
以及Inception-C:
這裏寫圖片描述
我們發現這三個結構和Inception V3中的三種Inception block的結構一樣,關於結構,在此不再贅述,有關Inception V3的結構可以參考我的上一篇博文。不同之處在於,在這裏,三種Inception block的個數分別爲4、7、3個,而V3中爲3、5、2個,因此新的Inception層次更深、結構更復雜,feature map的channel更多,爲了降低計算量,在Inception-A和Inception-B後面分別添加了Reduction-A和Reduction-B的結構,用來降低計算量。
Reduction-A:
這裏寫圖片描述
Reduction-B:
這裏寫圖片描述
我們發現這兩種結構中,卷積的步長(stride)爲2,並且都是用了valid padding,來降低feature map的尺寸。結構中同樣是用並行、不對稱卷積和1*1的卷積來降低計算量。

值得注意的是,在網絡的最後,softmax層之前, 使用了keep prob爲0.8的drop out來防止過擬合。

Inception-ResNet-v1

總體結構:
這裏寫圖片描述

Stem結構:
這裏寫圖片描述
我們發現,爲了保證計算量是cheap的,這裏使用了和Inception V3中很類似的結構,只不過channel的數量有些許不同。

Inception-ResNet-A:
這裏寫圖片描述
Inception-ResNet-B:
這裏寫圖片描述
Inception-ResNet-C:
這裏寫圖片描述

這三種block的數量分別爲5、10、5個,相比之前更多了,我們發現每一個block中都使用了identity connection(源自於ResNet),也就是ReLU之前的+號,identity connection的作用曾在前面的博文中提到過,在此不再贅述。而block右部的residual function可以看成是簡化版的Inception,結構和參數量都比傳統的Inception block要小,並且後面都使用1*1的濾波器進行連接,主要用來進行維度匹配。

與Inception V4相同的是,在Inception-ResNet-A及Inception-ResNet-B後分別添加了Reduction-A和Reduction-B,其中Reduction-A的結構與Inception V4的一致,Reduction-B的結構如下:
這裏寫圖片描述

在網絡的最後,softmax之前,同樣是用了drop out。文章中,作者還提到了,在traditional layers的前面添加了BN層,筆者認爲,就是在每一個Inception-ResNet block中Residual function的最前面添加BN,這樣做的好處,在博文中進行了詳細的描述。值得一提的是,雖然層次變得更深了,這個Inception-ResNet-v1的計算量仍然只和Inception V3大致相同。

Inception-ResNet-v2

Inception-ResNet-v2的整體框架和Inception-ResNet-v1的一致。

只不過v2的計算量更加expensive些,它的stem結構與Inception V4的相同,Reduction-A與v1的相同,Inception-ResNet-A、Inception-ResNet-B、Inception-ResNet-C和Reduction-B的結構與v2的類似,只不過輸出的channel數量更多。總的來說,Inception-ResNet-v2與Inception V4的相近。在Inception-ResNet-v2中同樣使用了drop out和BN。

Scaling of the Residuals

作者發現,當一個Residual function中濾波器的數量超過1000時,這個block變得不穩定,訓練容易出現‘died’的現象,產生的輸出只爲0,這明顯是不可以的,並且通過降低學習率、增加額外的BN都無法解決這個問題。
作者給出的解決辦法是,在Residual function之後、激活函數之前,使用一個activation scaling的操作能夠穩定訓練,其中縮放因子爲0.1到0.3。至於這麼做的原因,筆者就不得而知了,希望能夠獲得大家的指教。

實驗結果

這裏寫圖片描述
這裏寫圖片描述
我們發現,Inception-ResNet-v1的準確率與Inception-v3的準確率接近,Inception-ResNet-v2的與Inception-V4的接近, 但是Inception-ResNet-v1和Inception-ResNet-v2的收斂速度明顯比Inception-v3和Inception-v4的快得多。

總結

與Inception V3相比,更加複雜的Inception V4的性能得到了明顯的提高。當然Inception V4中也使用了很多技巧和操作來降低計算量。
常用的降低計算量的方法有:

  1. 使用並行結構
  2. 使用不對稱的卷積
  3. 使用1*1的卷積進行維度變換

同時我們也發現,使用ResNet的identity connection能夠極大程度的提高收斂速度,可見它對於解決優化難題是非常有效果的。

發佈了43 篇原創文章 · 獲贊 333 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章