上一篇我们介绍了ResNet:经典神经网络论文超详细解读(五)——ResNet(残差网络)学习笔记(翻译+精读+代码复现)
ResNet通过短路连接,可以训练出更深的CNN模型,从而实现更高的准确度。今天我们要介绍的是 DenseNet(《Densely connected convolutional networks》) 模型,它的基本思路与ResNet一致,但是在参数和计算成本更少的情形下实现了比ResNet更优的性能,DenseNet也因此斩获CVPR 2017的最佳论文奖。 下面就让我们一起学习一下吧!
原文地址:https://arxiv.org/pdf/1608.06993.pdf
前言
Abstract—摘要
一、Introduction—引言
二、Related Work—相关工作
三、DenseNets
四、Experiments—实验
4.1. Datasets—数据集
4.2. Training—训练
4.3. Classification Results on CIFAR and SVHN—CIFAR和SVHN的分类结果
4.4. Classification Results on ImageNet—ImageNet上的分类结果
五、Discussion—讨论
六、Conclusion—总结
论文十问
最近研究表明,在卷积网络中,增加层之间的链接能够增强网络的准确性和效率。在这篇论文中,我们注意到这种设想,并将所有层直接连接起来。相对于传统卷积网络,一个L层的网络,我们的网络使用了L*(L+1) /2 的直接连接。每一层,前面的所有层的输出和自己的输入作为输入。这个网络有以下的优势:解决了梯度下将的问题,增加了特征的传递,复用了特征,减少网络参数。我们在4个数据集进行了评估(CIFAR-10,CIFAR-100,SVHN,和 ImageNet)。DenseNet 使用了更少的内存和算力获得了最好的表现。代码和预训练模型可在以下位置获得:https://github.com/liuzhuang13/DenseNet。
背景:最近研究表明,如果CNN在靠近输入和输出的层之间包含更短的连接,可以更深入更准确更有效进行训练。(ResNet)
引入问题:大量的网络参数,网络结构的利用率不高(一些层被有选择地dropout了)。
传统方式:对于有L层的网络,传统CNN有L条连接(包括后续一个连接)
本文改进:本文引入稠密卷积网络(DenseNet),它以前馈的方式,将每层与每层都连接起来,有L(L+1)/2条连接。(每一层之间以及每一层和它的后续层都有连接)每一层都从前面的所有层获得额外的输入,并将自己的特征映射传递给后面的所有层。
ResNet和DenseNet对比
DenseNet优点
(1)缓解了梯度消失问题
(2)加强了特征传播
(3)大大减少参数量
卷积神经网络(CNN)已成为视觉对象识别的主要机器学习方法。尽管它们最初是在20多年前引入的[18],但计算机硬件和网络结构的改进才使真正的深度卷积神经网络 的训练成为可能。最初的LeNet5 【19】由5层组成,VGG具有19 【29】,去年的HighWay Network【34】 和 Residual Networks (ResNets) 【11】 突破了100层的屏障。随着CNN越来越深入,出现了新的研究问题:当有关输入或梯度的信息经过许多层时,它可能会在到达网络末尾(或开始)时消失并“冲洗掉”。许多最近的出版物都解决了这个或相关的问题。ResNets【11】和Highway Networks【34】通过身份连接将信号从一层旁路到另一层。随机深度【13】通过在训练过程中随机丢弃各层来缩短ResNets,以提供更好的信息和梯度流。FractalNets 【17】重复地将几个并行层与不同数量的卷积块组合在一起,以获得较大的标称深度,同时在网络中保持许多短路径。尽管这些不同的方法在网络拓扑和训练过程方面有所不同,但是它们都具有一个关键特征:它们创建了从之前层到后面层的短路径。
在本文中,我们提出了一种架构,可以将这种见解提炼为简单的连接模式:为了确保最大程度的信息在网络中各层之间流动,我们将所有层(具有匹配的feature-map大小)彼此直接连接。为了保留前馈特性,每个层都从所有先前的图层获取附加输入,并将其自身的特征图传递给所有后续层。图1示意了这种布局。更重要的是,与ResNets相比,我们永远不会在将特征传递到图层之前通过求和来组合特征。相反,我们通过级联特征来组合它们。因此,第L层具有L个输入,由所有前面的卷积块的feature-map组成。它自身的feature-map 被传递到所有后续层。这样一个L层的网络中就具有 L(L+1)/2个连接,而不是像传统的结构那样具有 L 个连接。由于其密集的连通性模式,我们将我们的方法称为密集卷积网络(DenseNet)。
一个可能违反直觉的效果是,这种密集的连接模式与传统的卷积网络相比,需要更少的参数,因为它不需要重新学习冗余的特征图。可以将传统的前馈体系结构视为具有状态的算法,该状态会逐层传递。每一层都从其上一层读取状态,并写入下一层。它会更改状态,但还会传递需要保留的信息。ResNets【11】通过附加身份转换使该信息保留变得明确。ResNets的最新变体【13】表明,许多层的贡献很小,实际上可以在训练过程中随机丢弃。他使ResNets的状态类似于(展开的)递归神经网络[21],但是ResNets的参数数量大得多,因为每一层都有自己的权重。我们提出的DenseNet体系结构明确区分了添加到网络的信息和保留的信息。DenseNet层非常狭窄(例如,每层12个过滤器),仅向网络的“集合知识”添加少量特征图,而其余特征图保持不变–并且最终分类器根据网络中的所有特征图做出决策。
除了更好的参数效率外,DenseNets 的一大优势是它们改善了整个网络中的信息流和梯度,这使它们易于训练。每层都可以直接从损失函数和原始输入信号访问梯度,从而导致隐式深度监督【20】。这有助于训练更深层次的网络体系结构。此外,我们还观察到密集连接具有正则化效果,从而减少了训练集大小较小的任务的过度拟合。
我们在四个竞争激烈的基准数据集(CIFAR-10,CIFAR-100,SVHN和ImageNet)上评估DenseNet。与现有算法相比,我们的模型需要的参数往往要少得多,而且精度相当。此外,在大多数基准测试任务上,我们的性能明显优于当前最新的结果。
精读
当前问题:CNN的一个问题是:当输入或梯度信息经过多层达到末端后,可能会“消失”。
启发:像 Highway Networks和ResNet都通过短接将信号传递到下一层,还有很多其他形式的网路,但是都有一个关键点:都有从前端层到末端层的短接路径
连接模式:
(1)为了确保最大程度的信息在网络中各层之间流动,我们将所有层(具有匹配的特征图大小)彼此直接连接。
(2)为了保留前馈特性,每个层都从所有先前的图层获取附加输入,并将其自身的特征图传递给所有后续层。
(3)第 L层具有L个输入,由所有前面的卷积块的特征图组成。它自身的特征图被传递到所有后续层。这样一个L层的网络中就具有 L(L+1)/2个连接
结构图示:
现代网络中越来越多的业内人士扩大了架构之间的差异,并激发了对不同连通性模式的探索和对旧研究思想的重新审视。
在1980年代的神经网络文学中,已经研究了类似于我们提出的密集网络布局的级联结构【3】。他们的开拓性工作专注于以逐层方式训练的完全连接的多层感知器。最近,使用批量梯度下降训练的全连接级联网络被提出【40】。尽管此方法对小型数据集有效,但仅可扩展到具有数百个参数的网络。在【9,23,31,41】中,发现通过跳跃连接 在CNN中使用多级特征 对于各种视觉任务都是有效的。与我们的工作平行,【1】为与我们类似的跨层连接的网络推导了一个纯粹的理论框架。
Highway Networks 【34】是最早提供有效训练100层以上的端到端网络的手段的建筑之一。通过与选通单元一起使用旁路路径,可以毫无困难地优化具有数百层的公路网。旁路路径被认为是简化这些非常深层网络训练的关键因素。ResNets 【11】进一步支持了这一点,其中纯身份映射用作旁路路径。ResNets在许多具有挑战性的图像识别,定位和检测任务(例如ImageNet和COCO对象检测)中取得了令人印象深刻的创纪录性能【11】。最近,随机深度作为成功训练1202层ResNet的方法被提出【13】。随机深度通过在训练过程中随机丢弃图层来改善对深层残差网络的训练。这表明可能不需要所有层,并且强调了深层(残留)网络中存在大量冗余。我们的论文部分地受到了这一观察的启发。具有预激活功能的ResNets还可以训练具有1000多个层的最新网络【12】。
一个正交方法,用于使网络更深(例如借助跳过连接)是 增加网络宽度。 GoogLeNet 【36,37】使用“inception module”,该模块将 由不同大小的过滤器生成的特征图连接起来。在【38】中,提出了具有广泛广义残差块的ResNets的变体。实际上,只要深度足够,只需增加ResNets每层中的过滤器数量就可以提高其性能【42】。FractalNets还使用广泛的网络结构在多个数据集上取得了竞争性成果【17】。
DenseNets并未从极深或极宽的架构中获得代表性的功能,而是通过特征重用来挖掘网络的潜力,从而产生易于训练且参数高效的浓缩模型。不同层学习的级联特征图会增加后续层输入的变化并提高效率。这构成了DenseNet和ResNet之间的主要区别。与也将不同层的功能连接在一起的 Inception networks 【36,37】相比,DenseNets更简单,更高效。
还有其他显著的网络体系结构创新也产生了竞争结果。Network in Network(NIN)【22】结构将微多层感知器包含到卷积层的过滤器中,以提取更复杂的特征。在深度监督网络(DSN)【20】中,内部层由辅助分类器直接监督,这可以加强早期层接收到的梯度。梯形网络【27,25】将横向连接引入自动编码器中,从而在半监督学习任务上产生了令人印象深刻的准确性。在【39】中,提出了深度融合网络(DFN)来通过组合不同基础网络的中间层来改善信息流。具有最小化重建损失的途径的网络扩展,也被证明可以改善图像分类模型【43】。
深度:
宽度:
假设有单个图像通过一个卷积神经网络。网络包含 L 个层,每层都执行一个非线性转换
这里是 l 层的索引。 可以是诸如 卷积,池化,Relu激活,batch normalizatioin 的复合函数。我们将输出的第 l 层表示为
。
ResNets 传统的卷积前馈网络连接第 l 层的输出作为第 l+1 层的输入【16】,这引起了如下的层转换:reset 【11】增加一个跳过连接,绕过非线性变换,通过一个原始函数:
。
ResNets的一个优点是,梯度可以直接通过身份函数从后面的层流到前面的层。但是,原始函数和
的输出通过求和相结合,可能会阻碍网络中的信息流。
Dense connective: 为了进一步改善层之间的信息流,我们提出了一种不同的连接模式:我们引入了从任何层到所有后续层的直接连接。图1显示了所得DenseNet的布局。因此,第l层接收所有先前层的特征图:, ⋯
作为输入:
这里是前面 0 , 1 , 2 , ⋯ , l − 1 层的级联。由于其紧密的连接性,我们将此网络架构称为“密集卷积网络”(DenseNet)。为了易于实现,我们将等式(2)中的
的多个输入串联到一个张量中。
复合功能 定义为三个连续运算的复合函数:批量归一化(BN)【14】,然后是 ReLU 【6】和一个 3×3的卷积(Conv)。
池化层 当特征图的大小改变时,等式(2)中使用的级联操作不可行。然而,卷积网络的重要组成部分是降低特征图大小的下采样层。为了便于在我们的体系结构中进行下采样,我们将网络划分为多个密集连接的密集块。看图2,我们将块之间的层称为过渡层,它们进行卷积和池化。我们的实验中使用的过渡层包括批处理规范化层和1×1卷积层,然后是一个 2×2的平均池化层。
增长率 如果每一个函数 生成 k 个特征图,则 第 l 层具有
是输入层的通道数。DenseNet与现有网络体系结构之间的一个重要区别是DenseNet可以具有非常狭窄的层,例如k = 12。我们指的是网络的超参数增长率。我们在第4节中表明,相对较小的增长率足以在我们测试的数据集上获得最新的结果。对此的一种解释是,每个层都可以访问其块中的所有先前的特征图,因此可以访问网络的“集体知识”。可以将特征图视为网络的全局状态。每个图层都将自己的 k 个特征图添加到此状态。增长率控制着每一层为全局状态贡献多少新信息。写入后的全局状态可以在网络中的任何位置进行访问,并且与传统的网络体系结构不同,无需将其逐层复制。
瓶颈层 尽管每一层仅生成k个输出特征图,但通常具有更多输入。在【37,11】中已经指出,可以在每次3×3卷积之前引入1×1卷积作为瓶颈层,以减少输入特征图的数量,从而提高计算效率。我们发现此设计对DenseNet特别有效,并且我们将具有此类瓶颈层的网络称为DenseNet-B,即的 BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3)版本。在我们的实验中,我们让每个1×1卷积产生4个特征图。
压缩 为了进一步提高模型的紧凑性,我们可以减少过渡层的特征图数量。如果密集块包含m个特征图,则让下面的过渡层生成 个输出特征图,其中0<θ≤1称为压缩因子。当θ = 1 时,跨过过渡层的特征图数量保持不变。我们将θ < 1 的DenseNet称为DenseNet-C,并在实验中将 θ设置为0.5。当同时使用瓶颈层 以及一个θ < 1的过渡层时,我们将模型称为DenseNet-BC。
实施细节 在除 ImageNet 之外的所有数据集上,我们实验中使用的DenseNet具有三个密集块,每个密集块具有相等的层数。在进入第一个密集块之前,在输入图像上执行具有16个(或者 DenseNet-BC增长率的两倍)输出通道的卷积。对于内核尺寸为3×3的卷积层,输入的每一侧都用一个像素补零,以保持特征图尺寸固定。我们使用1×1卷积,然后使用2×2平均池作为两个连续密集块之间的过渡层。在最后一个密集块的末尾,执行全局平均池化,然后附加softmax分类器。三个密集块中的特征图大小分别为32×32、16×16和8×8。我们使用配置为{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上的实验中,我们在224×224输入图像上使用具有4个密集块的DenseNet-BC结构。初始卷积层包括2k个大小为7×7的卷积,步幅为2;其他所有图层的特征图数量也取自设置k。表1显示了我们在ImageNet上使用的确切网络配置。
现在假设有输入图像X0,网络有L层,每层实现非线性变换Hℓ(⋅),ℓ表示第几层。这里的Hℓ(⋅)是复合函数,也就是可以包含BN层、ReLU、Pooling或者Conv等操作。我们将第ℓ 层的输出表示为Xℓ 。
传统网络
最原始的前馈卷积神经网络,将第ℓ层的输出作为第ℓ+1层的输入。
公式: Xℓ =Hℓ (Xℓ −1)
ResNet
ResNet除了本层与下一层的连接之外添加了一个短路连接,即将ℓ 层和ℓ -1层的输出共同作为ℓ +1 层的输入: 也就是说第 ℓ 层会从它之前的所有层中接受特征图。
公式: Xℓ =Hℓ (Xℓ−1 )+Xℓ−1
优点:梯度可以直接通过Identity函数从后面的层流到前面的层。
缺点:Identity函数和Hℓ的输出通过求和相结合,可能会阻碍网络中的信息流。
Dense connectivity
DenseNet则是让ℓ层的输入直接影响到之后的所有层,并且由于每一层都包含之前所有层的输出信息,因此其只需要很少的特征图就够了,这也是为什么DenseNet的参数量较其他模型大大减少的原因。
公式: Xℓ =Hℓ ([X0 ,X1 ,⋯,Xℓ−1 ])
[X0,X1,...]表示将第0,1..(ℓ-1)层的特征图进行组合.
DenseNet的网络结构主要由Dense Block+Transition组成
DenseBlock(定义了输入输出如何连接) 是包含很多层的模块,每个层的特征图大小相同,层与层之间采用稠密连接方式。
Transition模块(控制通道数) 是连接两个相邻的Dense Block,并且通过Pooling使特征图大小降低。
Composite function—复合功能
为了方便,我们将Hℓ(⋅)定义为三个连续操作的符合函数:BN+ReLU+一个3×3的Conv
Growth rate—增长率
假定输入层的特征图的channel数为k0,Dense Block中各个层卷积之后均输出K个特征图,即得到的特征图的channel数为K,那么ℓ层输入的channel数为K0+(ℓ−1)K, 我们将K称之为网络的增长率(growth rate)
解释:每一层都可以访问其块中的所有前面的特征图,即可以访问网络的全局知识。可以将特征图视为网络的全局状态,每一层都将自己的K个特征图添加到全局状态中。增长率控制了每一层向全局状态贡献的新信息的数量。一旦写入全局状态,就可以从网络中的任何地方访问它,并且与传统的网络体系结构不同,无需将其逐层复制。
Q:为什么DenseNet参数量很少,在有限卷积个数通过特征重用也能够有大量的特征数?
因为Dense连接的缘故,每个块的输出channel都是固定为K的,但是输出channel却在不断变多。每个块的卷积的个数都可以固定为K,而不用像其他网络指定卷积核的个数为128、256、512、1024等特别多。
Bottleneck layers—瓶颈层
目的:尽管每个层(H(⋅))都只能产生K个输出特征,但是因为累计原因输入特征却有很多。由于后面层的输入会非常大,Dense Block内部可以采用bottleneck层来减少计算。
方法:可以在每个3×3卷积之前引入1×1卷积作为bottleneck层,以减少输入特征映射的数量,从而提高计算效率。即Hℓ()中包含的操作BN+Relu+1×1conv+BN+Relu+3×3conv,把这样的网络结构叫做DenseNet-B。
Pooling layers—池化层
原因:特征图在各层的尺寸不同,不能直接concat。如果直接横跨整个也确实不方便。
方法:将DenseNet划分为多个Dense Blocks,而块之间的称为转换层,用于卷积和池化,在本文中转换层=BN+1×1Conv+2×2AveragePooling
Compression—压缩
目的:为了进一步提高模型的紧凑性,可以减少转换层的特征图数量。
方法:引入一个压缩因子θ(0 < θ ≤1),当θ=1时转换层的输入和输出特征数不变,也就是经过转换层后特征数不变;当θ <1时,输入特征图数为m时,输出为⌊θm⌋。将θ<1的DenseNet称为DenseNet-C (在实验中我们设置θ=0.5)。
将Dense Block+bottleneck+Translation的模型称为DenseNet-BC
Q:DenseNet-B已经压缩了,为啥还要提出个DenseNet-C?
瓶颈层是指用于dense block内的H(⋅)压缩,而压缩是指在转换层进行压缩。
实验操作
实验数据
DenseNet共包含三个Dense Block,各个模块的特征图大小分别为 32 × 32,16×16和8×8,每个Dense Block里面的层数相同(Dense Block本身不会改变特征图尺寸,所以是转换层导致的尺寸变化)
在这几个基础DenseNet上实验:
对于DenseNet-BC:
实验图示
在ImageNet上的实验中,使用了DenseNet-BC结构,它包含4个Dense Blocks。初始卷积层包括大小为7×7的卷积,步长为2。详细网络配置如下表所示。
(1)需要更少的参数,DenseNet结构明确区分了添加到网络的信息和保留的信息,不需要重新学习冗余的特征图。
(2)改善了整个网络中的信息流和梯度,由于稠密连接方式,DenseNet提升了梯度的反向传播,使得网络更容易训练。每一层都可以直接访问损失函数和初始输入的梯度,减轻梯度消失现象
(3)密集链接具有正则化效应,保存了低维度的特征,可以减少训练集规模较小的任务的过拟合风险。
CIFAR. 两个CIFAR数据集【15】包含32×32像素的彩色自然图像。CIFAR-10(C10)包含从10类和100种CIFAR-100(C100)中绘制的图像。训练集和测试集分别包含50,000张和10,000张图像,我们保留5,000张训练图像作为验证集。我们采用了标准的数据扩展方案(镜像/移位),该方案被广泛用于这两个数据集【11、13、17、22、28、20、32、34】。我们在数据集名称(例如C10 +)的末尾用“ +”号表示此数据扩充方案。对于预处理,我们使用通道均值和标准偏差对数据进行归一化。对于最终运行,我们使用所有50,000张训练图像,并在训练结束时报告最终测试错误。
SVHN. 街景门牌号码(SVHN)数据集[24]包含32×32彩色数字图像。训练集中有73,257张图像,测试集中有26,032张图像,其他训练有531,131张图像。遵循常规做法[7、13、20、22、30],我们使用所有训练数据,不进行任何数据扩充,并从训练集中分割出具有6,000个图像的验证集。我们选择训练期间验证误差最小的模型,并报告测试误差。我们遵循[42]并将像素值除以255,因此它们在[0,1]范围内。
ImageNet. ILSVRC 2012分类数据集[2]包含来自1,000个类别的120万张用于训练的图像和50,000张用于验证的图像。我们采用与[8、11、12]中相同的数据增强方案来训练图像,并在测试时应用大小为224×224的单作物或10作物。根据[11,12,13],我们报告验证集的分类错误。
介绍:32x32的彩色图。CIFAR-10(C10)是10类,CIFAR-100(C100)是100类。训练集50000、测试集10000,训练集中选5000为验证集。
数据集增强:采用广泛应用于这两个数据集的标准数据增强方法—(翻转+随机裁剪)
预处理:使用各通道的均值和标准差对数据进行归一化。
介绍:一个类似于MNIST的街道门牌号数字识别数据集。32x32的彩色图。训练集73257,测试集26032,有531131张作为额外的训练。训练集中选取6000为验证集。
预处理:将像素值除以255,使它们在[0,1]范围内
介绍:目前世界上图像识别最大的数据库。ILSVARC 2012分类数据集有1.2百万张训练集,50000张验证集,共1000类。
测试图片:使用尺寸为224*224的single-crop和10-crop
所有网络均使用随机梯度下降(SGD)进行训练。在CIFAR和SVHN上,我们使用批量大小64 分别训练300和40个 epochs 。初始学习率设置为0.1,然后除以训练时期总数的50%和75%的10。在ImageNet上,我们训练了90个 epoch 的模型,批量大小为256。最初将学习率设置为0.1,然后在epoch 30和60的时候降低10倍。请注意,DenseNet的简单实现可能会导致内存效率低下。要减少GPU上的内存消耗,请参阅我们关于DenseNets的内存高效实现的技术报告【26】。
根据【8】,我们使用的权重衰减和0.9的奈斯特洛夫动量【35】而没有衰减。我们采用【10】引入的权重初始化。对于没有数据增强的三个数据集,即C10,C100和SVHN,我们在每个卷积层(第一个卷积层除外)之后添加一个dropout 层【33】,并将dropout 概率设置为0.2。对于每个任务和模型设置,仅对测试错误进行一次评估。
精读
batchsize:64。
epochs:分别训练300轮、40轮
初始学习率:0.1,分别在训练总轮数的50%和75%时,学习率变为原来的0.1
batchsize:256
epochs:训练90轮
初始学习率:0.1,在30和40轮学习率分别变为原来的0.1
另外:受GPU的内存的限制,最大的模型(DenseNet-161)的batchsize=128。训练100轮并在90轮将学习率变为原来的0.1
优化器:SGD
权重衰减:
动量:0.9
Droupout:对于三种没有使用数据增强的数据,如C10、C100和SVHN,在每个卷积层(除了第一层)之后增加了一层dropout层,并且设置失活率为0.2
我们使用不同的深度 L 和 增长率 k 来训练 DenseNet 。表2显示了CIFAR和SVHN的主要结果。为了突出总体趋势,我们将所有结果标记为优于现有的最新粗体显示,而总体最佳结果显示为蓝色。
准确性. 可能最明显的趋势可能来自表2的最后一行,这表明在所有CIFAR数据集上,L = 190和k = 40的DenseNet-BC均优于现有的最新技术。它在C10 +上的错误率为3.46%,在C100 +上的错误率为17.18%,远低于广泛的ResNet架构所实现的错误率【42】。我们在C10和C100上获得的最佳结果(不进行数据增强)甚至更令人鼓舞:两者均比使用分路路径正则化的Fractal-Net低近30%【17】。在SVHN上,具有 dropout 层的时候,L = 100andk = 24的DenseNet也超过了广泛的ResNet所获得的当前最佳结果。但是,250层的DenseNet-BC不能比较短的DenseNet-BC进一步提高性能。可以用SVHN解释这是一个相对容易的任务,而极深的模型可能会过拟合训练集。
容量. 在没有压缩或瓶颈层的情况下,DenseNets的总体趋势是随着L 和 k 的增加而表现更好。我们将此主要归因于模型容量的相应增长。这个通过C10 +和C100 +列更好的进行了演示。在C10 +上,随着参数数量从1.0M增加到7.0M到27.2M,错误从5.24%下降到4.10%,最后下降到3.74%。在C100 +上,我们观察到了类似的趋势。这表明DenseNets可以利用更大和更深层模型的增强表示能力。这也表明它们没有残留网络的过度拟合或优化困难【11】。
参数效率. 表2中的结果表明,DenseNets比其他体系结构(尤其是ResNets)更有效地利用参数。具有瓶颈结构并在过渡层减小尺寸的DenseNet-BC特别有效。例如,我们的250层模型仅具有1530万个参数,但始终优于其他具有超过3000万个参数的模型(例如FractalNet和Wide ResNets)。我们还着重指出,L = 100和k = 12的DenseNet-BC的性能(例如,C10 +的误差为4.51%vs 4.62%,C100 +的误差为22.27%vs 22.71%)可与使用90%的参数的1001层预激活ResNet媲美。
过度拟合. 更有效地使用参数的一个积极副作用是DenseNets不太容易过度拟合。我们观察到,在不进行数据扩充的数据集上,DenseNet体系结构相对于先前工作的改进尤其明显。在C10上,改善表示相对误差降低了29%,从7.33%降低到5.19%。在C100上,减少幅度约为30%,从28.20%降至19.64%。在我们的实验中,我们观察到了在单个设置中的潜在过度拟合:在C10上,通过将k = 12增加到k = 24产生的参数的4倍增长导致误差从5.77%到5.83%的适度增加。DenseNet-BC瓶颈和压缩层似乎是应对这种趋势的有效方法。
我们使用不同的深度 L 和 增长率 k 来训练 DenseNet 。表2显示了CIFAR和SVHN的主要结果。为了突出总体趋势,粗体代表超越以往最佳,蓝色代表最佳结果。
在没有压缩或瓶颈层的情况下,DenseNets的总体趋势是随着L 和 k 的增加而表现更好。我们将此主要归因于模型容量的相应增长。
这表明DenseNets可以利用更大和更深层模型的增强表示能力。这也表明它们没有残留网络的过度拟合或优化困难
DenseNets比其他体系结构(尤其是ResNets)更有效地利用参数。具有瓶颈结构并在转换层减小尺寸的DenseNet-BC特别有效。
DenseNet-BC的压缩和瓶颈层是抑制过拟合趋势的有效方式
我们在ImageNet分类任务中评估了具有不同深度和增长率的DenseNet-BC,并将其与最新的ResNet架构进行了比较。为了确保两种架构之间的公平比较,我们采用了【8】的ResNet采用公开可用的Torch实施方案,从而消除了所有其他因素,例如数据预处理和优化设置的差异。我们仅用DenseNet-BC网络替换ResNet模型,并使所有实验设置与用于ResNet的设置完全相同。
我们在表3中报告了ImageNet上DenseNets的单次裁剪和10次裁剪验证错误。图3显示了DenseNets和ResNets的top-1验证错误与参数数量(左)和FLOP(右)的关系。图中的结果表明,DenseNets的性能与最新的ResNets相当,而所需的参数和计算量却大大减少,以实现可比的性能。例如,具有20M参数模型的DenseNet-201产生的验证错误与参数超过40M的101层ResNet产生相似的验证错误。从右面板可以观察到类似的趋势,该图将验证误差绘制为FLOP数量的函数:DenseNet的计算量与ResNet-50相当,而ResNet-101的计算量却是ResNet-50的两倍。
值得注意的是,我们的实验设置暗示我们使用针对ResNets优化的超参数设置,但不适用于DenseNets。可以想象,更广泛的超参数搜索可以进一步提高DenseNet在ImageNet上的性能。
采用了ResNet公开可用的Torch实施方案,从而消除了所有其他因素,例如数据预处理和优化设置的差异。我们仅用DenseNet-BC网络替换ResNet模型,并使所有实验设置与用于ResNet的设置完全相同。
从上面的折线图可以看出,两种网络在同等误差率时,DenseNet-BC比Resnet有更低的参数和计算量。
从表面上看,DenseNets与ResNets非常相似:ResNets:等式(2)不同于式(1)仅在于将的输入串联起来而不是求和。但是,这种看似很小的修改的含义导致两种网络体系结构的行为实质上不同。
模型紧凑度 输入级联的直接结果是,所有随后的层都可以访问通过DenseNet层中的任何一层学习的特征图。这鼓励了整个网络中功能的重用,并导致了更紧凑的模型。图4的左两图显示了一个实验的结果,该实验旨在比较DenseNets所有变体的参数效率(左)和可比较的ResNet体系结构(中)。我们在C10 +上训练多个具有不同深度的小型网络,并绘制它们的测试精度作为网络参数的函数。与其他流行的网络体系结构(例如AlexNet [16]或VGG-net [29])相比,具有预激活功能的ResNet使用较少的参数,而通常可以获得更好的结果[12]。因此,我们将DenseNet(k = 12)与该架构进行比较。DenseNet的培训设置与上一节相同。
隐式深度监督 密集卷积网络精度提高的一种解释可能是各个层通过较短的连接而受到损耗函数的额外监视。可以解释DenseNets来执行一种“深度监督”。深度监督的好处以前已经在深度监督的网络(DSN; [20])中得到了证明,该网络的每个隐含层都有分类器,从而迫使中间层学习判别特征。
DenseNets以隐式方式执行类似的深度监控:网络顶部的单个分类器通过最多两个或三个过渡层对所有层提供直接监控。但是,DenseNets的损失函数和梯度实际上不那么复杂,因为在所有层之间共享相同的损失函数。
随机 vs 确定连接 密集卷积网络与剩余网络的随机深度正则化之间存在有趣的联系[13]。在随机深度中,残留网络中的各层会随机掉落,从而在周围各层之间建立直接连接。由于池化层从未被丢弃,因此网络会产生与DenseNet类似的连接模式:如果所有中间层都被随机丢弃,则在同一池化层之间的任何两层都将直接连接的可能性很小。尽管这些方法最终会完全不同,但是DenseNet对随机深度的解释可能会为这种正则化工具的成功提供见识。
特征重用 根据设计,DenseNets允许各层访问其先前所有层的特征图(尽管有时通过过渡层)。我们进行了一项实验,以调查受过训练的网络是否利用了这一机会。我们首先在C10 +上训练DenseNet,L = 40 并且 k = 12。对于一个块内的每个卷积层L,我们计算分配给各层连接的平均(绝对)权重。图5显示了所有三个密集块的热图。平均绝对重量用作卷积层与其先前层之间依赖性的替代。位置(L,S)中的红点表示,平均而言,层L充分利用了之前生成的S层的特征图。可以从图中得出几个观察结果:
输入连接的一个直接结果是,任何DenseNet层学习到的特征图都可以被随后的所有层访问。这鼓励在整个网络中重用特性,并导致更紧凑的模型。
图4的左两图显示了一个实验的结果,该实验旨在比较DenseNets所有变体的参数效率(左)和可比较的ResNet体系结构(中)。
从图中可以看出,为了达到同样的精度水平,DenseNet-BC只需要ResNets(中间图)大约1/3的参数。
图4中的右图显示,仅具有0.8M可训练参数的DenseNet-BC能够达到与具有10.2M参数的1001层(预激活)ResNet 相当的精度。
稠密连接使每一层到达最终输出,都有快速通道(通道上会有少量的转换层),每一层都可以从损失函数中获得监督信息(理解为一种“深度监督”),迫使中间层也学习判断特征。
残差网络的随机深度正则化:在深度随机中,残差网络随机丢弃一些层,让该层前后层直接相连,池化层保留。
DenseNet:模块内部的稠密连接,使每两层之间都存在直连通道。两种方式,都起到了正则效果
原理:DenseNets允许各层获得之前的所有层(尽管有时通过转换层)的feature map
设计实验:做一个实验来判断训练的网络是否有效的特征复用:在C10+数据上训练了L=40、k=12的DenseNet。block内部的每个卷积 l,我们计算与其s层连接的平均权重。三个dense block的热量图如下图:
结论:
我们提出了一种新的卷积网络架构,我们称之为密集卷积网络(DenseNet)。它引入了具有相同要素图大小的任何两个图层之间的直接连接。我们表明,DenseNets自然可以扩展到数百层,而没有任何优化困难。在我们的实验中,随着参数数量的增加,DenseNets往往会不断提高精度,而不会出现性能下降或过度拟合的迹象。在多个环境下,它在多个高度竞争的数据集上均取得了最先进的结果。此外,DenseNets需要更少的参数和更少的计算来实现最新性能。由于我们在研究中采用了针对残留网络优化的超参数设置,因此我们认为,可以通过更详细地调整超参数和学习率时间表来进一步提高DenseNets的准确性。
在遵循简单的连接规则的同时,DenseNets自然地集成了身份映射,深度监督和多样化深度的属性。它们允许在整个网络中重复使用功能,因此可以学习更紧凑的模型,并且根据我们的实验,可以得到更准确的模型。由于其紧凑的内部表示形式和减少的功能冗余,DenseNets可能是基于卷积特征(例如[4、5])的各种计算机视觉任务的良好特征提取器。我们计划在以后的工作中使用DenseNets研究这种特征转移。
本文提出了一种新的卷积神经网络结构,命名为DenseNet。提出了将网络中相同特征图大小的任意两层直接相连,在多个数据集上达到了最佳效果。
DenseNet主要有如下优点:
Q1:论文试图解决什么问题?
现阶段大量的网络参数,网络结构的利用率不高。本文提出了一种新的卷积神经网络结构,命名为DenseNet。提出了将网络中相同特征图大小的任意两层直接相连,在多个数据集上达到了最佳效果。
Q2:这是否是一个新的问题?
不是,这是在ResNet基础上进一步进行优化
Q3:这篇文章要验证一个什么科学假设?
它建立的是前面所有层与后面层的密集连接(dense connection)
通过特征在channel上的连接来实现特征重用(feature reuse)。这些特点让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能
Q4:有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?
ResNet
Q5:论文中提到的解决方案之关键是什么?
以前馈的方式,将每层与每层都连接起来
特征重用
Q6:论文中的实验是如何设计的?
在多个数据集上和原有的网络结构进行对比,比较分类结果
Q7:用于定量评估的数据集是什么?代码有没有开源?
CIFAR10、100
SVHN
ImageNet
有开源
Q8:论文中的实验及结果有没有很好地支持需要验证的科学假设?
证明了,在三个数据集上的分类结果都取得了比以往更好的成绩
Q9:这篇论文到底有什么贡献?
DenseNet不是从极深或极宽的架构中提取表征能力,而是通过特征重用来开发网络的潜力,引入了具有相同特征图大小的任意两层之间的直接连接,产生易于训练和高效的参数压缩模型。将不同层学习的feature-map串联起来,增加了后续层输入的变化,提高了效率。
Q10:下一步呢?有什么工作可以继续深入?
(1)可以通过更详细地调整超参数和学习率时间表来进一步提高DenseNets的准确性。
(2)训练时消耗内存。因为后面的特征要用到前面的特征,所以前面的特征会一直被保存在内存中,所以占用内存是很大的。
(3)由于其紧凑的内部表示形式和减少的功能冗余,DenseNets可能是基于卷积特征的各种计算机视觉任务的良好特征提取器。我们计划在以后的工作中使用DenseNets研究这种特征转移。
代码复现:DenseNet代码复现+超详细注释(PyTorch)
下期预告:SeNet