目录
论文地址:Densely Connected Convolutional Networks
1 网络结构加深的演变
- 到VGG时,网络的深度为19层,表现良好性能。但继续加深宽度性能并无提升,且参数计算量较大
- 使用shortcut连接。该连接方式是非常深的网络结构训练变得简单的关键因素。residual模块使用的就是shortcut连接(防止退化,最差是恒等映射)
- (1)Stochastis depth(随机深度)被提出作为一种成功的训练1202层resnet的方式:在训练期间随机丢弃一些层来改善深层Resnet的训练。这总操作类似于dropout,增加网络的泛化性。但同时说明并不是所有的层都是必要的,有冗余层存在。
(2)另外,一些resnet的变种往往可以用更浅层的模型,达到和深层的模型差不多的性能,这些说明了现有更深的卷积神经网络学习得到的很多特征都是冗余的。 - 增加网络宽度也是一种提升网络效果的方法(Inception)。
DenseNet的优化方式(与增加宽度和深度不同):特征复用。作者充分利用skip connection,让模块内的每一层接受它前面所有层的输出,增加了后续输入的变化并提高了效率。如此形成了更易训练、高效利用参数的浓缩结构。
2 Dense模块的介绍
密集连接卷积网络,它以前馈方式将每层的信息与后面其他层进行连接。模块内所有的层,都要接受前面所有层的信息。模块内部有L层,就有L(L+1)/2个连接。(注意:下图的L=5,由H1,H2,H3,H4,transition layer构成的)
3 DenseNet实现过程
3.1 DenseNet优点
- 1.可以减轻梯度弥散问题,有效的抑制过拟合。每层可以直接从损失函数和原始输入信号中获取梯度,改善整个网路中的信息流和梯度流,这可以看做一种较为深入的监督,有助于训练更深的网络。
- 加强特征传播,使用特征重用
- 大大减少参数数量
3.2 网络结构
(1) 计算方式
以下公式中,定义为复合函数:BN+Relu+Conv
- 【普通神经网络】
- 【残差模块】
(feature map 进行相加处理)
- 【DenseNet模块】
(feature map 进行concat处理)
(2) 相邻Dense模块之间的过渡层:BN+Conv+Pooling
由于稠密模块的输出map和输入map大小保持一致,所以搭建成的DenseNet时,降采样的操作需要在模块之间进行。
(3) 增长率k控制的全局信息:
增长率k,即每个block内每层输出的feature map的channels(模块内部的每层输出channels相同)。k0是输入层的channels值。那么第k层就有k0+k*(L-1)个channels。论文中,k设置了较小的数(比如12),这个超参数k成为网络的增长率
可以理解,用增长率控制模型的宽度
(4) bottleneck_layer层
- 模块内的使用:这里每个dense block的3*3卷积前面都包含了一个1*1的卷积操作,就是所谓的bottleneck layer,目的是减少输入的feature map数量,既能降维减少计算量,又能融合各个通道的特征。DenseNet-B。
- 模块间的使用:作者为了进一步压缩参数,在每两个dense block之间又增加了1*1的卷积操作,模块间的转换层定义成Translation layer。
(5) 模型压缩
如果一个dense block有m个特征图,我们让之后的过渡层生成θm个输出特征图,其中0<θ<1表示compression系数。我们定义θ<1的DenseNet为DenseNet-C,并且在我们的实验中θ=0.5。如果bottleneck和过渡层都有θ<1,我们称该模型为DenseNet-BC。
DenseNet:BN-ReLU-Conv(3x3)
DenseNet-B:BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3)
DenseNet-C:DenseNet + θ<1(Translation layer)
于在ImageNet数据集上的实验,我们使用4个dense block的DenseNet-BC结构,图片的输入是224x224。最开始的卷积层有2k(64)个卷积,卷积核是7x7,步长是2;其余所有层的特征图都设为 k。下图
4 实验
4.1 数据处理
CIFAR
- 32x32的彩色图。CIFAR-10(C10)是10类,CIFAR-100(C100)是100类。训练集50000、测试集10000,训练集中选5000为验证集。
- 数据集增强:采用广泛应用于这两个数据集的标准数据增强方法 --(翻转+随机裁剪)
- 预处理:使用各通道的均值和标准差对数据进行归一化
SVHN(街景数据)
- 32x32的彩色图。训练集73257,测试集26032,有531131张作为额外的训练。训练集中选取6000为验证集。
- 数据增强:无
- 预处理:将像素值除以255,使它们在[0,1]范围内
ImageNet
- ILSVARC 2012分类数据集有1.2百万张训练集,50000张验证集,共1000类。
- 数据增强:进行
- 测试图片:使用尺寸为224*224的single-crop和10-crop
4.2 模型训练超参数
- CIFAR和SVHN
- batchsize=64
- 分别训练300轮、40轮
- 初始学习率为0.1。分别在训练总轮数的50%和75%时,学习率变为原来的0.1
- ImageNet
- batchsize=256
- 训练90轮
- 初始学习率为0.1,在30和40轮学习率分别变为原来的0.1
- 另外:受GPU的内存的限制,最大的模型(DenseNet-161)的batchsize=128。训练100轮并在90轮将学习率变为原来的0.1
- 优化器:SGD
- 权重衰减:10*e-4Nesterov动量设为0.9
- Droupout:对于三种没有使用数据增强的数据,如C10、C100和SVHN,我们在每个卷积层(除了第一层)之后增加了一层dropout层,并且设置失活率为0.2
4.3 在CIFAR和SVHN上的实验结果
粗体代表超越以往最佳,蓝色代表最佳
【准确率】【CIFAR】上表格的最后一行,L=190、k=40的DenseNet-BC网络的结果,性能超过先存在的所有模型:错误率C10+为3.46%,C100+为17.8%(远低于wide ResNet网络)。【SVHM】L=100、k=24的DenseNet(使用dropout)也远超wideResNet的最好结果。但是250层DenseNet-BC并没有进一步改善性能,分析是因为SVHM是一个相对容易的任务,过深的模型可能会过拟合。
【容量】不考虑bottleneck时,L和k越大,模型能力越好。这归功于模型容量的增加。
C10+的模型容量1M--7M--27.2M,误差率5.24%--4.1%--3.74%。C100+也能说明问题。表明DenseNet可以使用更大更深的模型来增加表征能力,不容易出现过拟合或深层残差网络优化困难等问题
【参数效率】DenseNet比其他网络结构更有效的利用参数。具有压缩和瓶颈层结构的DenseNet-BC参数效率最高。例如DenseNet的250层模型只有15.3M个参数,但始终优于其他模型
- 与1001层的pre-activation ResNet相比,具有L=100,k=12的DenseNet-BC实现了相当的性能(C10+:错误率为4.62%和4.51%,而对于C100+,错误率分别为22.71%和22.27%),但参数数量少了90%
【拟合分析】我们可以看到C10上,通过将k=12增加到k=24,参数增加了4倍,网络的变大(这里是参数增多)反而导致误差略微下降:从5.77%增加到5.83%。解决方案:DenseNet-BC的压缩和瓶颈层是抑制过拟合趋势的有效方式
4.4 ImageNet分类结果
保证两种网络之间的公平对比,采用Facebook提供的Resnet的Torch实现,来消除数据预处理和优化设置之间的所有其他因素的影响。只需要将网络结构部分由Resnet替换成DenseNet-BC,并保持所有试验设置完全相同。对比结果:
从上面的折线图可以看出,两种网络在同等误差率时,DenseNet-BC比Resnet有更低的参数和计算量。
5. 讨论
【模型的简化性】网络的特征复用,使网络的得到更为简便的模型。更少的参数达到更好的效果
【隐含的深度监督】稠密连接使每一层到达最终输出,都有快速通道(通道上会有少量的transition层),每一层都可以从损失函数中获得监督信息(理解为一种“深度监督”),迫使中间层也学习判断特征。
【随机连接vs确定连接】【stochastic depth regularzation】(残差网络的随机深度正则化,后来发表的论文,对resnet做的改进):在深度随机中,残差网络随机丢弃一些层,让该层前后层直接相连,池化层保留。【DenseNet】模块内部的稠密连接,使每两层之间都存在直连通道。两种方式,都起到了正则效果
【特征复用】DenseNets允许每一层获得之前所有层(通道上会有少量的transition层)的特征图。
做一个实验来判断训练的网络是否有效的特征复用:在C10+数据上训练了L=40、k=12的DenseNet。block内部的每个卷积 ,我们计算与其
层连接的平均权重。三个dense block的热量图如下图
(三角形的第一行,表示block的输入信息被层利用程度)
- 在同一个block中,所有层都将它的权重传递给前面层作为输入。这表明:block内部,每个浅层的特征会被高层卷积不同程度上的成功利用;
- 过渡层的权重也可以传递给前面的dense block的所有层。这表明:DenseNet的信息可以以很少的间接方式从第一层流向最后一层;
- 第二三个dense block内的所有层分配最少的权重给过渡层的输出,表明过渡层输出很多冗余特征。
- 第三个分类器也使用通过整个dense block的权重,但更关注最后的特征图,表明网络的最后也会产生一些高层次的特征。