zoukankan      html  css  js  c++  java
  • 论文笔记《Densely Connected Convolutional Networks》

    DenseNet:CVPR2017 Best Paper,引用次数已超1w次

    paper:https://arxiv.org/abs/1608.06993v5

    code:https://github.com/liuzhuang13/DenseNet

    Abstract

    作者发现如果卷积网络在靠近输入的层和靠近输出的层之间包含较短的连接,则可以进行更深入,更准确和有效的训练。 在本文中,作者接受了这一现象,并介绍了密集卷积网络(DenseNet),该网络以前馈方式将每一层连接到其他每一层。 具有L层的传统卷积网络具有L个连接(每一层与其后一层之间有一个连接),而我们的网络具有L(L+1)/2 个直接连接。 对于每一层,所有先前层的特征图都用作输入,而其自身的特征图则用作所有后续层的输入。  DenseNets具有几个引人注目的优点:它们减轻了消失梯度的问题,增强了特征传播,鼓励了特征重用,并大大减少了参数数量。 本文在四个竞争激烈的对象识别基准测试任务(CIFAR-10,CIFAR-100,SVHN和ImageNet)上评估该结构,发现DenseNet在大多数方面都比最新技术有了显着改进,同时只需要较少的计算来实现高性能。

    Introduction

    随着CNN深度不断地增加,从最初5层的LeNet5到超过100层的ResNet,出现了新的问题,在于随着信息或梯度穿过很多层,他会在靠近末端时信息消失,最近的一些别的工作也都致力于解决这一问题,它们都具有一个关键特征在于创建了早期层到后期层的短路径。

    本文中所提出的架构将这种见解提炼为简单的连接模式,将所有层都直接相互连接,为保留前馈特性,每一层都从先前的层获取其他输入,并将自身特征图传递给后续所有层。与ResNet相比,永远都不会在特征传递到层之前通过求和来组合特征,而是采用concatenate的方法来组合特征,所以第l层具有l个输入,包括之前所有的卷积层,他自己的特征图传给后续所有L-l层,所以在L层的网络中共包含L(L+1)/2个连接。

    一个反直觉的效应是,相比于传统卷积网络这种密集连接模式需要的参数更少,因为它没有必要重新学习冗余的特征图。传统的前馈结构可以看作一种状态算法,这种状态从一层传到下一层,每一层从它的前一层读取状态,并写入到后面的层。虽然这种方式改变了状态,但是传递了需要保留的信息。ResNet通过加性标识转换达到了使信息显式保持的目的。ResNet的参数量大很多,因为每一层都有自己的权重。我们提出的DenseNet结构将加到网络上的信息和需要保留的信息进行了明确的区分。DenseNet层非常窄(例如,每层只有12个滤波器),仅向网路的“集体知识”("collective knowledge")中添加一小部分特征图并保持其余的特征图保持不变,最终的分类器基于网络中所有的特征图进行决策。

    DenseNet的另外一大优点是其在整个网络中不断改进的信息和梯度流,这使得它们更容易训练。每一层都能直接从损失函数和原始输入信号中获得梯度,这有助于训练更深层次的网络架构。此外,我们发现密集连接有一种正则化的效果,这有助于减小在小规模数据集上的任务的过拟合问题。

    DenseNets

    考虑一个通过神经网络的单个图片,包括L层,每层包括一个非线性的变换函数Hl(),第l层的输出记为xl.
    ResNets 传统的前馈网络将第l层的输出作为输入连接到 l+1 层,引起下层变换: ResNet增加了一个skip-connection跳过了非线性变换:。ResNets的优点是,梯度可以直接通过该函数从后面的层流到前面的层。 但是,身份函数和Hl的输出通过求和相结合,这可能会阻碍网络中的信息流。

    Dense connectivity  第l层接受之前所有层的特征图作为输入:,代表着之前所有层的concatenation

    Composite function BN - ReLU - 3x3 convolution

    Pooling layer 当feature map的大小更改时之前的串联操作就不可行,在卷积网络中一个很重要的部分就在于下采样来改变feature map的特征图,为了方便在结构中进行下采样我们将网络划分为多个密集连接块,我们将块之间的层成为 transition layer,它们进行卷积和池化,实验中所使用的transition layer包括BN,1x1卷积和2x2平均池化,如图:

    Growth rate 如果每个函数Hl生成k个feature map,则第l层具有k0+k*(l-1)个输入特征图,其中k0是输入层中的通道数,DenseNet与现有的网络之间的重要区别在于DenseNet可以具有非常狭窄的层,例如k=12,我们将超参数k成为网络的增长率,我们在下面文章中可以看到一个相对较小的growth rate适合于在我们测试的数据集上获得较好的结果。对此的一个解释在于每一层都可以访问其块中先前所有的feature map,可以将feature map视为网络的全局状态,每一层将自己的k个feature map添加到此状态中,增长率调节每一层能给全局的状态新产生多少信息。全局状态一旦被写入就可以在网络中任何地方获取到,并不像传统网络结构,在每一层之间无需复制。

    Bottleneck layers 尽管每一层只产生k个输出的feature map,他还是有很多的输入,在每个3x3卷积前引入1x1卷积作为瓶颈层可以减少输入特征图的数量,从而可以提高计算效率。

    Compression 为了进一步提高模型的紧凑性,我们可以在transition layer减少特征图的数量。如果一个密集块包含m个特征图,我们让其后的过渡层产生θm个输出feature map,θ为压缩参数,当θ=1时意味着feature-map的数量保持不变,如果小于1,我们成为DenseNet-C,在实验中设置为0.5,当同时使用bottleneck和过渡层θ<1时,我们称为DenseNet-BC。

    Implementation Details 在除ImageNet之外的所有数据集上,我们的实验中使用的DenseNet具有三个dense blocks,每个密集块具有相等的层数。 在进入第一个密集块之前,对输入图像执行16个卷积(或DenseNet-BC增长率的两倍)的卷积。 对于内核大小为3×3的卷积层,输入的每一侧都用一个像素zero-padding,以保持特征图的大小固定。 我们使用1×1卷积,然后使用2×2平均池作为两个连续密集块之间的过渡层。 在最后一个密集块的末尾,执行全局平均池化,然后附加softmax分类器。 三个密集块中的特征图大小分别为32×32、16×16和8×8。 我们使用配置{L = 40,k = 12},{L = 100,k = 12}和{L = 100,k = 24}的基本DenseNet结构进行实验。 对于DenseNetBC,评估配置为{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上使用的确切网络配置。

    Experiments

    三种数据集分别为CIFAR SVHN ImageNet

     Training 都使用SGD训练,在CIFAR和SVHN上用batch大小为64分别训练300和40个epoch,最初学习率的设定为0.1,在epoch的50%和75%处分别减少一半,在ImageNet上用batch大小为256的训练90个epoch,在30和60个epoch时将学习率从0.1降低十倍。

    Results

    Conclusion

    本文提出了一个系的卷积网络架构,它在任意两层相同的feature map上直接连接。我们证明了DenseNets自然可以扩展到数百个层,而没有出现优化困难。 在我们的实验中,DenseNets倾向于随着参数数量的增加而不断提高精度,而没有任何性能下降或过度拟合的迹象。 在多种设置下,它在几个竞争激烈的数据集上均取得了最先进的结果。 此外,DenseNets需要更少的参数和更少的计算来实现最新性能。 由于我们在研究中采用了针对残差网络优化的超参数设置,因此我们相信,通过更详细地调整超参数和学习速率计划,可以进一步提高DenseNets的准确性。

    遵循简单的连接规则,DenseNets自然地集成了身份映射,深度监控和多样化深度的属性。 它们允许在整个网络中重用特征,从而可以学习更紧凑的模型,并且根据我们的实验,可以更精确地学习模型。 由于其紧凑的内部表示形式和减少的功能冗余,DenseNets可能是基于卷积特征的各种计算机视觉任务的良好特征提取器。 我们计划在以后的工作中使用DenseNets研究这种功能转移。


    最后总结一下这个网络结构:
    网络划分为block,只有每个block的内部是紧密连接的,composite function也就是图中的H1,H2,这里的操作包括BN,ReLU,3x3 conv,最主要的还是将每一层的feature map给concentrate起来传下去,在channel维度上进行concentrate,每一层均输出k个特征图,也就是特征图channel数为k,称为growth rate,如果k太大就会造成数据量特别大,图中k=4,利用bottleneck layer的原因在于每层产生k个feature map还是数据量太大,所以就采用了1x1的卷积得到4k个feature map,其作用就在于降低特征数,提升效率。
    CNN网络一般要经过Pooling或者stride>1的Conv来降低特征图的大小,而DenseNet的密集连接方式需要特征图大小保持一致。为了解决这个问题,DenseNet网络中使用DenseBlock+Transition的结构,其中DenseBlock是包含很多层的模块,每个层的特征图大小相同,层与层之间采用密集连接方式。而Transition模块是连接两个DenseBlock,并且通过Pooling使特征图大小降低。
     
    参考:
    https://www.jianshu.com/p/08a2a1f2a814
    https://blog.csdn.net/u011995719/article/details/76687476
    https://blog.csdn.net/xiaohu2022/article/details/85560788
  • 相关阅读:
    【转】嵌入式软件:C语言编码规范
    【转】如何建立编码规范?
    RAS使用拨号网络拨号的类
    UDP 通讯代码
    【转】heap与stack的区别
    关于textarea在safari chrome下可拖动大小的问题
    Java网络编程入门
    诺基亚发布了它的第一台android手机,x和x+机型
    Spring学习笔记之入门(二)
    Spring学习笔记之入门(一)
  • 原文地址:https://www.cnblogs.com/liuyangcode/p/13711003.html
Copyright © 2011-2022 走看看