2017CVPR Best Paper: 《Densely Connected Convolutional Networks》
Github項目主頁: https://github.com/liuzhuang13/DenseNet
知乎上的一些討論: 如何評價Densely Connected Convolutional Networks?
DenseNet的高效版本,解決訓練佔用顯存大的問題: 《Memory-Efficient Implementation of DenseNets》
DenseNet屬於對ResNet擴展的一系列工作中比較有代表性的一個。
1. 方法介紹
DenseNet整個網絡採用了模塊化設計,其中一個典型網絡模塊結構如下:
如上圖,該模塊共包含4層(BN+ReLU+Conv)。每一層都有一個“短路”或者“跳接”與其後的每一層相連。因此,4層實際上總共產生4+3+2+1=10個連接。
上述結構帶來的優點主要有:
- 加強了信息前傳,避免了梯度的反傳消失
- 加強了對特徵的多級綜合高效利用
- 一定程度上可以使用更少的參數數量來達到相同的效果
2. DenseNet vs. ResNet
如果在Netscope這一網絡結構可視化平臺將DenseNet和ResNet分別進行可視化,你會發現二者的網絡結構 “看起來幾乎一樣”。
這時候你有可能會有疑問:
- 爲啥DenseNet和ResNet這麼像?
- DenseNet那麼多“跳接”去哪了?
解決上面的疑問,請看下面DenseNet和ResNet的對比:
(1)DenseNet採用Concat層來整合不同來源的特徵,而ResNet則採用Eltwise層的加法操作。
DenseNet大部分的優勢都是Concat層帶來的:
- Concat層只是特徵拼接,不對特徵做任何改變。因此,只需相鄰層的一個“短接”,後續所有層都可以擁有到該層的“通路”。 這些通路意味着更佳的信息前傳與梯度反傳。
- Concat層會使得feature map “變厚”,因此即使我們使用更少的卷積參數,feature map也不會因過小而產生信息瓶頸。這也是DenseNet一定程度上參數更少的原因。
(2)DenseNet採用transition層(BN+1x1卷積+2x2AvePooling)來實現下采樣,而ResNet則多采用MaxPooling以及卷積的stride。
(3)DenseNet由於在一個模塊中要使用Concat,因此feature map的大小必須保持不變。 而ResNet則會存在下面的這種下采樣的特殊情況: