CNN網路結構的發展:從LeNet到EfficientNet

CVer發表於2019-06-17

作者:zzq

https://zhuanlan.zhihu.com/p/68411179

本文已授權,未經允許,不得二次轉載

CNN基本部件介紹

1.    區域性感受野

在影像中區域性畫素之間的聯絡較為緊密,而距離較遠的畫素聯絡相對較弱。因此,其實每個神經元沒必要對影像全域性進行感知,只需要感知區域性資訊,然後在更高層區域性資訊綜合起來即可得到全域性資訊。卷積操作即是區域性感受野的實現,並且卷積操作因為能夠權值共享,所以也減少了引數量。

2.    池化

池化是將輸入影像進行縮小,減少畫素資訊,只保留重要資訊,主要是為了減少計算量。主要包括最大池化和均值池化。

3.    啟用函式

啟用函式的用是用來加入非線性。常見的啟用函式有sigmod, tanh, relu,前兩者常用在全連線層,relu常見於卷積層

4.    全連線層

全連線層在整個卷積神經網路中起分類器的作用。在全連線層之前需要將之前的輸出展平

經典網路結構

1.    LeNet5

由兩個卷積層,兩個池化層,兩個全連線層組成。卷積核都是5×5,stride=1,池化層使用maxpooling

CNN網路結構的發展:從LeNet到EfficientNet

2.    AlexNet

模型共八層(不算input層),包含五個卷積層、三個全連線層。最後一層使用softmax做分類輸出

AlexNet使用了ReLU做啟用函式;防止過擬合使用dropout和資料增強;雙GPU實現;使用LRN

CNN網路結構的發展:從LeNet到EfficientNet
CNN網路結構的發展:從LeNet到EfficientNet

3.    VGG

全部使用3×3卷積核的堆疊,來模擬更大的感受野,並且網路層數更深。VGG有五段卷積,每段卷積後接一層最大池化。卷積核數目逐漸增加。

總結:LRN作用不大;越深的網路效果越好;1×1的卷積也很有效但是沒有3×3好

CNN網路結構的發展:從LeNet到EfficientNet

4.    GoogLeNet(inception v1)

從VGG中我們瞭解到,網路層數越深效果越好。但是隨著模型越深引數越來越多,這就導致網路比較容易過擬合,需要提供更多的訓練資料;另外,複雜的網路意味更多的計算量,更大的模型儲存,需要更多的資源,且速度不夠快。GoogLeNet就是從減少引數的角度來設計網路結構的。

GoogLeNet透過增加網路寬度的方式來增加網路複雜度,讓網路可以自己去應該如何選擇卷積核。這種設計減少了引數 ,同時提高了網路對多種尺度的適應性。使用了1×1卷積可以使網路在不增加引數的情況下增加網路複雜度。

CNN網路結構的發展:從LeNet到EfficientNet

Inception-v2

在v1的基礎上加入batch normalization技術,在tensorflow中,使用BN在啟用函式之前效果更好;將5×5卷積替換成兩個連續的3×3卷積,使網路更深,引數更少

Inception-v3

核心思想是將卷積核分解成更小的卷積,如將7×7分解成1×7和7×1兩個卷積核,使網路引數減少,深度加深

Inception-v4 

引入了ResNet,使訓練加速,效能提升。但是當濾波器的數目過大(>1000)時,訓練很不穩定,可以加入activate scaling因子來緩解

5.    Xception

在Inception-v3的基礎上提出,基本思想是通道分離式卷積,但是又有區別。模型引數稍微減少,但是精度更高。Xception先做1×1卷積再做3×3卷積,即先將通道合併,再進行空間卷積。depthwise正好相反,先進行空間3×3卷積,再進行通道1×1卷積。核心思想是遵循一個假設:卷積的時候要將通道的卷積與空間的卷積進行分離。而MobileNet-v1用的就是depthwise的順序,並且加了BN和ReLU。Xception的引數量與Inception-v3相差不大,其增加了網路寬度,旨在提升網路準確率,而MobileNet-v1旨在減少網路引數,提高效率。

CNN網路結構的發展:從LeNet到EfficientNet
CNN網路結構的發展:從LeNet到EfficientNet

6.    MobileNet系列

V1

使用depthwise separable convolutions;放棄pooling層,而使用stride=2的卷積。標準卷積的卷積核的通道數等於輸入特徵圖的通道數;而depthwise卷積核通道數是1;還有兩個引數可以控制,a控制輸入輸出通道數;p控制影像(特徵圖)解析度。

CNN網路結構的發展:從LeNet到EfficientNet
CNN網路結構的發展:從LeNet到EfficientNet

V2

相比v1有三點不同:1.引入了殘差結構;2.在dw之前先進行1×1卷積增加feature map通道數,與一般的residual block是不同的;3.pointwise結束之後棄用ReLU,改為linear啟用函式,來防止ReLU對特徵的破環。這樣做是因為dw層提取的特徵受限於輸入的通道數,若採用傳統的residual block,先壓縮那dw可提取的特徵就更少了,因此一開始不壓縮,反而先擴張。但是當採用擴張-卷積-壓縮時,在壓縮之後會碰到一個問題,ReLU會破環特徵,而特徵本來就已經被壓縮,再經過ReLU還會損失一部分特徵,應該採用linear。

CNN網路結構的發展:從LeNet到EfficientNet
CNN網路結構的發展:從LeNet到EfficientNet

V3

互補搜尋技術組合:由資源受限的NAS執行模組集搜尋,NetAdapt執行區域性搜尋;網路結構改進:將最後一步的平均池化層前移並移除最後一個卷積層,引入h-swish啟用函式,修改了開始的濾波器組。

V3綜合了v1的深度可分離卷積,v2的具有線性瓶頸的反殘差結構,SE結構的輕量級注意力模型。

CNN網路結構的發展:從LeNet到EfficientNet
CNN網路結構的發展:從LeNet到EfficientNet
CNN網路結構的發展:從LeNet到EfficientNet

7.    EffNet

EffNet是對MobileNet-v1的改進,主要思想是:將MobileNet-1的dw層分解層兩個3×1和1×3的dw層,這樣 第一層之後就採用pooling,從而減少第二層的計算量。EffNet比MobileNet-v1和ShuffleNet-v1模型更小,進度更高。

CNN網路結構的發展:從LeNet到EfficientNet
CNN網路結構的發展:從LeNet到EfficientNet

8.    EfficientNet

研究網路設計時在depth, width, resolution上進行擴充套件的方式,以及之間的相互關係。可以取得更高的效率和準確率。

CNN網路結構的發展:從LeNet到EfficientNet

9.    ResNet

VGG證明更深的網路層數是提高精度的有效手段,但是更深的網路極易導致梯度彌散,從而導致網路無法收斂。經測試,20層以上會隨著層數增加收斂效果越來越差。ResNet可以很好的解決梯度消失的問題(其實是緩解,並不能真正解決),ResNet增加了shortcut連邊。

CNN網路結構的發展:從LeNet到EfficientNet

10.    ResNeXt

基於ResNet和Inception的split+transform+concate結合。但效果卻比ResNet、Inception、Inception-ResNet效果都要好。可以使用group convolution。一般來說增加網路表達能力的途徑有三種:1.增加網路深度,如從AlexNet到ResNet,但是實驗結果表明由網路深度帶來的提升越來越小;2.增加網路模組的寬度,但是寬度的增加必然帶來指數級的引數規模提升,也非主流CNN設計;3.改善CNN網路結構設計,如Inception系列和ResNeXt等。且實驗發現增加Cardinatity即一個block中所具有的相同分支的數目可以更好的提升模型表達能力。

CNN網路結構的發展:從LeNet到EfficientNet
CNN網路結構的發展:從LeNet到EfficientNet

11.    DenseNet

DenseNet透過特徵重用來大幅減少網路的引數量,又在一定程度上緩解了梯度消失問題。

CNN網路結構的發展:從LeNet到EfficientNet

12.    SqueezeNet

提出了fire-module:squeeze層+expand層。Squeeze層就是1×1卷積,expand層用1×1和3×3分別卷積,然後concatenation。squeezeNet引數是alexnet的1/50,經過壓縮之後是1/510,但是準確率和alexnet相當。

CNN網路結構的發展:從LeNet到EfficientNet

13.    ShuffleNet系列

V1

透過分組卷積與1×1的逐點群卷積核來降低計算量,透過重組通道來豐富各個通道的資訊。Xception和ResNeXt在小型網路模型中效率較低,因為大量的1×1卷積很耗資源,因此提出逐點群卷積來降低計算複雜度,但是使用逐點群卷積會有副作用,故在此基礎上提出通道shuffle來幫助資訊流通。雖然dw可以減少計算量和引數量,但是在低功耗裝置上,與密集的操作相比,計算、儲存訪問的效率更差,故shufflenet上旨在bottleneck上使用深度卷積,儘可能減少開銷。

CNN網路結構的發展:從LeNet到EfficientNet

V2

使神經網路更加高效的CNN網路結構設計準則:

輸入通道數與輸出通道數保持相等可以最小化記憶體訪問成本

分組卷積中使用過多的分組會增加記憶體訪問成本

網路結構太複雜(分支和基本單元過多)會降低網路的並行程度

element-wise的操作消耗也不可忽略

CNN網路結構的發展:從LeNet到EfficientNet

14.    SENet

CNN網路結構的發展:從LeNet到EfficientNet

15.    SKNet

CNN網路結構的發展:從LeNet到EfficientNet

相關文章