熱門CNN模型整理

pytorch實現的CNN模型

https://github.com/BIGBALLON/CIFAR-ZOO

1.LENET

https://my.oschina.net/u/876354/blog/1632862

個人總結:

都是經典的操作,卷積,池化,卷積,池化,卷積,全連接,全連接。特別的就是C3的卷積不是連接所有channel,這邊的池化也是帶兩個參數w,b的。

2.ALEXNET

https://my.oschina.net/u/876354/blog/1633143

010626_frBK_876354.png

個人總結:

1.ReLU:相較Sigmoid和tanh,不容易出現梯度彌散或梯度飽和,而且ReLU計算快很多。但是ReLU有一半是沒有梯度的,會出現模型出現梯度沒有變化的情況,模型不收斂。

2.Dropout:防過擬合。

3.Data augmentation:水平翻轉圖像,從原始圖像中隨機裁剪、平移變換,顏色、光照變換。

直接粘一下上面博客的內容:第三點之前沒有嘗試過,感覺可以試一下。

(1)隨機裁剪,對256×256的圖片進行隨機裁剪到224×224,然後進行水平翻轉,相當於將樣本數量增加了((256-224)^2)×2=2048倍;
(2)測試的時候,對左上、右上、左下、右下、中間分別做了5次裁剪,然後翻轉,共10個裁剪,之後對結果求平均。作者說,如果不做隨機裁剪,大網絡基本上都過擬合;
(3)對RGB空間做PCA(主成分分析),然後對主成分做一個(0, 0.1)的高斯擾動,也就是對顏色、光照作變換,結果使錯誤率又下降了1%。

4.重疊池化。

5.多GPU訓練(看圖上下兩塊對應兩塊GPU)。

6.LRN歸一化,局部歸一化,因爲RELU的關係。

3.VGG

https://my.oschina.net/u/876354/blog/1637819

ä¸æ读æVGGç½ç»

兩個3x3代替5X5,3個3X3代替7X7。最後用了3個FC,導致參數太多。

4.GoogLeNet(inception)

V1

網絡最後採用了average pooling(平均池化)來代替全連接。

爲了避免梯度消失,網絡額外增加了2個輔助的softmax用於向前傳導梯度(輔助分類器)。輔助分類器是將中間某一層的輸出用作分類,並按一個較小的權重(0.3)加到最終分類結果中,這樣相當於做了模型融合,同時給網絡增加了反向傳播的梯度信號,也提供了額外的正則化,對於整個網絡的訓練很有裨益。而在實際測試的時候,這兩個額外的softmax會被去掉。

V2

1)卷積分解(Factorizing Convolutions):多個3X3代替 5X5 7X7

2)降低特徵圖大小
一般情況下,如果想讓圖像縮小,可以有如下兩種方式:
先池化再作Inception卷積,或者先作Inception卷積再作池化先作pooling(池化)會導致特徵表示遇到瓶頸(特徵缺失),方法二是正常的縮小,但計算量很大。爲了同時保持特徵表示且降低計算量,將網絡結構改爲下圖,使用兩個並行化的模塊來降低計算量(卷積、池化並行執行,再進行合併)

3)Inception v2主要就是在Inception v1地基礎上,把LRN扔了,然後加了Batch Normalization,訓練快很多,效果也好一點

V3
Inception V3一個最重要的改進是分解(Factorization),將7x7分解成兩個一維的卷積(1x7,7x1),3x3也是一樣(1x3,3x1),這樣的好處,既可以加速計算,又可以將1個卷積拆成2個卷積,使得網絡深度進一步增加,增加了網絡的非線性(每增加一層都要進行ReLU)。
另外,網絡輸入從224x224變爲了299x299。

V4

Inception V4研究了Inception模塊與殘差連接的結合。ResNet結構大大地加深了網絡深度,還極大地提升了訓練速度,同時性能也有提升。

5.RESNET

加了個shortcut,更快的傳遞低層的特徵,使得網絡可以訓練得更深,基本每個conv後面都加了個bn。

è¿éåå¾çæè¿°

6.Preresnet

preResNet ResNet的改進。preResNet整了residual模塊中各層的順序。相比經典residual模塊(a),(b)將BN共享會更加影響信息的短路傳播,使網絡更難訓練、性能也更差;(c)直接將ReLU移到BN後會使該分支的輸出始終非負,使網絡表示能力下降;(d)將ReLU提前解決了(e)的非負問題,但ReLU無法享受BN的效果;(e)將ReLU和BN都提前解決了(d)的問題。preResNet的短路連接(e)能更加直接的傳遞信息,進而取得了比ResNet更好的性能。(http://www.sohu.com/a/218579545_473283)

7.Resnext

è¿éåå¾çæè¿°

split-transform-merge

作者在論文中引入了一個叫作「基數」(cardinality)的超參數,指獨立路徑的數量,這提供了一種調整模型容量的新思路。實驗表明,通過擴大基數值(而不是深度或寬度),準確率得到了高效提升。作者表示,與 Inception 相比,這個全新的架構更容易適應新的數據集或任務,因爲它只有一個簡單的範式和一個需要調整的超參數,而 Inception 需要調整很多超參數(比如每個路徑的卷積層內核大小)。

8.DenseNet

Each layer has direct access to the gradients from the loss function and the original input signal, leading to an implicit deep supervision.

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

8.SENet

SE block可以作爲一個單元加入到其他網絡中。分支中,先是Fsq做了一次average pooling,得到1X1XC的特徵圖,然後Fex做了兩次全連接,因爲從C到C參數量是C**2,如果中間加一層C/r的話,參數就是C**2*2/r,一般r取16,就會減少很多參數。

9.GENet: Gather-Excite: Exploiting Feature Context in Convolutional Neural Networks

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

SENet的一般形式。

Gather operator 本質上就是在輸入x上進行卷積或者池化操作生成維度減小的feature map。

Excite operator將輸入feature map x 經過 \xi_{G} 之後得到的 \hat{x} ,然後使用Nearest Neighbor interpolation(最近鄰插值方法)resize到 x 相同shape,經過 sigmoid 後做點積運算。

To be continued。。。

sknet bam cbam

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章