简介
最近的工作表明,如果卷积网络在靠近输入的层和靠近输出的层之间包含较短的连接,则可以更加深入,更准确,更有效地进行训练。
在本文中,我们接受上面的观点,并介绍了密集卷积网络(DenseNet),它以前馈的方式将每一层连接到其他层。
而传统卷积网络具有L层时其也具有L层的短连接 - 每层与其后续层之间都有连接 。但是当DenseNet网络为L层的时候,其具有L(L + 1)/2个直接连接。
对于每层,所有前面层的所有feature-maps 都是用作输入,其自己本层的feature-maps 用作所有后续层的输入。
其具有下面的优点
1,其可以缓解消失梯度问题,加强特征传播,鼓励特征重用,并大幅减少参数数量
DenseNets在大多数设备上获得了相对于最新技术的显着改进,同时需要较少的计算来实现高性能
1, 介绍
对于深层的卷积网络,当有关输入或梯度的信息通过许多层时,其在到达网络尾端时可能会出现时梯度消失或者被“清除”。
对于这个问题ResNets和Highway Networks 通过恒等连接将信息从一层传输到下一层。
对于这个问题后期人们还提出了
虽然这些不同的方法虽然在网络拓扑和训练过程中有所不同,但是它们都具有一个关键特征:它们创建了从早期层到后期层的短路径。即就是 **short connect**
本文在上述 **short connect** 的观点基础 之上,提出了一种新的网络结构,
其为了**确保网络中各层之间的最大信息流,我们将所有层(每层的feature-maps必须匹配才可以相连接)直接相互连接**
为了保持前馈性质,每个层从所有前面的层获得附加输入,并将其自己的特征映射传递给所有后续层。
至关重要的是,与ResNets相比,在它们被传递到一个层之前我们从不通过求和组合功能;相反我们通过连接它们来组合功能。
2. 前人研究的相关工作
1,从Highway Networks 到resnet,其已经证明了short connect有助于增加网络的深度。
2,最近,stochastic depth被提出,作为成功的一种方式其训练了一个1202层的ResNet。 随机深度通过在训练期间随机丢弃某层来改进深度残差网络的训练。** 这表明并非所有层都需要,并强调在深度残差网络中存在大量冗余**
densenet网络结构也受到了这个网络结构的启发
3,另一种加深网络深度的方法就是增加网络的宽度,比如GoogLeNet使用“Inception module”来连接由不同大小的卷积核生成的feature-maps。
因此宽度人们提出了宽度残差网络,
事实上,只要增加ResNets每层中的过滤器数量(从而增加了网络的宽度),只要ResNets深度足够(层数足够的多),就可以提高网络的性能
4,DenseNets抛弃了上面的观点,没有通过加深或加宽网络,去提高网络的功能,而是通过重用特征来发挥网络的潜力,产生易于训练且参数效率高的压缩模型。
5,将不同层学习的 feature-maps连接,增加了后续层的输入的变化并提高了效率。 这构成了DenseNets和ResNets之间的主要区别。
6,与Inception networks相比,它也连接不同层的feature-maps,但是DenseNets更简单,更高效。
7,ResNets的一个优点是梯度可以直接通过恒等映射(identity function)从后面的层流到更早的层。 然而,H(x )和x直接通过求和进行组合,这可能阻碍网络中的信息流。
3,Dense connectivity架构
我们介绍从任何层到所有后续层的直接连接,假设网络一共有L层,则第l层的输出,会被连接到[l,L]之间的任何一层。即其会做为后续每一层的输入
为了便于实现,我们将H(l)的多个输入连接成单个张量。
4,Composite function.
受到Identity mappings in deep residual networks的启发,我们将H(l)定义为三个连续运算的复合函数:批量归一化(BN)和激活函数(ReLU)和3*3卷积(Conv)
5,Pooling layers.
如果上述等式里面的每一个x的feature-maps不一样,则无法进行连接操作,此时则必须进行下采样工作去改变feature-maps的size。为了便于在我们的网络架构中进行下采样,我们将网络划分为多个密集连接的密集块比如上图里面的Dense1 Block;
每个block块之间的被称为transition layers。其用于进行卷积和池化操作,
在我们的实验中使用的transition layers包括batch normalization layer 和 11 convolutional layer 和 22 average pooling layer
6,Growth rate
如果每一层产生K个feature maps,则第l层输入k0+k*(l-1)个feature maps。K0是最开始的输入层的feature maps个数。
DenseNet与现有网络架构之间的一个重要区别是,DenseNet可以具有非常窄的层,例如k = 12。
我们将超参数k称为网络的增长率。
我们在第4节中表明,相对较小的增长率k足以在我们测试的数据集上获得最先进的结果。
One explanation for this is that each layer has access to all the preceding feature-maps in its block and, therefore, to the network’s “collective knowledge”.
可以将feature-maps视为网络的全局状态。 每个层都将自己的k个feature-maps添加到此状态。 增长率k规定了每层为全局的状态贡献多少新信息。 一旦编写完全全局状态,就可以从网络中的任何地方访问,并且与传统网络体系结构不同,不需要在层与层之间复制它
7,Bottleneck layers
其就是resnet里面的Bottleneck。用于减少参数的数量。
BN-ReLU-Conv(11)-BN-ReLU-Conv(33) version of H(l), as DenseNet-B. In our experiments, we let each 1*1 convolution produce 4k feature-maps.
我们将加入Bottleneck layers层的网络称为 DenseNet-B
8, Compression
为了进一步提高模型的紧凑性,我们可以减少transition layers层的feature-maps数量。
我们将此时的网络结构称为DenseNet-B
将同加入Bottleneck layers和Compression的网络结构称为 DenseNet-BC.
9,实现细节
在除ImageNet之外的所有数据集上,我们实验中使用的DenseNet有三个密集块,每个块具有相同数量的层
- 第一步
在进入第一个密集块之前,对输入图像执行16输出通道的卷积(或2倍生长速率的DenseNet-BC)。
- 卷积
卷积的核数是3*3
使用0进行填充,填充的padding为1.用于保持feature-map大小不变
-
减少GPU内存的消耗
请注意,DenseNet的简单实现可能导致内存效率低下。
为了解决这个问题,可以参考Memory-efficient implementation of densenets. arXiv preprint arXiv:1707.06990, 2017. -
drop Out
we add a dropout layer after each convolutional layer (except the first one) and set the dropout rate to 0.2.
4.3. Classification Results on CIFAR and SVHN
- Capacity.
随着L和k的增加,DenseNets表现得更好。我们主要将这归因于模型容量的相应增长。
这表明DenseNets可以利用增加模型深度去提高准确率
因为参数的数量减少,所以此还表明它们不会受到过度拟合或残差网络的优化困难的影响