CNN網絡結構的發展——看懂這一篇就夠了(1)
一、CNN基本部件介紹
1. 局部感受野
在圖像中局部像素之間的聯系較為緊密,而距離較遠的像素聯系相對較弱。因此,其實每個神經元沒必要對圖像全局進行感知,只需要感知局部信息,然后在更高層局部信息綜合起來即可得到全局信息。卷積操作即是局部感受野的實現,并且卷積操作因為能夠權值共享,所以也減少了參數量。
2. 池化
池化是將輸入圖像進行縮小,減少像素信息,只保留重要信息,主要是為了減少計算量。主要包括最大池化和均值池化。
3. 激活函數
激活函數的用是用來加入非線性。常見的激活函數有sigmod, tanh, relu,前兩者常用在全連接層,relu常見于卷積層。
4.全連接層
全連接層在整個卷積神經網絡中起分類器的作用。在全連接層之前需要將之前的輸出展平。
二、經典網絡結構
1. LeNet5
由兩個卷積層,兩個池化層,兩個全連接層組成。卷積核都是5×5,stride=1,池化層使用maxpooling。
2. AlexNet
模型共八層(不算input層),包含五個卷積層、三個全連接層。最后一層使用softmax做分類輸出
AlexNet使用了ReLU做激活函數;防止過擬合使用dropout和數據增強;雙GPU實現;使用LRN。
3. VGG
全部使用3×3卷積核的堆疊,來模擬更大的感受野,并且網絡層數更深。VGG有五段卷積,每段卷積后接一層最大池化。卷積核數目逐漸增加。
總結:LRN作用不大;越深的網絡效果越好;1×1的卷積也很有效但是沒有3×3好。
4. GoogLeNet(inception v1)
從VGG中我們了解到,網絡層數越深效果越好。但是隨著模型越深參數越來越多,這就導致網絡比較容易過擬合,需要提供更多的訓練數據;另外,復雜的網絡意味更多的計算量,更大的模型存儲,需要更多的資源,且速度不夠快。GoogLeNet就是從減少參數的角度來設計網絡結構的。
GoogLeNet通過增加網絡寬度的方式來增加網絡復雜度,讓網絡可以自己去應該如何選擇卷積核。這種設計減少了參數 ,同時提高了網絡對多種尺度的適應性。使用了1×1卷積可以使網絡在不增加參數的情況下增加網絡復雜度。
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旨在減少網絡參數,提高效率。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。