經典卷積神經網路總結:Inception v1\v2\v3\v4、ResNet、ResNext、DenseNet、SENet等
本文為總結今年來的卷積神經網路,主要按照時間線和方法類似程度的順序總結。
開篇先前說下概要,然後展開詳細介紹,主要是在densenet、resnext、senet這三個網路上介紹,前面的一系列網路大概講一下思想。
1、時間軸
時間 | 團隊 | 論文 |
---|---|---|
2014.09 | Inception v1 | |
2015.02 | Inception v2 | |
2015.12 | Inception v3 | |
2016.02 | Inception v4 | |
時間 | 團隊 | 論文 |
2015.12 | microsoft | ResNet |
2016.11 | UCSD & Facebook | ResNext |
時間 | 團隊 | 論文 |
2016.08 | CORNELL & Tsinghua & Facebook | DenseNet |
2017.09 | momenta | SENet |
2、關於模型改進的一些個人總結
- 擴充套件網路深度,如resnet結構;
- 擴充套件網路寬度,如inception結構;
- 擴充套件cardinality,如resnext結構;
- 使用3x3卷積核替換5x5\7x7卷積核;
- 分解卷積核,nxn->1xn,nx1,減少模型引數;
- 上面方法進行排列組合;
- attention結構,用在batch、channel、pixel上;
Inception系列
1、Inception v1
論文連結:https://arxiv.org/pdf/1409.4842.pdf
1.1 核心思想
傳統網路都是通過層的疊加,增加網路深度,這篇論文提出從網路寬度上改進,通過concat操作,將經過不同kernel尺度的feature map進行concat,增加網路對尺度的適應性、增加網路的寬度,提高了網路內部資源的利用率。
inception block結構如下圖所示:
網路中除了新增inception block之外,還使用global average pooling代替了全連線層,可以減少引數量,保留顯著特徵,降低特徵維度。
1.2 網路結構
1.3 實驗結果
參考連結:
2、Inception v2
論文連結:https://arxiv.org/pdf/1502.03167.pdf
1.1 核心思想
首次提出BN層,減少Internal Covariate Shift,具體BN層的解釋可以參考以前的部落格,將每一次一個batch中的資料分佈控制在均值為0,方差為1。
1.2 網路結構
就是添加了BN層
1.3 實驗結果
參考連結:
3、Inception v3
論文連結:https://arxiv.org/pdf/1512.00567.pdf
1.1 核心思想
1、卷積核進行分解:使用兩個3x3卷積核代替5x5卷積核,三個3x3卷積核代替7x7卷積核,減少引數量,加快計算。(兩個3x3與一個5x5作用是一樣的,其感受野都是5)
2、進一步將nxn卷積核分解為1xn和nx1卷積核;
3、減少feature map的size,增加channel數;
1.2 網路結構
1.3 實驗結果
參考連結:https://www.cnblogs.com/eniac1946/p/8669937.html
4、Inception v4
論文連結:https://arxiv.org/pdf/1602.07261.pdf
1.1 核心思想
基於inception v3的基礎上,引入殘差結構,提出了inception-resnet-v1和inception-resnet-v2,並修改inception模組提出了inception v4結構。基於inception v4的網路實驗發現在不引入殘差結構的基礎上也能達到和inception-resnet-v2結構相似的結果,從而認為何凱明等人認為的:“要想得到深度卷積網路必須使用殘差結構”這一觀點是不完全正確的。
1.2 網路結構
1.2.1 Inception-v4
1.2.2 Inception-resnet-v1
1.2.3 Inception-resnet-v2
1.3 實驗結果
- 在inception-resnet-v1與inception v3的對比中,inception-resnet-v1雖然訓練速度更快,不過最後結果有那麼一丟丟的差於inception v3;
- 在inception-resnet-v2與inception v4的對比中,inception-resnet-v2的訓練速度更塊,而且結果比inception v4也更好一點。所以最後勝出的就是inception-resnet-v2。
參考連結:
1、https://www.cnblogs.com/shouhuxianjian/p/7786760.html
2、https://blog.csdn.net/loveliuzz/article/details/79135583
ResNet系列
5、ResNet
論文連結:https://arxiv.org/pdf/1512.03385v1.pdf
1.1 核心思想
第一次提出殘差結構,主要解決兩個問題
- 梯度消失
- 隨著網路深度增加,效能沒有提升反而有所下降
如下圖,本來要學習H(x),現在轉換為F(x)+x,二者效果相同,但是優化難度下降,並且因為多了一個x,使得求導時總有1,避免了梯度消失問題。
進一步拓展殘差結構:
1.2 網路結構
1、首先是vgg網路、plain 網路和殘差網路的結構比較;
2、本文中的網路結構
1.3 實驗結果
參考連結:
6、ResNext
論文連結::https://arxiv.org/pdf/1611.05431.pdf
6.1 核心思想
主要是採用了VGG堆疊思想和Inception的split-transform-merge思想,在不增加引數複雜度的前提下提高準確率。
對比於之前提高準確率的方法,大都是在depth和width上改進,本文提出一種新的方式,命名為cardinality,基數。即得到上一次feature map後,假設cardinality=32,則取32組1x1卷積核,每組4個,分別進行卷積,得到32組feature map,然後再分別進行3x3卷積,最後再通過1x1卷積把通道數還原回來。
具體殘差結構如下所示:
上圖右圖中可以進行變體,下圖中這三種結構是完全相等的,
- 圖A就是上面所說的結構;
- 圖B是在3x3卷積後進行了concat,然後再通過統一的1x1卷積操作,這個有點類似於inception-resnet;
- C圖結構更簡潔且速度更快。採用組卷積。採用32個group,每個group的輸入輸出的通道數都是4;
6.2 網路結構
1、網路結構
resnext與resnet50/101引數量差不多,但是準確率卻提升了。
6.3 實驗結果
增加Cardinality和增加深度或寬度的對比實驗,證明增加Cardinality確實效果比較好。
參考連結:https://blog.csdn.net/u014380165/article/details/71667916
其他
7、DenseNet
論文連結:https://arxiv.org/pdf/1608.06993.pdf
7.1 核心思想
densenet緊接著在resnet之後提出,結合了resnet的思想。網路改進除了像resnet和inception在深度和寬度上做文章外,densenet通過利用feature來減少引數的同時提高效果,對feature進行有效利用並加強feature的傳遞。
主要思想是將每一層都與後面的層連線起來,如果一個網路中有L層,那麼會有L(L+1)/2個連線,具體連線如下圖所示:
引用參考連結中的一段話:
DenseNet的一個優點是網路更窄,引數更少,很大一部分原因得益於這種dense block的設計,後面有提到在dense block中每個卷積層的輸出feature map的數量都很小(小於100),而不是像其他網路一樣動不動就幾百上千的寬度。同時這種連線方式使得特徵和梯度的傳遞更加有效,網路也就更加容易訓練。原文的一句話非常喜歡:Each layer has direct access to the gradients from the loss function and the original input signal, leading to an implicit deep supervision.直接解釋了為什麼這個網路的效果會很好。前面提到過梯度消失問題在網路深度越深的時候越容易出現,原因就是輸入資訊和梯度資訊在很多層之間傳遞導致的,而現在這種dense connection相當於每一層都直接連線input和loss,因此就可以減輕梯度消失現象,這樣更深網路不是問題。另外作者還觀察到這種dense connection有正則化的效果,因此對於過擬合有一定的抑制作用,博主認為是因為引數減少了(後面會介紹為什麼引數會減少),所以過擬合現象減輕。
給出resnet和resnext兩個結構的公式比較:
resnet:前一層經過非線性變換後與前一層相加得到本層的結果。
densenet:前n層所有的結果進行concat,然後再進行非線性轉換。
為了保證feature map的channel不會太大,而且size要保持統一才能concat,將上述作為一個dense block,每個block之間通過池化層相連。
7.2 網路結構
1、引入dense block後的結構圖
2、網路結構,圖中k表示每個dense block中每層輸出的feature map個數
3、bottleneck layer和translation layer
此外,在dense block中引入bottleneck layer,即卷積3x3前增加1x1卷積,以此來減少feature map數量。結構為:
BN -> Relu -> Conv 1x1 -> BN -> Relu -> Conv 3x3
由於feature map通道數量可能還是很大,在每個dense block之間,增加了translation layer,通過1x1卷積核來實現。
BN -> Relu -> Conv 1x1 -> Pooling
7.3 實驗結果
參考連結:https://blog.csdn.net/u014380165/article/details/75142664
8、SENet
論文連結:https://arxiv.org/pdf/1709.01507.pdf
8.1 核心思想
從特徵通道之間的關係入手,對特徵通道之間的關係進行建模表示,根據重要程度增強有用的特徵、抑制沒有用的特徵。
個人感覺像是在通道上做權重,類似於通道上的attention。
主要分為兩個過程,如下圖所示,squeeze擠壓和excitation激勵。
8.1.1 Squeeze
如下圖所示,對通道進行了擠壓,即通過全域性平均池化,將shape為[H, W, C]的feature map變為[1, 1, C]。
順著空間維度來進行特徵壓縮,將每個二維的特徵通道變成一個實數,這個實數某種程度上具有全域性的感受野,並且輸出的維度和輸入的特徵通道數相匹配。它表徵著在特徵通道上響應的全域性分佈,而且使得靠近輸入的層也可以獲得全域性的感受野,這一點在很多工中都是非常有用的。
8.1.2 Excitation
得到擠壓後的feature map後,進行激勵,使用sigmoid函式。。
首先通過一個全連線層進行降維,即如下公式中的W1z,然後經過relu啟用函式。即δ(W1z),再經過全連線進行升維,即W2(δ(W1z)),然後通過sigmoid進行權重啟用。
它是一個類似於迴圈神經網路中門的機制。通過引數 w 來為每個特徵通道生成權重,其中引數 w 被學習用來顯式地建模特徵通道間的相關性。
8.1.3 Reweight
最後通過scale相乘,得到se block的結果。
將 Excitation 的輸出的權重看做是進過特徵選擇後的每個特徵通道的重要性,然後通過乘法逐通道加權到先前的特徵上,完成在通道維度上的對原始特徵的重標定。
8.1.4 se block
block結構圖如下所示:
進一步,變為殘差se block,
8.2 網路結構
整個網路結構如下圖所示:分別為resnet-50,se-resnet-50,se-resnext-50;
8.3 實驗結果
在主流網路上進行了復現,並加了se block結構後進行了比較。
參考連結:
1、https://blog.csdn.net/xjz18298268521/article/details/79078551