论文阅读之DenseNet
Densely Connected Convolutional Networks
code
时间:2017(CVPR 2017 BestPaper)
DenseNet将前面层所有输出均作为后面层的输入,传统的L层CNN只有L个前后层连接,DenseNet有L(L+1)/2的连接,前面层所有的feature map都将作为本层的输入,而本层的输出也将作为所有后续层的输入。
DenseNet的优点:减轻了梯度消失,增强了特征的传播,增强了特征的复用同时有效减少了网络的参数。
Section I Introduction
DenseNet将前面层所有输出均作为后面层的输入,传统的L层CNN只有L个前后层连接,本文DenseNet有L(L+1)/2的连接,前面层所有的feature map都将作为本层的输入,而本层的输出也将作为所有后续层的输入。
DenseNet的优点:减轻了梯度消失,增强了特征的传播,增强了特征的复用同时有效减少了网络的参数。
本文的连接模式则是直接将所有层都连接起来确保最大的信息流动。与ResNet不同之处在于,在特征传入层之前绝不将feature相加,而是将特征进行级联(concatenate)
因此,第L层网络就有l个输入,包括前面所有的feature maps,而该层的feature map也会作为后续所有层的输入。
引入密集连接的好处就是所需的参数量更少,因为没有多余的featuremap。这样做的原因是前人一些ResNet的改进发现ResNet中某些层的作用不大,训练的时候可以随机丢掉,这样处理后的ResNet更像循环神经网络但是参数量却增长了相当多。
DenseNet结构剖析:如Fig1所示,DenseNet每一层都很窄,将feature map向后层传输得到集合后的信息(collective knowledge),而其他featuremap保持不变,最后送入分类器做决策。
得益于DenseNet的连接方式,优点之一就是优化了图像信息及梯度在网络中的流动,简化了网络的训练。每一层斗鱼梯度直接相连,我们还发现这种dense connection具有修正效应,对于小型数据集可以有效抑制过拟合。
最终DenseNet在4类数据集上进行了测试,分别是CIFAR-10,CIFAR-100,SVHN,以及ImageNet)
Section II Related Works
与本文提出的相近结构早在1980s就已提出,他们开拓性的用于了多层FC结构中神经元的层层训练;
近年来也提出了一些用batch gradient的方法来训练级联的全连接层;
随后研究者们又探索了使用skip connections的方式来利用多层次的特征。
Highway Networks:首次使用bypassing path以及gating units训练超过100层的深层网络;随后ResNet通过identity mapping的bypassing 方式在许多图像识别、定位及检测任务中都验证了其有效性。还有学者提出用stochastic depth的方式训练过程中随机去除某些层完成了1202层ResNet的训练,这也证实了并不是所有层都需要的,以及深层神经网络中很多层都是冗余的。
另一种增加网络深度的方法则是借助于skip connection来增加网络的宽度,比如GoogLeNet中的Inception Module将不同大小的featuremap进行了级联。事实上单纯增加每一层filter的数目也可以提升网络性能只要深度足够的话.
而DenseNet则是通过featuremap的复用来提升网络的学习能力,这样一方面简化了训练一方面精简了参数。因为将不同层学习到的feature map级联可以增丰富后层的输入信息,有效提升学习效率.
Section III DenseNet
ResNet的好处就是梯度可以沿着这条bypass直接从l层传到前层。但是是通过加法算出来的,这阻碍了信息在网络中的传递。
下面对DenseNet结构进行解析:
DenseConnectivity的提出是为了提升层间信息的流动,因此将前层所有的特征图谱都连接至该层的输入。
这里引入add和concatenate的区别分析
Add操作常见于ResNet,而concatenate常见于DenseNet,Inception里。
ResNet中的add操作做的是值的叠加,通道数是不变的,因此在描述图像维度不变的情况下每一维下图像特征的信息量增多了,这显然有益于图像分类;而DenseNet中的concatenate操作则是特征的联合,将不同输出层的信息进行融合,图像通道数变化,即描述图像的特征维度增加了,但每一维度下的信息量没有增加。
Pooling的实现:为了实现pooling我们将整个网络划分为不同的dense block块,在不同block之间插入transition层用来完成11卷积和22均值池化操作,主要就是完成通道维度的变化。
Growth rate:增长率,如果每一层都有k个feature map那么第l层共有k0+k(l-1)个特征图谱作为输入。DenseNet的一个特点就是每一层都可以很窄(比如k=12) k就叫做网络的增长率,生长率k就决定了每一层能够贡献进多少信息进来。Section IV也验证了较小的增长率就有足够的的学习能力了。
DenseNet-B & DenseNet-C:
为了减少每一层输入的feature map数,可以引入11卷积,每次输出4k个featuremap。引入了11conv的结构叫做DenseNet-B
压缩:在transition层可以减少feature map的数量来压缩模型,通过引入位于[0,1)之间的压缩系数,进行压缩的叫做DenseNet-C
二者都有的叫做DenseNet-BC。
Section IV Experiments Setting & Analysis
Network Settings:网络包含3个DenseBlock,每个Block里层数相同,在进入Block之前将输入图像变为16个通道。每一个卷积层用33的kernel,padding=1的0填充,11的conv+22的avgpool。
在最后一个denseblock使用了全局的均值池化随后送入softmax分类器。3个block中feature map的大小分别是:40层12通道/100层12通道/100层24通道
Dataset:分别在CIFAR-10,CIFAR-100,SVHN(均为3232pixels)及ImageNet上进行了验证
训练:SGD方法,batch-size=64,epochs=300/40,使用衰减学习率
CIFAR&SVHN分类结果分析:
测试了不同深度及不同生长率在两个数据集上的分类效果,均取得了最优的效果。
Accuracy:当采用L=190,k=40的DenseNet-BC取得了最佳的accuracy而且明显优于Fractal
Capacity:在不引入bottlenet层或者不进行网络压缩时DenseNet会随着层数及生长率的增加性能也随之提升,也证实了不会面临像residual network的优化困难及过拟合的问题。
Parameter Efficirncy:通过实验对比也可以看出DenseNet的参数有效性更高
这也可以有效避免过拟合的发生,实验也验证了bottleneck层及compression层是避免过拟合的有效手段。
Section V Discussion
虽然DenseNet同ResNet很相近,不同之处仅在于送入每一层的输入由add变成了concatenatation但这一改动却大大改善了网络的学习能力。
网络的学习能力:输入级联的直接影响就是任一层的feature map都可以输入到后续的网络中提升了特征复用的程度也使得网络进价紧凑。
参数的有效性:我们将ResNet与传统的AlexNet,VGG进行对比,无疑ResNet的效果是最佳的,但DenseNet-BC仅用1/3的参数量就可以媲美ResNet的精度。
对于DenseNet的一种解释则是通过这种短连接每一层可以获得loss function更多的监督信息。类比于DSN将每一层隐藏层都用一个分类器进行监督使得每一中间层学习到的都是具有区分能力的特征。
DenseNet也体现了这一思想,因为最终的分类器只经过了2-3个transition layer就可以对所有层进行supervision,而且每一个block用的是同一个loss Function
feature reuse:(1)可以看到前层网络提取到的特征去也是可以被深层直接利用
(2)transistion layer的权重也得到了有效传播
(3)第2、3个DenseBlock的权重在最终输出中所占比重最小意味着一定的冗余性,而DenseNet-BC结构的成功也说明了这一点
Section VI Conclusion
本文提出了DenseNet结构,在任意两层之间通过相同尺度的feature map引入直接连接,这一结构天然可以搭建深层网络也不存在训练上的难点。
实验还验证了随着参数量的增加可以有效提升分类准确性,在经典的数据集上都取得了很好的成绩,而且参数量和计算量都小于当前流行的网络。
随着DenseNet不同的设定对feature的复用程度等的不同,DenseNet架构是一种特征低冗余、较为紧凑的很好的卷积特征提取器,未来将尝试迁移运用到其他任务中。