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
個人總結:
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
兩個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 經過 之後得到的 ,然後使用Nearest Neighbor interpolation(最近鄰插值方法)resize到 相同shape,經過 後做點積運算。
To be continued。。。
sknet bam cbam