論文閱讀筆記:Densely Connected Convolutional Networks(DenseNet)

發表載體:CVPR,2017,最佳論文

作者信息:Gao Huang,Cornell University; Zhuang Liu, Tsinghua University ;Laurens van der Maaten, Facebook AI Research

論文地址:論文下載

代碼:代碼

1、解決的問題

深度卷積神經網絡可以準確有效地解決各類問題,但是隨着網絡層數的加深,梯度消散的問題愈加嚴重;而且大規模的網絡參數造成了計算量和內存的嚴重負荷;數據流通不夠充分,靠近輸出的網絡層沒有利用到前面的特徵。

2、DenseNet網絡結構及特點

2.1DenseNet設計思路

DenseNet的提出源於ECCV上一篇隨機深度網絡(Deep network with stochastic depth)的文章,該文章採用Dropout來改進ResNet。通過在訓練過程中隨機的丟棄(Dropout)一些網絡層,可以顯著提高網絡的泛化能力。

圖1 ResNet網絡結構圖

ResNet比傳統的網絡多了shorcut支路和bottleneck結構(1*1*n conv)。

ResNet是直接求和,用公式表示爲:

                         

圖2 Dropout結構圖

思路1::網絡中某一層可以不僅僅依賴於緊鄰上一層的特徵,而可以依賴於更前面層學習到的特徵。例如,在一個深度網絡中,如果第l層被dropout(丟棄),那麼第l+1層就被直接連到了第l-1層;如果第2層--第l層被丟棄,那麼第l+1層就被直接連到了第1層。

思路2:在訓練過程中,隨機丟棄一些網絡層並沒有破壞網絡的收斂性,說明ResNet具有比較明顯的冗餘性。所以,我們將訓練好的ResNet隨機去掉幾層,對網絡的預測結果也不會產生很大的影響。

設計理念:網絡中每一層都與前面層相連接,實現特徵的重複使用;同時把網絡的每一層都設計的特別窄,每一層都只學習到非常少的特徵,達到降低網絡冗餘。

DenseNet是進行拼接,用公式表示爲:

2.2DenseNet網絡結構

圖3 DenseNet網絡結構圖

DenseNet的網絡結構主要包括DenseBlocks和Transition Layers兩個部分組成。其中,DenseBlocks的結構圖如圖3所示,Transition Layers是連接兩個DenseBlocks的部分,由卷積層和池化層組成(BN-Conv(1*1)-average Pooling(2*2))。

圖4  DenseBlocks結構圖

圖4中,DenseBlock有5層,每層進行BN-Relu-Conv(3*3)的操作,每層輸出的通道數爲4(特徵圖的維度是4)。

在DenseBlock中所有層接受前層輸出作爲額外輸入,並將本層的特徵圖作爲後層的輸入。假設一個L層的DenseNet,直接連接有L*(L+1)/2個,如上述5層的DenseNet,具有直接連接5*6/2=15個。

因爲Transition Layers中包含的pooling會改變特徵圖的大小,而DenseBlocks內部某一層的輸入是其所有先前層的輸出,所以,在DenseBlocks內部的特徵圖大小是不變的,否則內部各層之間不能進行連接。

 

2.3DenseNet的特點

在前向傳播過程中,深層網絡可以獲得淺層網絡提取的特徵信息;在反向傳播過程中,淺層網絡可以獲得深層網絡的梯度信息,促進了數據在網絡各層間的流動(數據充分使用)。

有效緩解了梯度消散問題:如圖4中,H4層可以直接用到原始輸入信息X0,同時還用到了之前層對X0處理後的信息,這樣能夠最大化信息的流動。 反向傳播過程中,X0的梯度信息包含了損失函數直接對X0的導數,減輕了梯度消散。

密集連接,讓網絡中的每一層都與其前面的每一層相連,實現特徵重用,所以,使用較少的卷積核就可以得到大量的特徵圖,網絡參數和計算量少

 

3.DenseNet參數減少策略

3.1 Bottleneck layers(瓶頸層)

在DenseNet中,第l層會與前面l-1個網絡層直接連接,假設增長率(Growth rate)爲k,那麼第l層的輸入爲k0+k*(l-1),k0是輸入層的維數。因此,Dense Block中的每一層的輸入隨着網絡層數的增加,後面每層輸入的維數是很大的。

爲了解決這個問題,在Dense Block模塊中,加入了Bottleneck單元,即利用1*1*n的卷積操作對特徵圖進行降維,並設定n=4*k,使得每一層輸出特徵圖的維數是4k,k是增長率。

BN-Relu-Conv(3*3)改進爲BN-Relu-Conv(1*1)-BN-Relu-Conv(3*3).

文中將帶有Bottleneck layers的網絡稱爲DenseNet-B。

3.2 Compression(壓縮)

假設一個L層的Dense Block模塊,已經通過Bottleneck 單元進行了降維操作,即模塊中每一層輸出的維數是4k,那麼該模塊輸出的維數爲4k*L,隨着L層數的增加,該模塊輸出特徵圖的維數也是非常大的。

爲了解決這個問題,該文章在Dense Block模塊之外的過渡層(transition layers)進行降維操作,使得過渡層輸出特徵圖維數爲,其中(0.5)。

文中將帶有Compression的網絡稱爲DenseNet-C;Bottleneck layers和Compression均使用的網絡稱爲DenseNet-BC。

3.3參數計算過程(1*1*4k conv)

某層輸出通道數由該層卷積核的個數決定;

參數:上一通道數*該層卷積核的大小*該層卷積核的通道數。

圖5-1 參數計算1

 

網絡結構改進:在3*3*128的卷積之前加上1*1*96的卷積;

在5*5*32的卷積之前加上1*1*16的卷積;

在max pooling之後加上1*1*32的卷積,參數計算如下所示。

圖5-2  參數計算2

 

4.實驗結果分析

圖6 ImageNet的DenseNet結構
圖7  CIFAR和SVHN數據集上的錯誤率

註釋:(L表示網絡深度,k是增長率。黑色表示最新錯誤率,藍色表示最小錯誤率,+表示對原始數據庫進行了擴充。可以看出DenseNet相較於ResNet具有更低的錯誤率,而且使用了更少的參數)

圖8 DenseNet及其變體與ResNet的參數性能對比

註釋:(可以看出同樣層數的DenseNet的網絡參數要少,運算量少,準確率也高,錯誤率相差僅約3%)

圖9 特徵熱力圖(可以看出在較深層中也會用到較淺層提取到的特徵)

原作者的一些解釋,以供學習:CVPR 2017 最佳論文,作者對於文章的解讀

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