论文笔记之《Densely Connected Convolutional Networks》

CVPR2017最佳论文《Densely Connected Convolutional Networks》。这篇论文的第一作者是两位中国学生,黄高和刘壮,简直是佩服。论文中作者创新性的提出了一种新的卷积神经网络架构,并将源代码和预训练的模型发布在了Github上。

How

DenseNet 是受什么启发提出来的?

DenseNet 的想法很大程度上源于他们去年发表在 ECCV 上的一个叫做随机深度网络(Deep networks with stochastic depth)工作。当时他们提出了一种类似于 Dropout 的方法来改进ResNet。

他们发现:在训练过程中的每一步都随机地「扔掉」(drop)一些层,可以显著的提高 ResNet 的泛化性能。

1、它说明了神经网络其实并不一定要是一个递进层级结构,也就是说网络中的某一层可以不仅仅依赖于紧邻的上一层的特征,而可以依赖于更前面层学习的特征(随机深度网络其实可以看成一个具有随机密集连接的DenseNet)。

2、他们在训练的过程中随机扔掉很多层也不会破坏算法的收敛,说明了 ResNet 具有比较明显的冗余性,网络中的每一层都只提取了很少的特征(即所谓的残差)。实际上,他们将训练好的 ResNet 随机的去掉几层,对网络的预测结果也不会产生太大的影响。

既然每一层学习的特征这么少,能不能降低它的计算量来减小冗余呢??

Abstract

最近的研究表明如果靠近输入的层和靠近输出的层之间的连接越短,卷积网络大体上能够更深、更精确、更高效的训练。在这篇论文中,作者进一步将这个观察发挥到了极致——让网络中的每一层与其前面的所有层相连,因此,一个L层的网络拥有L(L+1)/2个连接,但L层的传统卷积网络只包含L个连接,因为每一层只与前面一层相连,所以作者将这个网络命名为DenseNet。对于DenseNet中的每一层,其前面所有层的特征图作为当前层的输入,同时当前层的特征图也作为其后每一层的输入。

Contribute

1.有效解决梯度消失问题。

2.强化特征传播。

3.支持特征重用(pre-activation的结构,特征重用可以起到抗过拟合的作用)。

4.大幅度减少参数数量(关键就在于网络每层计算量的减少以及特征的重复利用。)。

Densenet

Introduction

Densenet示意图

从这个图可以获得以下信息:

1、他们让网络中的每一层都直接与其前面层相连,实现特征的重复利用; 2、同时把网络的每一层设计得特别「窄」,即只学习非常少的特征图(最极端情况就是每一层只学习一个特征图),达到降低冗余性的目的; 3、从feature 来考虑,每一层 feature 被用到时,都可以被看作做了新的 normalization(pre-activation),在实验中,都可以看到即便去掉BN,深层 DenseNet也可以保证较好的收敛率; 4、X4层可以直接用到原始输入信息X0,同时还用到了之前层对X0处理后的信息,这样能够最大化信息的流动; 5、反向传播过程中,X0的梯度信息包含了损失函数直接对X0的导数,有利于梯度传播。

另外上面的1是2的前提因为没有1的设计就不可能实现2的“窄”网络,而且因为参数过少可能会导致欠拟合。

网络结构

A deep DenseNet with three dense blocks

Dense connectivity

where [x 0 ,x 1 ,...,x ℓ−1 ] refers to the concatenation of the feature-maps produced in layers 0,...,ℓ−1.

Composite function

将 H 定义为三种操作的组合函数,分别是:BN、ReLU和3x3卷积。

Pooling layers

当特征图的尺寸改变时,上面方程中连接操作就会出现问题。然而,卷积网络有一个基础的部分——下采样层,它可以改变特征图的尺寸。为了便于下采样的实现,我们将网络划分为多个稠密连接的dense block,如上面图所示。

Growth rate

如果每个函数 H_{l} 都产生 k 个特征图,之后的 l^{th} 层就有 k_{0}+k\times(l-1) 个特征图作为输入,其中 k_{0} 表示该层的通道数。DenseNet和现存网络结构的一个很重要的不同是,DenseNet的网络很窄,如 k=12 。我们将超参数 k 称为网络的增长速率。我们会在文章的第4部分进行说明,一个很小的增长速率在我们测试的数据集上就可以获得不错的效果。这种情况的一种解释是,每一层都可以和它所在的block中之前的所有特征图进行连接,使得网络具有了“集体知识”(collective knowledge)。可以将特征图看作是网络的全局状态。每一层相当于是对当前状态增加 k 个特征图。增长速率控制着每一层有多少信息对全局状态有效。全局状态一旦被写定,就可以在网络中的任何地方被调用,而不用像传统的网络结构那样层与层之间的不断重复。

Bottleneck layers

尽管每一层只产生 k 个输出特征图,但它却有更多的输入。在[36,11]中已经说明可以在bottleneck层中3x3的卷积之前加入1x1的卷积实现降维,可以减小计算量。他们发现这种设计对DenseNet极其有效,将具有bottleneck层,即BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3)的结构称为DenseNet-B。在他们的实验中,我们令1x1的卷积生成 4k 个特征图。

The transition layers

即转移层,两个Denseblock之间就是transition layer。

它包括:batch normalization layer -> 1×1 convolutional layer -> 2×2 average pooling layer

Compression

为了简化模型,我们在过渡层中减小了特征图的数量。如果一个dense block有 m 个特征图,我们让之后的过渡层生成 \theta m 个输出特征图,其中 0< \theta \leq1 表示compression系数。当 \theta = 1 时,经过过渡层的特征图数量没有改变。我们定义 \theta <1 的DenseNet为DenseNet-C,并且在我们的实验中 \theta = 0.5 。如果bottleneck和过渡层都有 \theta < 1 ,我们称该模型为DenseNet-BC。

实验细节

在除了ImageNet外的所有数据集上,实验中使用的DenseNet都有三个dense block,每一个block都有相同的层数。在进入第一个dense block之前,输入图像先经过了16个(DenseNet-BC中是两倍的增长速率)卷积。对于3x3的卷积层,使用一个像素的零填充来保证特征图尺寸不变。在两个dense block之间的过渡层中,在2x2的平均池化层之后增加了1x1的卷积。在最后一个dense block之后,使用全局平均池化和softmax分类器。三个dense block的特征图的尺寸分别是32x32,16x16,8x8。他们改变一些参数{L = 40, k = 12} {L = 100, k = 12} {L = 100, k = 24 } ,在基本的DenseNet上做了一些实验。对于DenseNet-BC,分别设置 {L = 100, k = 12 } {L =250 , k = 24 } {L = 190, k = 40}。

对于在ImageNet数据集上的实验,我们使用4个dense block的DenseNet-BC结构,图片的输入是224x224。最开始的卷积层有 2k (64)个卷积,卷积核是7x7,步长是2;其余所有层的特征图都设为 k。在ImageNet数据集上的网络如下表所示。

实验

他们在一些检测任务的数据集上证明DenseNet的有效性,并且和现有的一些网络进行了对比,特别是ResNet和它的变形。

数据集

CIFAR:两种CIFAR数据集都是32x32的彩色图。CIFAR-10(C10)是10类,CIFAR-100(C100)是100类。训练集和测试集分别有50000和10000张图片,我们从训练集中选5000张作为验证集。我们采用在这两个数据集上广泛使用的数据增强方式(镜像/平移)。用在数据集后的“+”来表示使用了这种数据增强方式(如C10+)。至于预处理,我们使用每个颜色通道的均值和标准差来归一化。最后,我们使用全部的50000张训练图片,在训练结束时记录测试误差。

SVHN:SVHN数据集是32x32的彩色数字图。训练集有73257张图片,测试集有26032张,有531131张作为额外的训练。在接下来实验中,我们没有使用任何的数据增强,从训练集中选取6000张图片作为验证集。我们用验证集误差最小的模型来进行测试。我们对像素值执行除255操作,归一化到[0,1]。

ImageNet:ILSVARC 2012分类数据集有1.2百万张训练集,50000张验证集,共1000类。我们采用和论文[8,11,12]同样的数据增强方式,在测试时使用single-crop或10-crop将图片尺寸变为224x224。根据[11,12,13],我们记录了在验证集上的分类误差。

训练

所有的网络均使用随机梯度下降法(SGD)进行训练。在CIFAR和SVHN数据上,我们令 batch size = 64 ,分别训练了300轮和40轮。最初的学习率都为0.1,分别在训练总轮数的50%和75%时,将学习率变为原来的0.1倍。在ImageNet上,我们将模型训练了90轮, batch size = 256 。初始学习率设为0.1,在第30轮和第40轮分别将学习率缩小10倍。受GPU内存的限制,我们设最大的模型(DenseNet-161) batch size=128 。为了弥补小batch size的不足,我们将模型训练了100轮,并且在90轮时将学习率除以10。

根据[8](论文中的参考文献索引号),我们设置梯度衰减值为10e-4,Nesterov动量设为0.9。我们采用论文[10]中介绍的权重初始化方式。对于三种没有使用数据增强的数据,如C10、C100和SVHN,我们在每个卷积层(除了第一层)之后增加了一层dropout层,并且设置失活率为0.2。对每个任务和每个模型都只进行一次测试。

在CIFAR和SVHN上的分类结果

我们使用不同的深度( L )、不同的增长速率( k ),来分别训练DenseNets。在CIFAR和SVHN上的结果如表2所示。为了突出结果,我们对其做了标记,将性能优于现存模型的结果加粗,将该数据集上的最好结果用蓝色标注。

准确率

可能最惹人注目的是表2最后一行的结果,其是 L=190、k=40 的DenseNet-BC网络在CIFAR上的结果,性能已超过现存的所有模型。在C10+上错误率为3.46%,在C100+上的错误率为17.18%。在C100+上的误差率远低于宽ResNet(wide ResNet)网络。我们在C10和C100(无数据增强)上的误差很喜人:比FractalNet和使用dropout正则项的结果低了接近30%。在SVHN上, L=100、k=24 的DenseNet(使用dropout)也远超宽ResNet的最好结果。然而,250层的DenseNet-BC的性能却没有提升太多。这可能是因为SVHN的任务很简单,复杂的模型往往会导致过拟合。

容量(capacity)

不考虑compression或bottleneck层, L 和 k 越大,模型性能越好。我们把这归功于模型容量的增加。这在C10+和C100+这两列中得到了很好的证明。在C10+这列,误差率从5.24%降到了4.10%,最后到了3.74%,因为模型的参数量从1M增加到7M,最后到了27.2M。在C100+这列,我们可以看到相似的结果。这表明DenseNets可以使用更大更深的模型来增加表征能力,也表明它们没有出现过拟合或者残差网络的优化困难等问题。

参数效率

上表的结果表明DenseNets比常见的网络(特别是ResNets)的参数效率更高。使用bottleneck结构并且在过渡层使用降维操作的DenseNet-BC的参数利用率极其高。例如,我们的250层模型只有15.3M的参数量,但是它的性能却远超其他参数量超过30M的模型,像FractalNet和宽ResNets。我们也将 L=100、k=12 的DenseNet-BC性能与1001层pre-activation的ResNet 进行了比较(如,在C10+的误差 4.51%vs4.62%,在C100+的误差:22.27%vs22.71%)。这两个网络在C10+数据上的训练loss和测试误差如图4(右图)。1001层的深度ResNet收敛到一个更低的loss,但却有相似的测试误差。我们会在接下来对这个内容做更深入的探讨。

拟合能力

更高效利用参数的一个作用是DenseNets不易发生过拟合。在不使用数据增强的数据集上,我们发现到DenseNet结构和之前的工作相比较,其改进还是很明显的。在C10上,误差降了29%,从7.33%降到了5.19%。在C100上,降了大约30%,从28.2%降到了19.64%。通过实验,我们发现一个潜在的过拟合现象:在C10上,通过将 k 从12增加到24,模型的参数量增加了4倍,而误差却从5.77%增加到5.83%。DenseNet-BC的bottleneck和compression层似乎是应对这种现象的一种有效措施。

ImageNet分类结果

我们在ImageNet分类任务上测试了不同深度和增长速率的DenseNet-BC的误差,并且和ResNet结构的性能进行了比较。为了对这两种结构有一个公平的比较,我们排除了其他所有的因素,如数据预处理方式、优化器设置。我们仅仅将DenseNet-BC网络替代ResNet模型,而保留ResNet的其他实验参数不变。

我们记录了DenseNets在ImageNet上single-crop和10-crop的验证误差,如下表所示。

DenseNets和ResNets single-crop的top-1验证误差如下图图3所示,其中左图以参数量为变量,右图以flops为变量。

与ResNets相比,在相同性能的前提下DenseNets参数量和计算量更小。例如,拥有20M参数的DenseNet-201的误差率和拥有超过40M参数的101-ResNet误差率相近。从图3的右图也可以看到类似的结果:和ResNet-50计算量接近的DenseNet大约是ResNet-101计算量的两倍。

值得注意的是,我们是修改和ResNets对应的超参数而不是DenseNets的。我们相信还可以通过修改更多的超参数来优化DenseNet在ImageNet上的性能。

讨论

从表面来看,DenseNets和ResNets很像,不同的地方是在于输入:densenet是进行拼接而不是求和。然而,这个小的改变却给这两种网络结构的性能带来了很大的差异。

模型简化性(compactness)

将输入进行连接的直接结果是,DenseNets每一层学到的特征图都可以被以后的任一层利用。该方式有助于网络特征的重复利用,也因此得到了更简化的模型。

图4左边的两张图展示了实验的结果,左图比较了所有DenseNets的参数效率,中图对DenseNts和ResNets的参数效率进行了比较。我们在C10+数据上训练了不同深度的多个小模型,并绘制出准确率。和一些流行的网络(如AlwxNet、VGG)相比,pre-activation的ResNets的准确率明显高于其他网络。之后,我们将DenseNet( k=12 )与该网络进行了比较。DenseNet的训练集同上节。

如上面的图4,DenseNet-BC是参数效率最高的一个DenseNet版本。此外,DenseNet-BC仅仅用了大概ResNets 1/3的参数量就获得了相近的准确率(中图)。该结果与图3的结果相一致。如图4右图,仅有0.8M参数量的DenseNet-BC和有10.2M参数的101-ResNet准确率相近。

隐含的深度监督(implicit deep supervision)

稠密卷积网络可以提升准确率的一个解释是,由于更短的连接,每一层都可以从损失函数中获得监督信息。可以将DenseNets理解为一种“深度监督”(deep supervision)。深度监督的好处已经在之前的深度监督网络(DSN)中说明,该网络在每一隐含层都加了分类器,迫使中间层也学习判断特征(discriminative features)。

DensNets和深度监督网络相似:网络最后的分类器通过最多两个或三个过渡层为所有层都提供监督信息。然而,DenseNets的损失函数值和梯度不是很复杂,这是因为所有层之间共享了损失函数。

随机vs确定连接

稠密卷积网络与残差网络的随机深度正则化(stochastic depthregularzation)之间有着有趣的关系。在随机深度中,残差网络随机丢掉一些层,直接将周围的层进行连接。因为池化层没有丢掉,所以该网络和DenseNet有着相似的连接模式:以一定的小概率对相同池化层之间的任意两层进行直接连接——如果中间层随机丢掉的话。尽管这两个方法在根本上是完全不一样的,但是DenseNet关于随机深度的解释会给该正则化的成功提供依据。

特征重复利用

根据设计来看,DenseNets允许每一层获得之前所有层(尽管一些是通过过渡层)的特征图。我们做了一个实验来判断是否训练的网络可以重复利用这个机会。我们首先在C10+数据上训练了 L=40、k=12 的DenseNet。对于每个block的每个卷积层 l ,我们计算其与 s 层连接的平均权重。三个dense block的热度图如下图图5所示。

平均权重表示卷积层与它之前层的依赖关系。位置 (l,s) 处的一个红点表示层 l 充分利用了前 s 层产生的特征图。由图可以得出以下结论:

1、 在同一个block中,所有层都将它的权重传递给其他层作为输入。这表明早期层提取的特征可以被同一个dense block下深层所利用;

2、过渡层的权重也可以传递给之前dense block的所有层,也就是说DenseNet的信息可以以很少的间接方式从第一层流向最后一层;

3、第二个和第三个dense block内的所有层分配最少的权重给过渡层的输出,表明过渡层输出很多冗余特征。这和DenseNet-BC强大的结果有关系;

4、尽管最后的分类器也使用通过整个dense block的权重,但似乎更关注最后的特征图,表明网络的最后也会产生一些高层次的特征。

结论

论文提出了一个新的卷积网络结构,称之为稠密卷积网络(DenseNet)。它将两个相同特征图尺寸的任意层进行连接。这样我们就可以很自然的设计上百层的网络,还不会出现优化困难的问题。在我们的实验中,随着参数量的增加,DenseNets的准确率也随之提高,而且也没有出现较差表现或过拟合的现象。通过超参数的调整,该结构在很多比赛的数据上都获得了不错的结果。此外,DenseNets有更少的参数和计算量。因为我们只是在实验中调整了对于残差网络的超参数,所以我们相信通过调整更多的超参数和学习率,DenseNets的准确率还会有更大的提升。

遵循这个简单的连接规则,DenseNets可以很自然的将自身映射(identity mappings)、深度监督(deep supervision)和深度多样化(diversified depth)结合在一起。根据我们的实验来看,该结构通过对网络特征的重复利用,可以学习到更简单、准确率更高的模型。由于简化了内部表征和降低了特征冗余,DenseNets可能是目前计算机视觉领域中在卷积网络方面非常不错的特征提取器。在以后的工作中我们计划研究DenseNets下的特征迁移工作。

LEAVE A REPLY
loading
正在赶回来……