隨記:DenseNet

DenseNet

論文:Densely Connected Convolutional Networks
論文鏈接:https://arxiv.org/pdf/1608.06993.pdf
代碼的github鏈接:https://github.com/liuzhuang13/DenseNet

1. 介紹

DenseNet是CVPR2017年的文章,之前的ResNet(解決了隨着網絡深度的加深,梯度消失問題會愈加明顯的問題)主要是將網絡做長,Inception(可以自適應學習到各種核)主要是將網絡做寬,而DenseNet則是通過對feature的極致利用達到更好的效果和更少的參數。
DenseNet網絡結構圖如下,在保證網絡中層與層之間最大程度的信息傳輸條件下,直接將所有層連接起來。

在傳統的卷積神經網絡中,如果你有L層,那麼就有L個連接,而在DenseNet中,你將會有L(L-1)/2個連接。每一層都會輸入來自前面所有層的輸出。
上圖只是一個dense block,而下面是一個DenseNet的結構圖:

其中各個dense block內的feature map大小需要一致,因爲每次後傳都需要concatenation。這也是作者分多個dense block的原因,因爲分了多個才能使feature map大小有變化。

下面的Table1是整個網絡的結構圖。

其中,k=32,k=48中的k是growth rate,表示輸出feature map的個數。DenseNet-121中121是層的個數(卷積層+全連接層),在這裏就是(6+12+24+16)*2+1(7*7conv)+3(Translation layer)+1(fc)=121.

  • 根據dense block的設計,後面幾層可以得到前面所有層的輸入,因此concat後的輸入channel還是比較大的。
  • 每個dense block的3*3卷積前面都包含了一個1*1的卷積操作,就是所謂的bottleneck layer,目的是減少輸入的feature map數量,`既能降維減少計算量,又能融合各個通道的特徵。
  • 爲了進一步壓縮參數,在每兩個dense block之間又增加了1*1的卷積操作。稱爲Translation layer。

如果你看到DenseNet-C這個網絡,表示增加了這個Translation layer,該層的1*1卷積的輸出channel默認是輸入channel到一半。如果你看到DenseNet-BC這個網絡,表示既有bottleneck layer,又有Translation layer。

2. 與ResNet對比

公式上:
ResNet的:

這裏的l表示層,x_l表示l層的輸出,H_l表示一個非線性變換。所以對於ResNet而言,l層的輸出是l-1層的輸出加上對l-1層輸出的非線性變換
DenseNet的:

[x0,x1,…,xl-1]表示將0到l-1層的輸出feature map做concatenation。concatenation是做通道的合併,就像Inception那樣。而前面resnet是做值的相加,通道數是不變的。H_l包括BN,ReLU和3*3的卷積。
性能上:

3. 優點

核心是:每一層都會和前面所有層相連,每一層的feature map size 變小,這樣的網絡結構使得網絡更窄,參數更少了,因爲加上dense block 之後,每個卷積層的輸出feature map數量都很小(小於100),有減輕過擬合的現象;同時這樣的連接使得特徵和梯度傳遞更加有效,訓練也就方便了。
前面提到過梯度消失問題在網絡深度越深的時候越容易出現,原因就是輸入信息和梯度信息在很多層之間傳遞導致的,而現在這種dense connection相當於每一層都直接連接input和loss,因此就可以減輕梯度消失現象,這樣更深網絡不是問題。

列下DenseNet的幾個優點,感受下它的強大: 
1、減輕了vanishing-gradient(梯度消失) 
2、加強了feature的傳遞,更有效地利用feature 
3、一定程度上較少了參數數量

【參考】https://blog.csdn.net/u014380165/article/details/75142664

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