注:本文源自本人的硕士毕业论文,未经许可,严禁转载!
原文请参考知网:知网本论文下载地址
最近的研究表明,如果卷积网络包含接近输入的层和接近输出的层之间的较短连接,则卷积网络可以更深入,更精确和更有效地进行训练。在本章中,论文首先研究密集卷积网络(DenseNet)的结构和工作原理,随后本人提出一些改进意见,包括增加密集块中的层数、使用复合型综合函数、使用不同尺寸的卷积核和池化核、使用变化的增长率、压缩模型使其紧凑等方式对网络进行了改进。实验表明改进后的网络在物体分类任务上表现更好。DenseNet以前馈的方式将每层连接到每个其他层。传统的具有L层的卷积网络具有L个连接,每个层与其后一个层之间,DenseNet具有 个直接连接。对于每一层,前面所有图层的特征映射都被用作输入,并且它自己的特征映射被用作所有后续图层的输入。DenseNet有几个引人注目的优点:它们可以缓解消失梯度问题,加强特征传播,鼓励特征重用以及大幅减少参数数量。论文在识别基准任务(CIFAR-10,CIFAR-100,SVHN)的上验证了改进后网络的准确率。 DenseNet在其中大部分技术上都取得了显着的改进,同时需要较少的计算来实现高性能。
近几年, 卷积神经网络(CNN)已经成为视觉对象识别的主要机器学习方法。虽然它们最初是在20多年前推出的,但计算机硬件和网络结构的改进使得最近才开始真正深入CNN。最初的LeNet5由5层组成,而VGG有19层,仅Highway网络和残差网络(ResNet)超过了100层网络结构。
随着CNN网络结构的日益加深,出现了一个新的研究问题:随着有关输入或梯度的信息经过许多层,在到达网络的末端(或开始)时,它可能损耗或者消失。许多最近的论文解决了这个以及相关问题。ResNets和Highway Networks通过跳跃连接将来自一个层的信号传递给下一层。随机深度通过在训练期间随机丢弃一些层来缩短ResNets结构以保证更好的信息和梯度传递。 FractalNet通过多次合并具有不同数量的卷积块的并行层序列以获得大的标称深度,同时在网络中保持许多短路径。虽然这些不同的方法在网络拓扑和训练过程中各不相同,但是它们都具有一个关键特征:它们创建从早期层到后期层的短路径。
在本章中,我们对这种将这种见解提炼成简单连接模式的体系结构加以验证,并尝试改进策略。为了确保网络中各层之间的最大信息流,直接连接所有的网络层。为了保留前馈特性,每一层都从前面的所有层获得附加输入,并将其自身的特征映射传递到所有后续层。图3-1示意性地说明了这种布局。最重要的是,与ResNets相比,DenseNet从未将特征通过求和组合到一个层中,相反地,DenseNet通过连接它们来组合特征。因此,第 层有l个输入,由前面所有卷积块的特征映射组成。它自己的特征映射被传递给所有的 后续层。这在一个L层网络中引入了 个连接,而不仅仅是像在传统架构中一样的L个连接。由于其密集的连接性模式,我们将这种方法称为密集卷积网络(DenseNet)。
图3-1 DenseNet(左)与ResNet(右)部分结构对比
这种密集连接可能是反直觉效应模式是它比传统需要更少的参数卷积网络,因为不需要重新学习多余的特征图(feature maps)。传统的前馈架构可以被看作是具有状态的算法,其中信息从一层到下一层进行传递,每层从它的前一层读取状态然后写入后续层。这种节后改变了状态,但也传递了需要被保存的信息。ResNets通过增加性标识转换使得信息被保留。ResNets最近的变化显示了许多层次贡献很小,并且事实上可以在训练中随机丢弃。这使ResNets的状态类似到递归神经网络,但ResNets的参数数量要大得多,因为每一层都有自己的权重。DenseNet架构明确区分被添加到网络中的信息和保留的信息。DenseNet的层非常狭窄(例如,每一层有12个特征图),通过向网络中增加一小部分特征图,并保持其余特征映射不变,最后的分类器基于网络中所有的特征图做决策。
除了更好的参数使用效率外,DenseNet还有一大优势就是他们改进的信息流和梯度流经整个网络,这使得他们很容易训练。每个层都可以直接访问损失函数的梯度和原始输入信号,使得网络包含了隐式的深度监督。这有助于训练更深的网络架构。此外,我们还观察到密集的连接具有正则化效果,这减轻了训练集规模较小时产生的过度拟合问题。
论文使用几个标准数据集(CIFAR-10,CIFAR-100,SVHN)来评估DenseNet。实验达到了与现有算法相媲美的准确性,而且往往需要更少的参数。并且,性能优于目前的最新技术水平大部分基准测试任务的结果。
自神经网络问世以来,网络架构的探索一直是其中重要的一部分。最近神经网络的普及也恢复了这一研究领域。层数越来越多在现代网络中放大了网络之间的差异架构,并激发对不同连接性的探索模式和对旧研究思路的重新审视。
级联结构类似于密集网络布局,该结构自20世纪80年代起已经在神经网络中进行了研究贡献。他们的开创性工作侧重于完全连接的多层感知器在层与层之间训练。最近,完全连接的级联网络受到批梯度下降训练算法的影响。尽管对小数据集有效,但这一方法只能扩展到具有几百个参数的网络。利用多级特征在CNN通过跳跃连接(skip-connnections)被证明是适用于各种视觉任务的。
Highway Networks是提出训练端到端网络最早的架构之一,网络首次超过100层。通过使用绕过路径与门控单元,Highway Networks网络有效地使用SGD优化数百个图层。被绕过的路径被认为是简化了这些非常深的网络训练的关键因素。这一点在ResNet中得到进一步支持,ResNet在挑战图像识别,定位和检测任务等方面取得了令人印象深刻的创纪录的表现,如ImageNet和COCO目标检测。最近,随机深度作为一种成功的方法训练了一个1202层深的ResNet网络结构。随机深度通过随机丢弃一些层(Dropout机制)来改善深度残留网络的训练。这表明不是所有层都是必须的,并强调在深度(残差)网络中存在着比较大的冗余量。DenseNet正是受到这一观点的启发。
一种使网络层数更深的正交方法(例如,在跳过连接的帮助下)是增加网络宽度。 GoogLeNet使用了“Inception module”。该模块连接了由不同大小的过滤器生成的特征映射。ResNet的一个变种提出了更广泛的残差块。在实际上,简单的增加ResNet每一层的过滤器数量能提升网络的表示能力。
DenseNet通过特征重用(feature reuse)来探索网络的潜力,以产生易于训练和高参数效率的密集模型,而不是从极端的图形表示力深层或广泛的架构。通过连接不同的层中学习到的特征映射会增加后续层输入的变化并提高效率,这形成了DenseNet和ResNet之间的一个主要区别。与同样也是连接由不同层提取的特征的InceptionNet相比,DenseNets更简单,更高效。
还有其他值得注意的网络体系结构创新,他们同样取得了有竞争力的结果。Network In Network(NIN)结构包括微型多层感知器进入卷积层的滤波器中以提取更复杂的特征。在深度监督网络(DSN)中,内部层直接受到辅助分类器的监督,这可以加强由较早的层传递来的梯度。Ladder Network引入横向连接到自动编码器(autoencoder),获得了在半监督学习任务方面较高的准确性。Deeply-Fused Net(DFNs)被引出的目的是为了提升信息的流动,通过组合中间层不同的基础网络。通过增加路径来减少重建损失的网络也被证明可以改善图像分类模型。
现在考虑一个通过卷积网络传递的单个图像 。这个网络包含L层,每一层实现一个非线性变换 ,其中l表示层数。 可以是一个符合函数,诸如批量标准化(Batch Normalization)、整流线性单元(ReLU)、卷积(Conv)或者赤化(Pooling)。定义 层的输出为 。DenseBlock的结构如图3-2所示:
图3-2 一个5层Dense Block模型
传统前馈卷积网络将 层的输出直接作为 层的输入,得到这个传递函数: 。而ResNet在进行非线性转换时添加了跳跃连接(skip-connection),得到下面的转换方程: 。ResNet的一个明显优点就是梯度直接从后面的层流向前面的层。然而,非线性变换及其输出是以加法结合在一起,这将影响网络中信息的流动。
为了进一步提升网络中信息的流动性,模型使用一种不同的连接方式:将每一层直接与后面的每一层相连接。因此,第 层会获取前面所有层的特征图,公式如下,其中 表示由第0,1, ,l-1层产生的特征图组成的向量。
(3-1)
因为使用了密集连接(Dense connectivity),这种网络结构称之为Dense Convolution Network(DenseNet)。为了便于实施,合并多输入的 为一个简单向量。
定义 为一个包含了三个连续操作的复合函数:批量标准化(Batch Normalization),整流线性单元(ReLU)和一个 卷积(Conv)。
图3-2中使用的级联操作在特征映射的大小发生变化时变得不可行。但是,卷积网络的一个重要组成部分是汇集可改变特征映射大小的层。为了便于在体系结构中合并,将网络分成多个密集连接的密集块(dense blocks)。密集块之间的层称为过渡层,它们进行卷积和池化操作。 在我们的实验中使用的过渡层包括批量标准化层和1×1卷积层,然后是2×2平均池化层。
如果每一层的函数 生成k个特征图作为输出,那么第 层有 个输入特征图,其中 是原始输入图像的通道数。为了防止网络增长太宽,并改善参数效率,限制k为一个小的整数,例如k=12。我们引入超参数k作为网络的增长率,并且相对较小的增长率就足够了在我们测试的数据集上获得最新的结果。对此的一种解释是每个层都有到其他密集块特征映射的访问权限,另一种解释是将特征图看做网络的全局状态,即每一层为自己增加k个特征图。增长率调节每一层贡献给全局状态的新信息量。全局状态一旦写入,就可以从网络的任何地方访问它,这与传统网络体系结构不同,我们不需要一层一层地复制它。
尽管每一层只产生k个输出特征图,它通常有更多的输入。前面我们提到,可以引入1×1卷积作为每次3×3卷积之前的瓶颈层(Bottleneck layer),以减少输入特征图的数量,从而减少输入特征图的数量,提高计算效率。我们发现这个设计对DenseNet非常有效,并将Bottleneck layer引入我们的网络,即BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3)版本的综合函数,作为DenseNet-B。除非另有规定,每个1×1卷积减少在所有实验中输入到4k特征映射。
为了进一步提高模型的紧凑性,我们可以减少过渡时的特征映射的数量层。 如果密集块包含m个特征映射,我们让下一个过渡层生成不超过 的最大整数个输出特征图,其中 被称为压缩因子。当 时,转换过程中的特征映射的数量保持不变。我们称DenseNet当 时为DenseNet-C,我们在实验中设定 。当同时使用了瓶颈层(Bottleneck layers)和压缩(Compression)方法时,我们称我们的模型为DenseNet-BC。
图3-3 包含3个Dense Block的DenseNet结构
TensorFlow是Google推出的一套机器学习系统,使用其简单灵活的架构可以轻松构建各种复杂的算法模型。其高效的执行系统和分布式架构保证了在模型训练和执行时的高性能。再加上其跨平台可移植性及实验可复现,支持快速产品化等特点,逐渐成为主流的机器学习平台。
TensorFlow是一个基于计算图(Computational Graph)的数值计算系统。计算图是一个有向图,图中的节点表示数学计算操作的算子(operations)。节点之间的连接的边代表参与计算的高维数组,成为tensor。计算图的执行可以看做数据tensor按照计算图的拓扑结构顺序,从输入节点逐步流过所有中间节点,最后到达输出节点的过程。Session(会话)系统执行的入口,其负责完成节点布置和传输节点的添加等任务。
本节DenseNet的结构正是用到了TensorFlow来实现。
DenseNet网络的结构如图3-3所示,其中N表示 卷积和 卷积的组合。我们可以看到,具有不同层的网络也有一个大致相似的结构。网络首先在输入图像上做一次卷积和池化操作,然后进入第一个DenseBlock,DenseBlock里面就是在做密集的连接运算。第一个DenseBlock后是一个Transition Layer,同样还是一个卷积和池化操作。再往后就是与前面类似的结构,只不过通过卷积得出的特征图尺寸越来越小,深度越来越大。网络的最后一层就是分离N类的Softmax层,采用全连接结构。
网络结构代码由TensorFlow框架实现。和通常使用一样,我们从输入图像开始一步一步构建网络的拓扑结构。代码实现的关键点在于如何实现“跳跃连接”,在DenseBlock中,我们将前面层的特征图全都传到后面层中。我们注意到,不同尺寸的特征图进入DenseBlock,每一个DenseBlock中的特征图的尺寸是一样的,我们使用框架提供的一个合并函数:tf.concat(concat_dim, values, name=’concat’)。该函数的第一个参数concat_dim必须是一个数,表明在哪个维度上进行连接操作,第二个参数values就是两个或者一组待连接的tensor。举个例子,DenseBlock中的第一层特征图a是一个[16,32,32,16]维的数组,经过一次卷积得到中间特征图b是一个[16,32,32,6]维的数组,调用函数c= tf.concat(3, (a,b))得到一个[16,32,32,22]维的向量,作为第二层的输入特征图。在DenseBlock中,每一层都调用该函数将上一层的特征图和本层产生的特征图进行合并,最终DenseBlock中最后一层就得到前面多有特征图的组合。
表3-1 DenseNet网络结构图
Layer Feature Size DenseNet-121 DenseNet-169 DenseNet-201 DenseNet-161
Conv 112×112 7×7 conv
Pooling 56×56 3×3 max pool
DenseBlock1 56×56 N×6
N×6
N×6
N×6
L1 56×56 1×1 conv
28 × 28 2×2 avg pool
DenseBlock2 28 × 28 N×12 N×12 N×12 N×12
L2 28 × 28 1×1 conv
14 × 14 2×2 avg pool
DenseBlock3 14 × 14 N×24 N×32 N×48 N×36
L3 14 × 14 1×1 conv
7 × 7 2×2 avg pool
DenseBlock4 7 × 7 N×16 N×32 N×32 N×24
Classification 7 × 7 ,Average Pooling
1000D full connection
我们凭经验证明了它的有效性,DenseNet在几个基准数据集上进行比较具有最先进的网络架构,尤其是与ResNet及其变体相比。
1、数据库
模型训练使用CIFAR-10数据集。CIFAR-10数据集是一个经典的物体识别数据集,该数据集是由60000张 的RGB彩色图片构成,共有10个分类,每一类有6000张图像。其中包含50000张训练图片和10000张测试图片。
数据集被分为5个Training Batch和1个Test Batch,每个Batch有10000张图像。测试批次包含来自每个类的恰好1000个随机选择的图像。训练批次以随机顺序包含剩余图像,但一些训练批次可能包含来自一个类的图像比另一个更多。这10类物体分别是:飞机,汽车,鸟,猫,麋鹿,狗,青蛙,马,船和卡车。这些分类完全互斥,汽车和卡车之间没有重叠。汽车包括轿车、SUV等,卡车只包括大卡车。两者都不包含皮卡车。
2、开始训练
所有的网络均使用随机梯度下降算法(SGD)进行训练。在CIFAR数据集上我们使用小批量训练大小为64,并使用300和40作为训练周期。初始学习率设为0.1,并且在训练周期的50%和75%阶段再除以10。在ImageNet上,我们使用256的小批量训练集和90个训练周期。初始学习率设为0.1,并且在训练周期为30和60的阶段再除以10。由于GPU内存的限制,我们使用的小批量训练尺寸为128,作为补偿,我们训练100个周期,并且在90周期时将学习率除以10。
随后,我们使用一个 的权重衰减,并使用高斯分布来初始化权重。在没有数据增量的三个数据集里,我们在每一个卷积层(除了第一个)后加上一个Dropout层,并设随机丢弃率(dropout rate)为0.2。测试误差仅对一项任务进行一次评估。
3、训练结果
我们使用不同的深度L和不同的增长率k。在CIFAR和SVHN数据集上的主要测试结果图表3-2所示。
表3-2 CIFAR和SVHN数据集上的错误率
Method Depth Params C10 C10+ C100 C100+ SVHN
ResNet 110 38.6M — 6.61 — — —
ResNet2 164 1.7M 11.26 5.46 35.58 24.33 —
DenseNet(k=12) 40 1.0M 7.00 5.24 27.55 24.42 1.79
DenseNet(k=12) 100 7.0M 5.77 4.10 23.79 20.20 1.67
DenseNet(k=24) 100 27.2M 5.83 3.74 23.42 19.25 1.59
DenseNet-B(k=12) 100 0.8M 5.92 4.51 24.15 22.27 1.76
DenseNet-B(k=24) 250 15.3M 5.19 3.62 19.64 17.60 1.74
DenseNet-B(k=40) 190 25.6M — 3.46 — 17.18 —
首先来看准确率。可能最引人注目的是表3-2最下面的一行,可以看出当L=190,k=40时的DenseNet-BC在CIFAR数据库上表现地比现有的最好的算法还要出色。最终的错误率是3.46%(C10+)和17.18%(C100+),这一结果明显低于宽度ResNet架构得到的错误率。我们在C10和C100(均没有图像增量)上的最好结果甚至有更多令人鼓舞的地方:两者都以丢弃路径的正则化方式得到比FractalNet低30%的结果。DenseNet在SVHN数据集上以L=100,k=24的结构超过了ResNet取得最好成绩。然而,250层的DenseNet-BC并不能进一步改进短连接带来的变现,可能是由于SVHN是个比较容易解释的任务,并且及其深的模型容易过拟合。
再来看参数量,如果没有压缩层或者瓶颈层的话,网络会有一个趋势就是性能会随着L和k的增加而变现更好。我们将此归因于相应的模型容量的增长。最好的证明就是在C10数据集上随着错误率从5.24%下降到4.10%,最后降到3.74%,参数的数量从1.0M到7.0M,再到27.2M。在C100数据集上也能观察到这一趋势。这表明DenseNet可以利用更大更深层模型的持续增长的变现力。也表明网络不会受到ResNet中过拟合或者优化难等问题的困扰。
表中的结果表明DenseNet比其他架构模型(尤其是对比了ResNet)有更高效的参数利用率。具有Bottleneck结构的DenseNet-BC结构具有显著的参数利用率。比如,最深的模型仅有15.3M的参数量,但它始终优于其他模型,比如ResNet的参数量超过了30M。需要强调的是,超参数L=100和k=12的DenseNet-BC结构能达到与1001层的ResNet相当的性能(C10错误率4.51%vs 4.62%,C100错误率22.27%vs22.71%),但是参数量却少了90%。图3-4表明了两种网络在C10数据集上的训练损失(Training loss)和测试误差(Test Error)。
最后研究一下过拟合现象。高效利用参数的一个积极的作用就是能够减轻过拟合现象。我们注意到,在没有进行增强的数据集上,DenseNet架构相比于之前的工作的改进尤为明显。在C10上,改进意味着相对误差从7.33%降至5.19%,相对减少29%。在C100上,减小幅度为30%,从28.2%降至19.64%。在我们的实验中,我们观察到潜在的过拟合出现在一个单一的设置:在C10中,通过增加k=12到k=24所产生的参数4倍增长导致误差从5.77%小幅增加到5.83%。DenseNet-BC的Bottleneck层和压缩层是对付这种趋势的有效方法。
图3-4 DenseNet测试图
从表面看,DenseNet网络与ResNet非常相似,只有功能函数由 变成了加法。然而,这个看起来很小的修改的影响导致两种网络架构的行为大不相同。
图3-5 DenseNet与ResNet错误率比较
1、模型紧凑
作为输入级联的直接结果,DenseNet任何层获得的特征映射可以被所有后续层访问。这鼓励了整个网络中的特征重用,并导致更紧凑的模型。图3-5中的图显示了这是一个旨在比较所有DenseNet参数效率和一个可比较的ResNet体系结构的实验结果。模型在C10上训练多个不同深度的小网络,并将它们的测试精度作为网络参数的一个函数。与其他流行的网络结构(比如AlexNet和VGGNet)相比,带有预激活的ResNet使用较少的参数,同时通常可获得更好的结果。因此,我们比较DenseNet(k=12)与ResNet。DenseNet的训练参数设置与上一节保持一致。
图3-5显示DenseNet-BC始终是DenseNet的最高参数的有效变体。此外,为了达到相同的准确度,DenseNet-BC只需要ResNet大约1/3的参数量。这一结果与我们在表3-2中呈现的ImageNet上的结果一致。表3-2显示一个仅有0.8M可训练的DenseNet-BC就能够实现与1001层ResNet相当的准确度,后者具有10.2M的参数量。
2、隐含的深度监督。
提高密集卷积网络准确性的一个解释可能是单个层通过较短的连接从损失函数外接收额的监督。可以理解为DenseNets在进行一种“深度监督”。前面在深度监督网络中展示了“深度监督”的好处,它们将分类器附加到每个隐藏层,强制中间层学习判别特征。
DenseNet以隐含的方式执行类似的深层监督:网络顶部的单个分类器通过至多两个或三个过渡层直接监督所有层。然而,DenseNets的损失函数和梯度实质上并不复杂,因为所有层之间共享相同的损失函数。
3、随机连接与确定性连接。
密集卷积网络和残余网络的随机深度正则化之间有一定的联系。在随机深度中,ResNet中的层随机丢弃,从而在周围层之间建立直接连接。由于池化层永远不会被丢弃,因此网络会产生与DenseNet类似的连接模式:如果所有中间层都是随机丢弃的,则在任何两层之间有一个小概率可以直接连接。 尽管这些方法与以往完全不同,但DenseNet对随机深度的解释可能会提供正规化一种正确的启示。
4、特征重用
按照设计,DenseNet允许每层访问来自其前面所有层的特征图(尽管有时会通过过渡层)。我们进行一项实验来验证一个被训练过的网络是否利用了这一优势。我们首先在C10上训练一个DenseNet,令L=40和k=12。对于密集块中的每一个卷积层l,我们计算分配给层s连接的平均绝对权重。平均绝对权重充当卷积层所依赖的前面层的替代物。位置 处的点表示层l使用前面s层生成的特征图的平均情况。可以得到以下观测结果:
(a)所有图层将其权重分布在同一个块内的许多输入上。 这表明非常早期的层提取的特征实际上直接被整个同一密集块中的深层使用。
(b)过渡层的权重也将它们的权重分散到前一个密集块内的所有层上,从而通过少量间接指示从DenseNet的第一层到最后一层的信息流。
(c)第二个和第三个密集块内的图层始终将最小权重分配给过渡图层(三角形顶部行)的输出,表明过渡图层输出许多冗余特征(平均具有低权重)。 这与DenseNet-BC的强大结果保持一致,在这些结果中正好压缩了这些输出。
(d)尽管最右侧的分类层也使用了整个密集块中的权重,但似乎还是会集中在最终的特征图上,这表明网络后期可能会产生更多的高级特征。
DenseNet将具有相同特征图大小的任何两个图层之间进行直接连接。我们发现DenseNet可以自然扩展到数百层,同时不会出现优化问题。在实验中,随着参数数量的增加,DenseNet倾向于提高准确度的一致性,没有任何性能下降或过度拟合的迹象。在多个设置下,它在多个高度竞争的数据集上实现了最先进的结果。而且,DenseNet需要实质上更少的参数和更少的计算来实现最新的性能。因为本研究中采用了针对残留网络优化的超参数设置,所以我们相信通过更详细地调整超参数和学习速率计划,可以获得DenseNet准确性的进一步提高。
在遵循简单的连接规则的同时,DenseNets自然地整合了身份映射的属性,深度监督和多样化的深度。它们允许在整个网络中重用特征,并因此可以学习更紧凑。由于其紧凑的内部表示和减少的特征冗余,DenseNet可能是用于构建在卷积特征上的各种计算机视觉任务的良好特征提取器。
本章首先讲述了密集卷积网络(DenseNet)的结构和原理,并通过组合优化策略将其改造成高质量的特征提取器。实验表明经过不断地增加层数可以有效提高准确率,并且不会产生过拟合的现象。实验成功将算法应用在分类问题上,下一章我们将该网络作为基础网络用于图像检测。