您的位置:首页 > 其它

【深度学习】入门理解ResNet和他的小姨子们(二)---DenseNet

2017-10-06 16:50 447 查看
文章名称:《Densely Connected Convolutional Networks》

论文链接:https://arxiv.org/abs/1608.06993

代码链接:https://github.com/liuzhuang13/DenseNet

这篇文章厉害了,继He Kaiming的ResNet(2015)之后,又一篇让人惊艳的文章。毕竟是CVPR2017的best paper,含金量可想而知。目前而言,一般网络无非是通过deeper,亦或者是wider来增强网络性能,而这篇文章则主要在feature上做文章,很有意思。

在上一篇文章中,传送门:【深度学习】入门理解ResNet和他的小姨子们–ResNet

我简单介绍了ResNet, 通过shortcut连接可以有效使得网络更加deeper,且不会出现像plainNet那样的degradation现象出现。那么在这篇文章中,先看看DenseNet究竟有什么优点

1)有效减轻梯度弥散问题

2)增强特征传播

3)鼓励特征复用

4)更少的参数量

在近些年中,深度网络逐渐往deeper的方向走,但是deeper会带来特征在正向传播中的消失和梯度在反向传播中的弥散。近来的工作也开始处理这些相关问题。

比如ResNet和HighwayNet通过identity connection使得signal进行流动。Stochastic depth则通过类似于dropout的方法对ResNet进行随机失活。FractalNets重复结合多个平行层序列组合以获得较大的标称深度,并同时在网络中保留着不少的short paths。其实他们都有一个关键的特性就是创造short cut来连接layer与layer之间。

作者在这篇文章依然保持着ShortCut,然而却做了一个疯狂的举动—把所有layers都连接起来了。也就是下图这个样子。

然而跟ResNet不同的是,在作者的DenseNet中,作者并不准备通过summation来连接layers,而是通过concatenating将这些features进行连接起来。

In this paper, we propose an architecture that distills this insight into a simple connectivity pattern: to ensure maximum information flow between layers in the network, we connect all layers (with matching feature-map sizes) directly with each other



这么设计其实有个反直觉的好处,那就是参数量可以减少。原因是因为每个layer其实都相当于一个state,signal经过这个layer则改变这个state并将其传播到下一个state。ResNet显式的保存了上一个layer的state并传给了下一个layer可以有效改善网络的accuracy。这意味着一些feature可以被重复利用。但是今年来的一些ResNet变体则发现随机drop掉一些resblock并不会降低多少accuracy,这意味着一些Resblock并没有学习到多少有用的东西,而主要通过shortCut将上一个state进行传递而已。

还一个好处就是信息可以多方向的往下传,而梯度则可以多方向的反向传,这会使得整个网络更加容易训练。

DenseNet结构

先回顾一下ResNet的结构



An advantage of ResNets is that the gradient can flow directly through the identity function from later layers to the earlier layers. However, the identity function and the output of H‘ are combined by summation, which may impede the information flow in the network



1. Dense connectivity

下面这个公式很清晰,也就是在函数H(.)之前将所有feature map进行投入,可以跟之前的ResNet的输出函数进行对比。即可发现summation和concatenating之间的区别。



2. Hl(.)指的是复合函数,包含BN, relu, 3X3conv



3. Pooling

由于在deep Network中有个重要的环节就是pooling,pooling会导致特征map尺寸的变化,导致不能进行concatenating。ResNet当时给出了几种处理方法,1)补零,2)projection connect。在DenseNet中,按照pooling划分,在每个区域中进行dense connect。

4. Growth rate.

grow rate也就是H(.)函数产生的feature map的数目。



由于DenseNet鼓励特征复用,所以在一定程度上,少数量的feature map便可以达到很好的效果。

5. Bottleneck layers.

虽然每个layer只产生k个feature maps,但是对每个layer的输入还是太多了。在之前的grow rate中,我们就用一个公式进行表示过输入feature maps的数量:k0 + k x (L-1)。于是文章类似于ResNet进行引入1x1卷积核进行降维,从而降低计算复杂度。那么第二种DenseNet的Hl(.)模型便表示如下:

BN-ReLu-Conv(1x1)-BN-ReLu-Conv(3x3).

并将该模型重新命名为DenseNet-B

Note:在本实验中,我们将1x1卷积的固定输出在4k feature-maps。其中k则为上面的grow rate。

5. Compression.

在前面的bottleneck layers设计的时候,我们降低了每个layer的输入,但是我们仍然可以在transition layers进行降低feature map的数量。

If a dense block contains m feature-maps, we let the following transition layer generate bθmc output featuremaps, where 0 <θ ≤1 is referred to as the compression factor.

也就是说如果theta = 1时候,则不进行压缩,theta<1的时候便进行压缩。当采用bottleneck layer和compression设计的模型,我们将其命名为DenseNet-BC。在本文中,作者选取theta = 0.5。

好了,到目前为止,DenseNet的Novel应该介绍完了,接下来来看在该文章中的DenseNet的实施细节。

Implementation Details.

在ImageNet实验中,作者选取了4个dense block,初始卷积(在进入第一个denseblock之前)选取了7x7的卷积with stride 2,且其输出为2k output,k为grow rate

In our experiments on ImageNet, we use a DenseNet-BC structure with 4

dense blocks on 224×224 input images. The initial convolution layer

comprises 2k convolutions of size 7×7 with stride 2; the number of

feature-maps in all other layers also follow from setting k.



Experience Details.



系列文章:

【深度学习】入门理解ResNet和他的小姨子们(一)—ResNet

http://blog.csdn.net/shwan_ma/article/details/78165966

【深度学习】入门理解ResNet和他的小姨子们(二)—DenseNet

http://blog.csdn.net/shwan_ma/article/details/78165966

【深度学习】入门理解ResNet和他的小姨子们(三)—ResNeXt

http://blog.csdn.net/shwan_ma/article/details/78203020

【深度学习】入门理解ResNet和他的小姨子们(四)—WideResNet

http://blog.csdn.net/shwan_ma/article/details/78168629

【深度学习】入门理解ResNet和他的小姨子们(五)—ResNet增强版

http://blog.csdn.net/shwan_ma/article/details/78595937
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  深度学习