經典 CNN 模型整理 (06) - DenseNet
Nov 11, 2020
本系列將整理一些經典 CNN 模型的重點,目的是讓讀者和自己可以在最短的時間內回想起被遺忘的記憶,比較不熟悉的朋友也可以用重點去搭配論文幫助消化!
上一篇:ResNet
<Densely Connected Convolutional Networks> Gao et al., 2017.
上一篇我們談到 ResNet ,其解決了網路加深所帶來的退化問題得以大大的加深其網路架構,而 DenseNet 則更專注在『特徵重用(feature reuse)』上,也拿到 CVPR 2017 最佳論文獎。
在開始前先來說一下 DenseNet 的四個優點:
- 減緩了梯度消失(vanishing-gradient)問題
- 加強特徵傳播
- 促進特徵重用
- 減少參數數量
下面來看看本論文的重點:
- ResNet-傳統網路連接方式為:『X{l} = H{l}(X{l-1})』;ResNet 加上一個短路連接變為:『X{l} = H{l}(X{l-1}) + X{l-1}』。而 DenseNet 作者認為這個相加的過程可能會阻礙網路信息的傳播。
- Dense connectivity-為了優化訊息傳遞,作者將每一層都與其後面的層進行連結:『X{l} = H{l}([X{0}, X{1}, …, X{l-1}])』,並用 concatenation 取代相加(*註1),而透過與上面 ResNet 公式的對比可以看出這個結構為什麼有效的理由:每一層都透過梯度傳播的過程『直接』訪問到『原始輸入』和『損失函數』,可以說是一個隱藏式的深監督。
(*註1)concatenation vs add-ResNet 使用的 element-wise add 為逐元素相加,也就是『特徵圖相同位置相加,通道數不變』;而 DenseNet 使用的 concatenation 則是『通道數的增加』。 - Composite function-定義 H{l} 為 BN - ReLU - 3 x 3 Conv 的組合。
- Transition layers-由於在 CNN 中下採樣的必要性,這裡設計了一個 BN - ReLU - 1 x 1 Conv - Pool 的組合,來作為 Dense Blocks 之間的連接層【如圖二】。
一些降低計算量的設計:
- Bottleneck layers-由於 DenseNet 的設計方法會將前面所有的特徵徒都作為輸入,就算 Growth rate 都很小,累加起來也很驚人,故設計此 Bottleneck 降低計算量 ,H{l} 的組合變為 BN - ReLU - 1 x 1 Conv - BN - ReLU - 3 x 3 Conv,使用此組合的架構稱為 DenseNet-B。
- Compression-假如原先 Dense Block 會輸出 m 個通道的特徵圖,這裡將其後方 Transition Layer 的輸出數量減少為 ⌊θm⌋(0 < θ ≤ 1),使用此組合的架構稱為 DenseNet-C,在論文中使用 θ = 0.5。
從結果圖【如圖三】可以看出同樣的錯誤率下 DenseNet 比 ResNet 使用更少的參數跟計算量。
感謝觀看,有任何問題歡迎留言討論或連繫我,祝有個愉快的一天😉