DenseNet

3/60 今日 paper
Introduction
????????? Dense connectivity: Our network has L(L+1)/2 direct connections. For each layer, the feature-maps of all preceding layers are used as inputs, and its own feature-maps are used as inputs into all subsequent layers.
????????? Advantages: they alleviate the vanishing-gradient problem, strengthen feature propagation, encourage feature reuse, and substantially reduce the number of parameters.
Obtain significant improvements over the sota.
?
MobileNet Architecture
· Dense Block
?????? "Crucially, in contrast to ResNets, we never combine features through summation before they are passed into a layer; instead, we combine features by concatenating them.
?????? Dense connectivity:To further improve the information flow between layers we propose a different connectivity pattern, we introduce direct connections from any layer to all subsequent layers. Figure 2 illustrates the layout of the resulting DenseNet schematically."
?

?????圖1畫的非常好,一目了然,很好的解釋了其提出的"feature reuse"。

????????Dense連接,其實比較簡潔的一個思路,(不過在實現(xiàn)上有一定的局限,詳見總結)。每個層產生的輸出都會被"concat"到該block中后續(xù)的所有層的輸入上(見圖2),這里不說add,就是為了和resnet作出區(qū)別,它是channel上的摞加,而不是數(shù)值上的"add"。??????
?????? 雖然說從圖片上看起來連的非?!癲ense”,但是實際上densenet并不是一個參數(shù)龐大的model,它通過“特征重用”這個手段,直接將該層前所有的feature map加到這一層的輸入,而其每一層的輸出所用到的filter其實是很少的 -- "DenseNet layers are very narrow (e.g., 12 filters per layer)"。
?
· BottleNeck

????????這個設計在resnet中有比較詳細的解釋,目的是為了減少參數(shù)和計算量。
????????由于對這種一下將維度縮減的操作,理論上,這種降維肯定是會伴隨著信息損失的,但是對于特定任務來說,如此高的維度可以說是沒有必要的,被幾十倍放大過的特征里面有大部分其實都是"無用"的,有些甚至會產生負面影響,這里可以和"壞死神經元"的思想進行一個類比(網絡中大多數(shù)神經元其實都是未被使用到的)。所以我們可以通過降維操作去選取一些我們更應該需要關注的特征。而緊接著的重新升維是為了提升網絡的表征能力,這里升維后的特征與降維前的特征雖然通道數(shù)相同,但是后者實際上是從低位特征還原得到的,同時也經過了又一次的非線性激活函數(shù),可以認為升維后的特征針對當前任務更具有特異性。
?
· DenseNets
?

?本文中為了控制每個block中特征圖的size不變,在使用3*3卷積時候使用s=1,p=1。?
?????? 在實現(xiàn)上,如圖4,每一個block中的每一個layer,都使用了類似bottle neck結構的卷積 ,區(qū)別在于他只是用了1*1卷積和3*3卷積,在圖3中的右側的最下面一個升維的1*1的卷積層并沒用。
?????? 此處作者引入一個超參數(shù)k來設置每個layer的卷積的數(shù)量,方便調參。--"We refer to the hyperparameter k as the growth rate of the network."。k指的是每個block中每個小layer使用的3*3的filter的數(shù)量,同時也固定了1*1的卷積數(shù)量為4*k個,由于特征重用,通常較小的k就能獲得不錯的效果。
????? 此處的block之間的兩層,作者取了個名字叫"Transition Layer",其實就是一個1*1卷積和一個2*2的AveragePooling啦。
????? 此外作者在不同規(guī)模和不同數(shù)據集的densenet上使用了不同的參數(shù),詳見原文。
?
?
總結:
?????? 其實DenseNet給出的insight就是特征重用這個手段,這個idea其實也蠻好的,在后續(xù)的很多網絡中都用到這種看起來像"跳接"的結構來實現(xiàn)特征重用,甚至說在GAN中,將不同階段的Generator產生的圖片摞起來給后面的Critic去訓練,這其實也是某種程度上的reuse吧!
?????? 前面提到過densenet有一個痛點!這也是他一直被噴的原因,那就是爆顯存!試想一個block的最后幾層,接受的feature map的數(shù)量可以說十分龐大了。而且他的參數(shù)量的減少并不是那么明顯,1*1的卷積在面對極高channel的feature map時候的計算量也不可小覷。(或許被噴還有可能是因為覺得他名不副實,2017 CVPR best paper!!和resnet的切入方向有點太像了)
?????? 至此經典cnn網絡算是看完了大多數(shù),曠視的shuffleNet還得看看!不太想過分細究實驗細節(jié)了,接下來會整理一下GAN方向上的論文,復現(xiàn)一下SNGAN,之后會看一些Detection方向的文章,拓展一下知識面。
?
?
參考文獻:
?
[1] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In CVPR, 2016. 1, 2, 3, 4, 5, 6
?
[2] 部分圖片和思考:zhuanlan.zhihu.com/p/37189203
?
[3] Densely Connected Convolutional Networks.? arxiv.org/pdf/1608.06993.pdf
?