(DenseNet)Densely Connected Convolutional Networks

论文链接:https://arxiv.org/pdf/1608.06993.pdf
代码的github链接:https://github.com/liuzhuang13/DenseNet
MXNet版本代码(有ImageNet预训练模型): https://github.com/miraclewkf/DenseNet
在这里插入图片描述
文章从一个新的角度去提高卷积神经网络效果,之前两种方案一种是加深网络,ResNet使得这一方向更加可行(解决了梯度消失)一种是增加网络的宽度,增加神经元的数量。paper作者采用了另一种方案,通过对特征的深刻利用来提升效果,并且使得参数更少

Abstract

最近的研究表明,当靠近输入的层和靠近输出的层之间的连接越短,卷积神经网络就可以做得更深,精度更高且可以更加有效的训练。本文根据这一结论,提出了一种稠密卷积神经网络(Dense Convolutional Network,DenseNet),这种结构将每一层与之前所有层相连接。传统的L层卷积神经网络有L个连接——位于每一层和其后一层之间—,而我们的神经网络有L(L+1)/2个直接链接。对于每一层,其输入的特征是之前所有的层,而它自己的特征图作为之后所有层的输入。DenseNet有以下几个引人注目的优点缓解梯度消失问题,加强特征传播,鼓励特征复用,极大的减少了参数量。我们在四个极具竞争力的物体识别标准图像库(CIFAR-10,CIFAR-100, SVHN, and ImageNet)对我们所提出的结构进行测试。结果表面DenseNet在大多数的测试图像库中都获得了最好的效果,然而它只需要很少的计算两来达到很高的性能。

Dense block

在这里插入图片描述
这是一个包含5层(含input)的dense block ,x表示层,分别有x0 至x4,H表示操作,这里面,H的操作有: BN+Relu+Conv ,block最后是一个transition layer。block也就意味着当前层只为同一个block后面的层做输入进行concate操作,Resnet中类似处采取的是sum。
卷积核大小3×3,padding为1。

网络架构

在这里插入图片描述
pool操作有其自身的作用且不容忽略,为了进行pool操作而又能进行dense connectivity,作者加入了3个dense block,在连接时加入了convolution 和 pool操作。作者把这个称为Transition layer(包括BN,1×1Conv,pooling)
Growth rate
假设每一个 Hl 都产生 k个feature map,也就是同一个block之间的卷积层,尽管其输入是依次增加的,但是输出是固定不变的,也就是 k 个feature map。假设block的输入为 k0 ,那么第 l 层的输入 feature map 数量为 k0+k×(l−1)。这个 k 就称为 growth rate,很形象,就是代表后面每一层的输入会比前面相邻一层增加 k 个feature map。这是一个可以调节的超参数。

每一层的输出(比如第k层)都是网络的一种 “collective knowledge” ,也就是知识收集的过程(这是显然的),这些feature map包含了前面所有层的信息,所以它是一种全局的状态信息 global state (到第k层为止,网络前面部分的全局信息),每一层(第k层)又将自己的 k 个输出添加到下一层的输入,相当于对全局状态信息做了贡献,k 代表有多少新的信息添加到了全局状态信息中。

Bottleneck layers

前面提到 k 是一个比较小的数,比如文章使用的32,而且较小的k可以减小计算量,但是由于输入实在是太多了(越往后越多,比如当一个block包含12层时,最后一层的输入channel 可以 达到 12×32=384),所以对于计算量来说相当于拆东墙补西墙,并不会有明显减少。因此需要借助 Bottleneck layers 来减少一部分计算量。也就是在 3×3 卷积之前 添加 1×1 卷积 降低 channel 数量,1×1 卷积的输出channel为 4k 个,如果不降channel的话3×3 卷积的输入就是 k0+k×(l−1) 个。这样的话 Hl 函数就变成了:BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3) ,这个版本的DenseNet称为:DenseNet-B。

Compression

为了进一步减少计算量,提升模型的紧凑性,作者还提出了一种措施,就是减少transition layers 的channel,假设 dense block的输出 channel 是 m,那么可以让 transition layers 的channel 为 ⌊θm⌋ 0<θ≤1 ,称之为 Compression ,θ<1 时 使用这种版本的 DenseNet称为:DenseNet-C, 连同前面的 Bottleneck layers 一块使用时 称为 DenseNet-BC

论文的核心思想:对前每一层都加一个单独的 shortcut,使得任意两层网络都可以直接“沟通”。


版权声明:本文为m0_37910705原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。