编者序:本文是CVPR2017最佳论文,提出的DenseNet在多个视觉数据集上获得了state-of-the-art,以前馈方式每一层都连接到其后的每一层,其前的每一层特征图都作为本层的输入,优点是减轻了梯度消失问题、强化了特征传播、增强了特征重用、降低了参数数量。作者在GitHub上开源了源码,可下载验证。上部分是综述和网络结构,下部分是试验和讨论。
推荐指数☆☆☆☆☆
一、引言
卷积神经网络已经成为视觉物体识别的主要机器学习方法。尽管CNN在20年前就提出了,但归功于计算机硬件和网络结构,真正深的CNN最近才实现。最初的LeNet5包括5层、VGG包括19层,仅有近年来的Highway网络和残差网络(Residual Network,ResNet)超过了100层。
随着CNN深度的增加,出现了新的问题:输入或梯度信息传输很多层在另一端会出现消失或wash out现象。ResNet和Highway Network通过相等连接(identity connection)将信号从一层传到另一层,Stochastic depth 方法在训练时通过随机丢弃层缩短ResNet以获得更好的信息和梯度流。FractalNet重复连接若干层序列并用卷积模块获得large nominal depth,同时维持许多短路。尽管这些网络在拓扑和训练过程上不同,但它们都有一个共同的特性:创造了从前层到后层的短路(short path)。
本文将该思想应用到一种简单连接模式:保证网络层间信息流最大,将所有层直接彼此连起来。为了保留前馈特性,每层获得的输入为前面所有层,并将自身的特征图传递到其后的所有层,如下图所示。与ResNet不同,在输入某层之前并不将特征相加,而是直接连接。因此,第p层有p个输入,由其前面所有卷积模块的特征图组成。而它自身的特征图传递到其后的所有L-p层。L层网络共有L(L-1)/2个连接,而不是传统结构中的L个。正是由于这种稠密连接模式,我们将该方法称为稠密卷积网络(Dense Convolutional Network,DenseNet)。
这种稠密连接模式的一个反直觉的效果是,比传统卷积网络需要更少的参数,因为没有必要重复学习冗余特征图(there is no need to relearn redundant feature maps)。传统前馈网络可看成是逐层传递的状态算法,每层从前一层读取状态并向后层写入状态,虽改变了状态但传递了需要保留册信息。ResNet直接通过加性恒等变换(additive identity transformation)保留信息,一些最近的ResNet变种表明许多层贡献很小,训练时可以随机丢掉。这使得ResNet状态与RNN类似,但是由于ResNet没层都有自己的权值而参数很多。我们提出的DenseNet结构与信息相加和信息保留明显不同,DenseNet非常窄(例如每层12个特征图),向集体知识中增加了非常小的特征图,并维持其余特征图不变,最终分类器根据所有特征图做决定(DenseNet layers are very narrow, adding only a small set of feature-maps to the “collective knowledge” of the network and keep the remaining feature-maps unchanged—and the final classifier makes a decision based on all feature-maps in the network.)。
除了高效的参数效率,DenseNet的另一大优势是提高了信息流和梯度的传递,使得训练简单。没层直接从损失函数获得梯度和原始输入信号,隐含深度监督,使得可以训练很深的网络结构。此外,我们也观察到,稠密连接有正则化效果,减少了小样本下的过拟合。
我们在CIFAR-10、CIFAR-100、SVHN和ImageNet四种数据集上评估了DenseNet,我们的模型需要更少的参数可获得与现有算法相比有竞争力的精度,在大多数数据集上优于目前的state-of-the-art。
二、相关工作
从神经网络提出后就开始了网络结构的探索,现代网络层数的增加放大了网络结构的不同,诱发人们探索不同的连接模式和回顾老的研究思想。类似我们的级联结构最早见于1980年代,他们的开创性工作聚焦于逐层训练的全连接多层感知机。后来,提出了训练全连接级联网络的批量梯度下降法,尽管在小数据集上有效,但网络参数仅有几百个。后来发现CNN中通过跨层连接在很多视觉任务中很有效,也有学者推出了跨层连接的理论框架。
Highway Network是可以有效训练超过100层端到端网络的第一个结构,通过旁路(bypassing path)和门控单元(gating unit),该网络可以通过SGD有效优化,旁路是可以训练这么深网络的关键因素。ResNet进一步证明了这一点,通过恒等映射(identity mapping)实现旁路。ResNet在很多识别、定位、检测竞赛中打破了记录,如ImageNet和COCO目标识别。最近提出的Stochastic depth成功训练了1202层ResNet,该方法通过训练时随机丢掉层提高训练,这表明并不需要所有层,在深度网络中有大量冗余,本文部分受此启发。Pre-activation的ResNet成功训练了state-of-the-art的超过1000层网络。
与加深(deep)网络不同的是增加网络宽度(width)。GoogLeNet使用Inception模块,通过不同尺度滤波器生成的特征图。也有学者提出了宽泛化残差模块的ResNet。实际上,只要深度足够,紧紧增加ResNet没层滤波器个数就能提高性能。使用宽网络结构的FractalNets在多个数据集上获得很好结果。
相对于非常深或非常宽网络结构带来的表征能力,DenseNet通过特征复用(feature reuse)增强网络性能,生成的稠密模块很容易训练,且具有很高的参数效率。连接不同层学习到的特征图增加了后面蹭的输入变化,提高了效率(Concatenating feature maps learned by different layers increases variation in the input of subsequent layers and improves efficiency),这是DenseNet与ResNet的主要区别。与同样连接不同层特征的Inception网络相比,DenseNet更简单更高效。
另外一种创造性较强且效果很好的网络是NIN(Network in Network),卷积层滤波器包括了微小的多层感知器,用以提取更复杂特征。深度监督网络(Deeply Supervised Network,DSN)内层直接用辅助分类器监督,可以增强前面层接收到的梯度。深度融合网络(Deeply Fused Net,DFN)通过连接多个不同基础网络中间层提高信息流。
三、DenseNet
考虑一张简单图像x0通过L层卷积网络,第i层执行了非线性变换H_i, H_i可以是批量规范化(Batch Normalization,BN)、ReLU、Pooling或卷积Conv的组合。我们记第i层的输出为x[i]。
ResNet
传统的卷积前馈网络将第i层的输出作为第i+1层的输入,变换为:x[i]=H_i(x[i-1])。ResNet增加了跨层连接,使用恒等函数旁路非线性变换:x[i]=H_i(x[i-1])+x_i-1。ResNet优势是梯度流直接通过恒等函数从后层传到前层。然而,由于恒等函数和H_i的输出相加,可能会阻止网络中的信息流。
Dense Conectivity
为了进一步提高层间信息流,我们提出了不同的连接模式:直接将所有层连接到其后的层。因此,第i层接收其前面所有层作为输入:x[i]=H_i(x[0],x[1]…x[i-1])。x[p]代表第p层生成的特征图。为便于部署,我们将H_i的多输入组成单个tensor。
Composite function
我们将非线性函数H_i定义为三个顺序操作的组合,BN、ReLU、3?3Conv。
Pooling layers
当特征图尺寸变化时,直接连接操作H_i并不可行,然而,卷积网络必不可少的一部分池化层改变了特征图尺寸。为了在我们的结构中使用池化层,我们将网络分成多个稠密连接dense block,如下图所示。我们将dense block之间的层叫做变换层transition layer,执行卷积和池化操作,在我们的实验中transition layer组成形式为:BN、1?1Conv、2?2均值pooling。
Growth rate
如果每个H_i输出k个特征图,则第i层输入特征图个数为k?(i-1)+k0,其中k0为输入图像通道数。为防止网络变得太宽并且提高参数效率,我们限定k为一个小的整数,如k=12。我们将超参数k叫做网络的growth rate。我们会通过实验证明,相对小的growth rate足够获得state-of-the-art结果。一种解释是:每层获取了block内所有前层的特征图,获得了集体知识(collective knowledge)。可以将特征图看作网络的全局状态(global state),没层向该全局状态加入了k个自己的特征图。Growth rate确定了每层对全局状态贡献的新信息。一旦写入全局状态,可以在网络中任何地方访问,和传统网络结构不同,因此没有必要将它从一层复制到另一层。
Bottleneck layer
尽管每层仅产生了k个特征图,但它有很多输入。可以在每个3?3Conv前引入1?1Conv作为Bottleneck layer,降低输入特征图数,提高计算效率。我们发现这种设计队DenseNet非常有效,我们将带有bottleneck layer的这种BN-ReLU-Conv(1?1)-BN-ReLU-Conv(3?3)的H_i版本叫做DenseNet-B。除非特别指出,实验中每个1?1Conv将输入减少到4k个特征图。
Compression
为了进一步提高模型紧凑性,可以在transition layer减少特征图数量。如果一个dense block包括m个特征图,我们让其后的transition层生成bm个输出特征图,其中压缩系数b为0和1之间的数。我们将b<1的DenseNet叫做DenseNet-C,实验中设b=0.5。将同时使用bottleneck和b<1的transition layer的模型叫做DenseNet-BC。
Implementation Detail
在除ImageNet外的所有数据集上,实验中用的DenseNet有3个有相同层数的dense block。输入第一个dense block前,首先将输入图像执行16(DenseNet-BC该值为2倍的growth rate)输出通道的Conv。对于3?3卷积层,输入各边1个像素补零以保持特征图尺寸不变。相邻dense block间的Transition layer使用1?1Conv和2?2均值pooling。最后一个dense block之后是全局均值pooling和softmax分类器。3个dense block的特征图尺寸分别是32?32、16?16和8?8。对于基本DenseNet结构,growth rate分别取k=12和k=24,层数L分别取L=40和L=100。对于带有bottleneck layer的DenseNet,growth rate配置为{L=100,k=12}、{L=250,k=24}和{L=190,k=40}。
在ImageNet数据集上,使用DenseNet-BC结构,输入图像尺寸为224?224,4个dense block。最初的卷积层为2k个步长为2的7?7卷积,其它所有层的特征图数量设为k。ImageNet上网络详细配置如下表所示。
未完待续。。。
英文名称:Densely Connected Convolutional Networks
链接及源码:
https://arxiv.org/pdf/1608.06993.pdf
https://github.com/liuzhuang13/DenseNet
死磕自律,遇见更好的自己;自斩双臂,方能长出强两翼。
败而不弃,潜龙勿用待时机;执着坚毅,飞升上神创奇迹!
关注该公众号,一起创造奇迹。
本文暂时没有评论,来添加一个吧(●'◡'●)