欢迎光临散文网 会员登陆 & 注册

DenseNet

2021-11-12 23:29 作者:flow___  | 我要投稿

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  来自知乎 [2]

     图1画的非常好,一目了然,很好的解释了其提出的"feature reuse"。

图2

        Dense连接,其实比较简洁的一个思路,(不过在实现上有一定的局限,详见总结)。每个层产生的输出都会被"concat"到该block中后续的所有层的输入上(见图2),这里不说add,就是为了和resnet作出区别,它是channel上的摞加,而不是数值上的"add"。      

       虽然说从图片上看起来连的非常“dense”,但是实际上densenet并不是一个参数庞大的model,它通过“特征重用”这个手段,直接将该层前所有的feature map加到这一层的输入,而其每一层的输出所用到的filter其实是很少的 -- "DenseNet layers are very narrow (e.g., 12 filters per layer)"。

 

· BottleNeck

图3

        这个设计在resnet中有比较详细的解释,目的是为了减少参数和计算量。

        由于对这种一下将维度缩减的操作,理论上,这种降维肯定是会伴随着信息损失的,但是对于特定任务来说,如此高的维度可以说是没有必要的,被几十倍放大过的特征里面有大部分其实都是"无用"的,有些甚至会产生负面影响,这里可以和"坏死神经元"的思想进行一个类比(网络中大多数神经元其实都是未被使用到的)。所以我们可以通过降维操作去选取一些我们更应该需要关注的特征。而紧接着的重新升维是为了提升网络的表征能力,这里升维后的特征与降维前的特征虽然通道数相同,但是后者实际上是从低位特征还原得到的,同时也经过了又一次的非线性激活函数,可以认为升维后的特征针对当前任务更具有特异性。

 

· DenseNets

 

图4

 本文中为了控制每个block中特征图的size不变,在使用3*3卷积时候使用s=1,p=1。 

       在实现上,如图4,每一个block中的每一个layer,都使用了类似bottle neck结构的卷积 ,区别在于他只是用了1*1卷积和3*3卷积,在图3中的右侧的最下面一个升维的1*1的卷积层并没用。

       此处作者引入一个超参数k来设置每个layer的卷积的数量,方便调参。--"We refer to the hyperparameter k as the growth rate of the network."。k指的是每个block中每个小layer使用的3*3的filter的数量,同时也固定了1*1的卷积数量为4*k个,由于特征重用,通常较小的k就能获得不错的效果。

      此处的block之间的两层,作者取了个名字叫"Transition Layer",其实就是一个1*1卷积和一个2*2的AveragePooling啦。

      此外作者在不同规模和不同数据集的densenet上使用了不同的参数,详见原文。

 

 

总结:

       其实DenseNet给出的insight就是特征重用这个手段,这个idea其实也蛮好的,在后续的很多网络中都用到这种看起来像"跳接"的结构来实现特征重用,甚至说在GAN中,将不同阶段的Generator产生的图片摞起来给后面的Critic去训练,这其实也是某种程度上的reuse吧!

       前面提到过densenet有一个痛点!这也是他一直被喷的原因,那就是爆显存!试想一个block的最后几层,接受的feature map的数量可以说十分庞大了。而且他的参数量的减少并不是那么明显,1*1的卷积在面对极高channel的feature map时候的计算量也不可小觑。(或许被喷还有可能是因为觉得他名不副实,2017 CVPR best paper!!和resnet的切入方向有点太像了)

       至此经典cnn网络算是看完了大多数,旷视的shuffleNet还得看看!不太想过分细究实验细节了,接下来会整理一下GAN方向上的论文,复现一下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

 


DenseNet的评论 (共 条)

分享到微博请遵守国家法律