【深度學習】經典卷積神經網絡(八)DenseNet

介紹

DenseNet發表在2017年的CVPR上,並獲得了當時的best paper。ResNet的出現使模型可以變得更深,通過建立前面層與後面層之間的shortcut提高模型的性能。DenseNet將ResNet與跨層連接的思路進一步發揮,它將前面建立的所有層都與後面層的密集連接(Dense Connection)。另外DenseNet通過特徵在channel上的連接實現特徵重用,最終讓DenseNet在參數和計算成本更少的情形下實現比ResNet更優的性能。
論文:Densely Connected Convolutional Networks
論文鏈接:https://arxiv.org/pdf/1608.06993.pdf
代碼的github鏈接:https://github.com/liuzhuang13/DenseNet

結構


DenseNet的結構也很好理解,即每一層都與後面的所有層跨層連接。但這樣可能會造成參數量巨大,比如圖中最後一層的channel數量可能就是原來的好幾倍。當然,這個是可以通過bottleneck壓縮一下。
儘管很多思路類似ResNet,但是與之還是有區別的的,例如DenseNet是直接concat來自不同層的特徵圖,這可以實現特徵重用,提升效率。簡單來說,ResNet是通過相加,而DenseNet是通道疊加。
但直接疊加可能又會有問題,feature map的大小可能不一致。針對這個問題,DenseNet網絡中使用DenseBlock+Transition的結構,其中DenseBlock是包含很多層的模塊,每個層的特徵圖大小相同,層與層之間採用密集連接方式。而Transition模塊是連接兩個相鄰的DenseBlock,並且通過Pooling使特徵圖大小降低。

基於Dense Block可以堆疊出更復雜的網絡,並且可以降低網絡的深度,例如Dense一百層可能比1000層的普通網絡效果還要好。跨層連接造成了很多參數量,所以一般通過bottleneck來壓縮一下並且注意通道數的控制。卷積層其實現基本的是BN+ReLU+Conv,或者加入bottleneck的BN-ReLU-Conv(1×1)-BN-ReLUConv(3×3) 。下面是一些網絡的設計:

最終,DenseNet也取得了比較好的效果:

另外提一下DenseNet和stochastic depth的關係,在stochastic depth中,residual中的layers在訓練過程中會被隨機drop掉,其實這就會使得相鄰層之間直接連接,這和DenseNet是很像的。

思考

DenseNet的充分利用了各層的feature map,跨層連接的方式與ResNet也有不同,進一步減輕了荼毒小時的問題。另外,利用bottleneck layer,translation layer以及較小的growth rate使得網絡變窄,參數減少,有效抑制了過擬合,同時計算量也減少了。這裏總結一下其中的一些思路:

  • 將更多的層進行跨層連接
  • 使用通道連接進行跨層連接
  • 應用bottleneck、translation layer縮小參數
  • 充分利用feature map

參考資料

https://zhuanlan.zhihu.com/p/37189203
https://blog.csdn.net/u014380165/article/details/75142664

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