原文代碼: https://github.com/liuzhuang13/DenseNet
pytorch實現 https://github.com/liuzhuang13/DenseNet/tree/master/models
論文動機:在CNN中靠近輸入、輸出的層之間如果包含更短的連接,則CNN訓練時會更高效、更準確;
提出網絡:Dense Convolutional Network(DenseNet);L層的傳統卷積網絡需要L次連接,而DenseNet需要次連接;
優點:減輕梯度消失問題;加強特徵傳播;支持特徵重用(feature reuse);減少參數數量(因爲不需要重新學習冗餘的特徵圖,儘管這個網絡結構是dense connectivity,參數反而大大減少);
Introduction
ResNets、Hightway Networks、FractalNets, they all share a key characteristic: they create short paths from early layers to later layers.
下圖時DenseNet結構,意義:
To ensure maximum information flow between layers in the network, we connect all layers (with matching feature-map sizes) directly with each other. To preserve the feed-forward nature, each layer obtains additional inputs from all preceding layers and passes on its own feature-maps to all subsequent layers.
傳統的前饋結構可以被看作是具有狀態的算法,這個狀態在層與層之間傳播,每一層接收前面一層傳遞的狀態然後寫到下面一層,它改變了狀態,但也傳遞了需要保存的信息。
本文提出的DenseNet結構可以準確區分增加到網絡上的信息以及被保存下的信息;同時Dense connections有正則化作用,會在小訓練集的任務上減少過擬合的影響;
DenseNets
: 層的索引;
: 非線性轉換,是一個複合操作,比如BN、ReLU、Poolingu哦這Conv;
: 層的輸出;
------------------------------------
先回憶ResNets:
優點:梯度可以從後面的層通過恆等函數到達前面的層;
缺點:因爲採用加和的方式將恆等函數和結合,可能阻礙信息在網絡中的傳播;
------------------------------------
Dense connectivity:
------------------------------------
考慮到特徵圖尺寸可能由下采樣引起的變化,我們將網絡分成多個dense blocks,如下圖;
transition layers: 是block和block之間的,卷積和池化操作;
Growth rate:
每個函數產生個特徵圖,則層有個輸入特徵圖,是輸入層的通道數;就是網絡的Growth rate;
------------------------------------
Bottleneck layers:
1X1的卷積在3X3的卷積前作爲一個bottleneck layer,可以提高計算效率;
------------------------------------
Compression:
爲了進一步提高模型的compactness,我們可以減少過渡層的特徵圖的數量。
相關參考 https://blog.csdn.net/u012938704/article/details/53468483
https://blog.csdn.net/u011974639/article/details/78290448