DenseNet论文详解

原文地址:

https://arxiv.org/pdf/1608.06993.pdf

 

结构提出的支持观点:

       如果卷积网络在靠近输入的层与靠近输出的层之间包含更短的连接,那么卷积网络的深度可以显著增加,准确度更高,并且更易于训练。
    观点支持理由:
        随着CNN越来越深,出现了一个新的研究问题:梯度弥散。许多最近的研究致力于解决这个问题或相关的问题。ResNet5和Highway Network4通过恒等连接将信号从一个层传递到另一层。Stochastic depth6通过在训练期间随机丢弃层来缩短ResNets,以获得更好的信息和梯度流。FractalNet7重复地将几个并行层序列与不同数量的约束块组合,以获得大的标称深度,同时在网络中保持许多短路径。虽然这些不同的方法在网络拓扑和训练过程中有所不同,但它们都具有一个关键特性:它们创建从靠近输入的层与靠近输出的层的短路径。

 

新结构介绍:

    密集连接卷积网络(DenseNet),它以前馈的方式将每个层与每个其它层连接起来。具有L层的传统卷积网络具有L个连接(每个层与其后续层之间),而我们的网络具有的连接个数为:L(L+1)2。对于每个层,所有先前层的特征图都被用作本层的输入,并且本层输出的特征图被用作所有后续层的输入。
    特点注意:
        不将特征通过求和合并后作为一层的输入(区别于ResNet),我们将特征串联成一个更长的特征。
    与传统方法结构上的区别:
        传统结构是一层到一层传递的,传递的信息里有的信息改变,有的信息保留。ResNet已经表明,许多的层的作用很小,实际可在训练过程中丢弃。ResNet通过它的恒等变换训练了那些作用较小的层,但也因此,ResNet的参数数量很大(每个层都有自己的权重)。因为上述原因,denseNet不用重新学习冗余特征,所以相比其他卷积神经网络需要的参数更少。


  

 
新结构的提出过程:

    1.如今网络中的层数量的扩大引起了不同网络架构之间的差异,引发了对不同连接模式的探索。
    2.从用批量梯度下降训练的全连接的级联网络的方法到通过跳连接在CNN中利用多层次特征被证明有效果。
    3.通过使用旁路与门路结构,Highway Network提出了可以有效训练100多层网络的方案。旁路是使这些非常深的网络训练变得简单的关键因素。之后的ResNet进一步支持了他的观点(恒等映射就相当于旁路的作用)
    4.Stochastic depth被提出作为一种成功地训练1202层ResNet的方式。方法是在训练期间随机丢弃一些层来改善深层ResNet的训练。从这一点我们看出深层的ResNet不是所有层都有存在的必要,有就是说,深层网络存在大量层的冗余。
    5.又有研究表明,增加网路的宽度也是一种提升网络效果的方法(Inception)。所以,只要深度足够,简单地增加每层ResNets中的卷积核数量就可以提高其性能。
    6.上述发展过程中依次出现了这几种方法:级联方式增加网络深度、跳连接(有所启发)、旁路(从而达到增加深度的目的)、增加网络宽度。
    7.DenseNet与主要的两种方法相比(增加深度与增加宽度)不同,它的做法概括的说是特征重用,它产生了更易于训练和高效利用参数的浓缩结构。与ResNet相比,DenseNet的特征图由不同层学习的特征图串联,增加了后续输入的变化并提高了效率;与Inception网络相比,它连接了不同层之间的特征,它使网络更加简单和高效。
    
新结构优点简介:
    1.它们可以减轻梯度弥散问题。每层可以直接从损失函数和原始输入信号中获取梯度,改善了整个网络中的信息流和梯度流,这就算是一种较为深入的监督了,有助于训练更深的网络。通过观察,该密集结构还有正则化效果,一定程度上减小过拟合。
    2.加强特征传播,鼓励特征重用
    3.大大减少参数数量。
    4.同时相比以往最先进的算法,可以以较小算力实现高性能。
    
新结构特点总述:
    从feature入手,通过对feature的极致利用达到更好的效果和更少的参数
    


DenseNet实现过程

    变量定义:
        考虑在一个卷积网络中传递的单独图像x0。这个网络包含L层,每层都实现了一个非线性变换Hℓ(⋅),其中ℓ表示层的索引。Hℓ(⋅)可以是诸如批量归一化(BN)、线性整流单元(ReLU)、池化(Pooling)或卷积(Conv)等操作的复合函数。我们将第ℓ层输出表示为xℓ。
    在ResNet中的表示:
        传统的前馈卷积神经网络将第ℓ层的输出作为第ℓ+1层的输入,可表示为:xℓ=Hℓ(xℓ−1)。ResNet添加了一个跳连接,即使用恒等函数跳过非线性变换:
        xℓ=Hℓ(xℓ−1)+xℓ−1
        ResNets的一个优点是梯度可以通过从后续层到先前层的恒等函数直接流动。然而,恒等函数与Hℓ的输出是通过求和组合,这可能阻碍网络中的信息流(即如果Hℓ(xℓ−1)、xℓ−1这两个特征映射有着非常不同的统计学分布,那求和组合会阻碍信息流的信息传播)。
    DenseNet的密集连接:
        第ℓ层接收所有先前图层的特征图,x0,…,xℓ−1,作为输入:
        xℓ=Hℓ([x0,x1,...,xℓ−1])
        其中[x0,x1,…,xℓ−1]表示0,…,ℓ−1层输出的特征图的串联。由于其密集的连接,我们将此网络架构称为密集卷积网络(DenseNet)。为了便于实现,我们将公式(2)中的Hℓ(⋅)的多个输入连接起来变为单张量。
    Hℓ(⋅)复合函数的设定:
        我们将Hℓ(⋅)定义为进行三个连续运算的复合函数:先批量归一化(BN),然后是线性整流单元(ReLU),最后接一个3×3的卷积(Conv)。即BN+Relu+Conv
    相邻Dense块之间的过渡层:
        BN+conv+pooling
        Hℓ(⋅)复合函数和别的方法一样,也是有固定的输入输出fm大小的,所以当特征图大小变化时,Hℓ(⋅)函数运算是不可行的。为了将各个dense block内的feature map的size统一,我们将网络分为多个密集连接的密集块,利用过渡层中的pooling来保证concatenation操作的进行;如下图(图2)所示:(一个有三个密集块的DenseNet。两个相邻块之间的层被称为过渡层,并通过卷积和池化来改变特征图大小。)

    增长率K控制的全局信息:
        k0是输入层的通道数,如果每个Hℓ函数输出k个特征图(每个H层输出fm数量一样),那么第ℓ层有k0+k×(ℓ−1)个输入特征图。DenseNet可以有非常窄的层,比如k=12(与其它网络架构的一个重要的区别),我们将超参数k称为网络的增长率。一个相对小的增长率已经足矣在我们测试的数据集上达到领先的结果。
            解释:
                每个层都可以访问其块中的所有先前的特征图,即访问网络的“集体知识”。可以将特征图视为网络的全局状态。每个层都将自己的k个特征图添加到这个状态。增长率调节每层对全局状态贡献多少新信息。这里和传统网络架构的区别是,传统网络架构的信息传递过程更接近于一种逐层复制状态。
        这里可以理解用增长率控制模型的宽度。
    利用瓶颈层降维:
        尽管每层只产生k个输出特征图,但它通常具有更多的输入。1×1的卷积层(就是所谓的bottleneck layer)可以被看作是瓶颈层,放在一个3×3的卷积层之前可以起到减少输入数量的作用,以提高计算效率。总之,瓶颈层目的是减少输入的feature map数量,既能降维减少计算量,又能融合各个通道的特征。
    压缩Fm数量进一步提高模型的紧凑性:
        为了进一步提高模型的紧凑性,我们可以在过渡层减少特征图的数量。如果密集块包含m个特征图,我们让后续的过渡层输出⌊θm⌋个特征图,其中θ为压缩因子,且0<θ≤1。当θ=1时,通过过渡层的特征图的数量保持不变。
    


数据处理过程:

    CIFAR:
        数据集增强:采用广泛应用于这两个数据集的标准数据增强方案(镜像/移位)。
        预处理:使用各通道的均值和标准偏差对数据进行归一化
    SVHN(街景数据):
        数据增强:无
        预处理:将像素值除以255,使它们在[0,1]范围内。
    IMAgeNet
        数据增强:有
        测试图片:使用尺寸为224×224的single-crop和10-crop
        


模型训练过程:

    优化器:SGD
    权重衰减:10−4
    Droupout:在除第一个之外的卷积层之后。0.2丢弃率。
    


分类测试结果:

    粗体代表超越以往最佳,蓝色代表最佳

    SVHN是一个相对容易的任务,极深的模型可能会过拟合训练集。所以250层DenseNet-BC并没有进一步改善其性能。
    结果分析:
        参数效率:
            DenseNet比其它架构(特别是ResNet)更有效地利用参数。具有压缩和瓶颈层结构的DenseNet-BC参数效率最高。例如,我们的250层模型只有15.3M个参数,但它始终优于其他模型,如FractalNet和具有超过30M个参数的Wide ResNet。还需指出的是,与1001层的预激活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的压缩和瓶颈层似乎是抑制这一趋势的有效方式。
        
        与最先进的ResNet架构的比较:
            为了确保两种架构之间的公平对比,我们采用Facebook34提供的ResNet的Torch实现来消除数据预处理和优化设置之间的所有其他因素的影响。我们只需将ResNet替换为DenseNet-BC,并保持所有实验设置与ResNet所使用的完全相同。
            错误率对比结果:

                                                                        测试分别使用了single-crop和10-crop
            参数和计算量对比:

                    在DenseNet与最先进的ResNet验证误差相当的情况下,DensNet需要的参数数量和计算量明显减少。
    


创新点分析:

    1.模型紧凑:
        DenseNet与ResNet非常相似:公式(2)与公式(1)的区别仅仅是输入被串联而不是相加。然而,这种看似小的修改导致这两种网络架构产生本质上的不同。作为输入串联的直接结果,任何DenseNet层学习的特征图可以由所有后续层访问。这有助于整个网络中的特征重用,并产生更紧凑的模型。
    2.隐性的深度监督
        密集卷积网络提高精度的一个可能的解释是,各层通过较短的连接从损失函数中接收额外的监督。可以认为DenseNet执行了一种“深度监督”。深度监督相当于每个隐藏层都附有分类器,迫使中间层去学习不同的特征。
    3.DenseNet对随机深度正则化的一种偶然有趣的解释:
        ResNet使用随机深度后(残差网络中的层被随机丢弃),性能有了提升。由于池化层不会被丢弃,随机丢失层使ResNet网络也产生了类似跳连接的效果,网络会产生与DenseNet类似的连接模式。如果所有中间层都是随机丢弃的,那么在相同的池化层之间的任何两层直接连接的概率很小,尽管这些方法最终是完全不同的,但DenseNet对随机深度的解释可以为这种正规化的成功提供线索。
    4.特征重用
        设计实验验证Dense层是否利用了先前层的特征映射。下面是三个Block中每层l对前面层S的利用权重(所连接的卷积核平均权重):

        结果分析:
            1.看每个block中的列,每层对前面层的特征都有所利用。
            2.过渡层在先前所有层的输出上更新它的权重(每个block的最后一列)。所以,说明信息不是简单的通过复制逐层传播(信息从DenseNet的第一层到最后层进通过很少的间接传播)。
            3.第二和第三密集块内的层一致地将最小的权重分配给过渡层(三角形的第一行)的输出,表明过渡层输出许多冗余特征(平均权重较小) 。这与DenseNet-BC的强大结果保持一致,其中这些输出被压缩。
            4.虽然最右边的分类层也在整个密集块中使用权重,但似乎集中在最终的特征图上,这表明最终的特征图中可能会出现更多的高级特征。

 

欢迎批评指正,讨论学习~
最近在github放了两份分类的代码,分别是用Tensorflow和Pytorch实现的,主要用于深度学习入门,学习Tensorflow和Pytorch搭建网络基本的操作。打算将各网络实现一下放入这两份代码中,有兴趣可以看一看,期待和大家一起维护更新。
代码地址:
Tensorflow实现分类网络
Pytorch实现分类网络
    
    
    
    
    
    
    
    
    
    
        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值