CNN--DenseNet--Memory-Efficient DenseNet

Paper:

https://arxiv.org/abs/1608.06993(DenseNet)

https://arxiv.org/pdf/1707.06990.pdf(Memory-Efficient DenseNet)

Code:

https://github.com/liuzhuang13/DenseNet

https://github.com/gpleiss/efficient_densenet_pytorch

 

思路來源:

       通過對ResNet有效性的研究,發現主要來源 "短連接"。於是論文將這個思想應用到極致。就是每一層的輸入來自前面所有層的輸出,利用concat在channel進行此前每一層的輸出。考慮到concat需要保證特徵圖的size一致,因此作者提出Dense-block,在block內部採用密集鏈接。爲防止concat過多的特徵圖,在block內的層與層之間又包含bottleneck layer;在block之間也採用bottleneck layer。

        優點:

         1,減輕了vanishing-gradient(梯度消失)------- shortcuts

         2,加強了feature的傳遞 ,更有效地利用了feature --------- 密集連接和特徵複用。所謂特徵複用,每一層輸出的特徵圖直接concat在之前特徵圖中,最終得到的特徵圖既包含第一層又包含最後一層的輸出。

         3, 一定程度上較少了參數數量 --------  無論在block內的每一層輸出(k)還是block之間的輸出(4*k)的特徵圖的個數較ResNet(512、1024等)少很多。由參數量的計算公式,可得。

        DenseNet需要高顯存的原因:

         和ResNet及其他CNN不同的是,DenseNet是密集連接,就是每一層的輸入來自前面所有層的輸出,因此在前向過程中需要保存之前的特徵圖。而ResNet及其他CNN只需要保留前一層的特徵圖即可。當然都需要保存權重參數。未解決此問題,由此產生下文。

 

知識點簡述:

       對於特徵的極致利用可以提高模型的表現能力,用時由於生成大量的intermediate feature(中間特徵),因此存儲這些intermediate feature會佔用大量的顯存。爲了能夠在GPU下跑更深的densenet網絡,這篇文章通過對中間特徵採用共享存儲空間的方式降低了模型顯存,使得在GPU顯存限制下可以訓練更深的densenet網絡。當然這種共享部分存儲也引入了額外的計算時間,因爲在反向傳播的時候需要重新計算一些層的輸出,實際表現差不多增加了15%-20%的訓練時間。

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