一文讀懂:GoogleNet的Inception從v1到v4的演變

2020-07-02     AI科技大本營

原標題:一文讀懂:GoogleNet的Inception從v1到v4的演變

來源 | 機器學習煉丹術

GoogleNet和VGG是ImageNet挑戰賽中的第一名和第二名。共同特點就是兩個網絡的層次都更深了。但是:

  • VGG繼承了LeNet和AlexNet的一些框架結構
  • 而GoogleNet則做了更大膽的嘗試,雖然深度有22層,但是參數卻是Alexnet的1/12.而VGG都是Alexnet的三倍,由此可見,在內存和計算資源有限的時候,GoogleNet是好的結構,而且這個的性能更加優越,碾壓VGG。

Inception v1

總之,Inception是GoogLeNet的核心,GoogLeNet優秀,一方面是運算速度快,而這就是Inception的功勞。

設計一個稀疏網絡結構,但是怎麼產生稠密的數據呢。就用這個!CNN中常見的三種卷積核,和池化操作堆疊在一起,一方面增加了網絡的寬度,另一方面也加強了網絡對尺度的是影響。但是這個原始的版本思路是好的,但是計算量太大了,因此作者對3x3和5x5的卷積層之前用了1x1的縮小圖片的channel數量,因此V1是這個樣子:

【1x1的卷積核有什麼用呢?】

1x1卷積的主要目的是為了減少維度,還用於修正線性激活(ReLU)。比如,上一層的輸出為100x100x128,經過具有256個通道的5x5卷積層之後(stride=1,pad=2),輸出數據為100x100x256,其中,卷積層的參數為128x5x5x256= 819200。而假如上一層輸出先經過具有32個通道的1x1卷積層,再經過具有256個輸出的5x5卷積層,那麼輸出數據仍為為100x100x256,但卷積參數量已經減少為128x1x1x32 + 32x5x5x256= 204800,大約減少了4倍。

【為什麼會有池化層在其中呢?】

一般來說,想讓圖像縮小,有以下兩種方式:

但是左邊的方法先池化層後inception,這樣會導致特徵的缺失,而右邊的方法,會導致運算量很大。為了同時保持特徵並且降低運算髮,將網絡改成下圖,使用兩個並行化的模塊來降低計算量,也就是池化,卷積並行,然後再合併

inception V2

設計人員想,如果只是單純的堆疊網絡,雖然可以提高準確率,但是會導致計算效率的下降,如何在不增加過多額計算量的同時提高網絡的表達能力呢?

【卷積分解(Fatorizing Convolutions)】

大尺寸的卷積核可以帶來更大的感受野,但是也意味著更多的參數,比如size=5的卷積核有25個參數,size=3的有9個參數。GoogLeNet團隊提出可以用2個連續的3x3的卷積核組成小網絡來代替單個size=5的卷積層:

通過大量的實驗證明,這樣的方案並不會導致表達的缺失。更進一步,團隊考慮了nx1的卷積核,如下圖:

因此,任意的nxn的卷積都可以通過nx1後接上1xn來代替。但是團隊發現在網絡的前期使用這樣分解的效果並不好,在中部使用效果才會好。

團隊更新了網絡中的Inception的結構,如下圖:

figure5是原來的v1版本,然後figure6是改成兩個3x3的版本,然後figure7是改成了1xn和nx1的版本。

inception v3

最重要的改進就是分解Factorization,把7x7分解成兩個一維的卷積(1x7和7x1),3x3的也是一樣,這樣的好處是,既可以加速運算,又可以將一個卷積拆成兩個卷積,這樣使得網絡的深度進一步加深,並且增加了網絡的非線性。(每增加一層都要用ReLU),此時網絡的輸入也從224x224變成299x299。

Inception v4

研究了Inception模塊與殘差連接的結合,ResNet結構大大加深了網絡的深度,而且極大的提高了訓練速度。總之,Inception v4就是利用殘差連接(Residual Connection)來改進v3,得到Inception-ResNet-v1, Inception-ResNet-v2, Inception-v4網絡 我們先簡單的看一下什麼是殘差結構:

結合起來就是:

然後通過二十個類似的模塊,得到:

文章來源: https://twgreatdaily.com/zh-cn/4GaAEHMBiuFnsJQV5Ryp.html










CSDN湘苗培優

2020-12-24