DenseNet论文学习笔记

DenseNet:Densely Connected Convolutional Networks

目录

[TOC]
说明:文章中的图来自于论文中

一、文章内容摘要

通过以前网络的发展观察出,高精度来源于不同级别的语义理解(也就是前后层的共同作用),然而起初的传统网络使用后面高语义层进行预测,而忽略了低语义层的作用。本文设计了一种Dense连接结构的网络,将网络中每一层与前面所有层进行链接( L(L+1)2 L ( L + 1 ) 2 个连接)。这种DenseNet的好处有:
1)缓解梯度消失的问题
2)增强了特征的传播
3)很强的特征重用
4)减小网络参数数目**
DenseNet block图

二 、文章简介

1. 从其他论文得到启发

Stochastic depth(随机缩减ResNet的层)以及FractalNet 的共同特点中得出,从前层到后层的short path是很有效的,激发了该论文的这种设计,这种设计确保最大的信息流传向后面(因为pooling层等这种下采样的层存在,每经过pooling层会有信息的丢失)

2. 不同的链接方式(add和concatenate)

对比与ResNet,DenseNet的每个短路实现的是前后两层进行concatenate操作,而不是ResNet的add(summation)操作。

3. 对DenseNet进行分析

1) DenseNet存在一个反直觉的特性——需要更少的参数,因为大量的特征图的重用,不必学习冗余的特征图。
2)传统前向网络,每一层接收数据,将一些信息保留到后层。而ResNet实现显性地保留特征到后面层。而根据Stochastic depth 发现,Resnet中很多层贡献很小,可以在训练过程中被裁掉。
3)DenseNet网络也显性地保留了更多的特征流向后面。
4)DenseNet很窄,每层只有12个filters
5) DenseNet的一个很大的优势是,提高信息流和梯度传播效率。
6) 由于每一层都连接最前层和最后面层,则最初信号和最初梯度都能收到,则内含有隐式的深度监督
7) 有规范化的效果——减小过拟合

三、相关工作 (扩展阅读)

1) 一些网络结构探索论文

2) 一些skip connection论文

3)concat链接模式论文

  • Inception

4) 半监督方向的网络结构

5) 其他方面的相关研究

四、DenseNet的具体设计

1. ResNet与DensNet对比

1)skip-connection 的公式表达

ResNetDenseNet
xl=Hl(xl1)+xl1 x l = H l ( x l − 1 ) + x l − 1 xl=Hl([x0,x1...xl1]) x l = H l ( [ x 0 , x 1 . . . x l − 1 ] )
add链接方式(可能妨碍信息流)concatenate链接方式

2. 一些层的设计

1) 混合层设计
由论文[Identity mapping][11] 激发的设计,将上面讲的 Hl H l 定义为【BN-ReLU-conv_3x3】
2)transition layer的设计
因为DenseNet是要前面所有层与后面链接,又卷积神经网络中存在下采样pooling层,使得后面层fmaps的大小与前面的层不同,因而我们需要将这种密集连接的结构分成多个block,每个block中使用Dense连接且fmaps大小相同,然后多个block组成一个DenseNet网络,每个block之间用transition layer连接(实现pooling下采样作用),如下图所示:
DenseNet实现结构
transition Layer的组成: BN—conv_1x1—pool_avg_2x2
3)Bottleneck层设计
由于1x1卷积对fmaps的大小有缩减的作用,因此在设计block时,可以设计为
BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3) DenseNet-B结构

3. Growth rate设计

假设每个 Hl H l 有一个k个fmaps, 那么 lth l t h 会有 k0+k×(l1) k 0 + k × ( l − 1 ) 个输入fmaps。则超参数k就是Growth rate。k=12。由于每层输出为k个fmaps,则k的多少表示每层贡献全局状态多少新的信息。
block

4. DenseNet的三个变形结构设计

几个DenseNet的内部设计结构变种
1)DenseNet:BN-ReLU-conv_3x3
2)DenseNet-B: BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3) ,用1x1卷积降低fmaps厚度,如下所示,先用1x1卷积将输入channels-转化为4*growthRate, 然后在将channel大小为4*growthRate变成growthRate;最后的输出是原始x的channel + growthRate大小,所以没经过一个block, channel数目增加一个growthRate。

class Bottleneck(nn.Module):
    def __init__(self, nChannels, growthRate):
        super(Bottleneck, self).__init__()
        interChannels = 4*growthRate
        self.bn1 = nn.BatchNorm2d(nChannels)
        self.conv1 = nn.Conv2d(nChannels, interChannels, kernel_size=1,
                               bias=False)
        self.bn2 = nn.BatchNorm2d(interChannels)
        self.conv2 = nn.Conv2d(interChannels, growthRate, kernel_size=3,
                               padding=1, bias=False)

    def forward(self, x):
        out = self.conv1(F.relu(self.bn1(x)))
        out = self.conv2(F.relu(self.bn2(out)))
        out = torch.cat((x, out), 1)
        return out

3)为了进一步压缩DenseNet,论文选择再transition layer层压缩fmaps的厚度,通过添加一个因子 0<θ<=1 0 < θ <= 1 ,当transition layer 的输入为m时,将输出 θm θ m fmaps。 带有这个结构设计的DenseNet为DenseNet-C
4) DenseNet-BC:带有DenseNet-B和DenseNet-C设计结构的DenseNet。
具体结构设计:
具体设计细节

五、实验集结果分析(一些分析结论很好)

实验结果显示对比:
实验结果
1)观察分析1: 可以发现250层的DenseNet-BC并没有比对应的shorter counterpart进一步的性能提升在SVHN任务上,可能解释为SVHN任务相对比较简单,大的网络可能导致了过拟合。
2)观察分析2: 与resnet结果进行对比发现,DenseNet使用很少的参数达到了很好的结果,说明它有更好的预防过拟合以及网络参数训练方便的特性。
因为DenseNet充分利用了参数,则有减少过拟合的能力。
通过下面与ResNet的对比图,从参数量和计算flops方面进行对比,可以看出DenseNet的优势很明显:
与ResNet对比
DenseNet,Resnet对比

六、讨论(有些图示方法值得学习)

该部分主要讨论DenseNet的一些特性:
1)网络压缩特性:因为实现了特征重用,所以模型更加小,性能更高
2)隐含着 深度监督特性: 这种深度监督特性具有强迫中间层学习具有辨别力的特征(因为它连接前后的层)。
3)DenseNet对Stochastic depth之间存在一些关联,可解释这种densenet连接的有效性
4)特征重用:
下面图用于说明DenseNet这种一个层与前面所有层连接的方式的好处:
该图给出了每个block中的一层 l l 与前面所有层s 的权重绝对值的平均( L1norm L 1 n o r m )。
下图是一个heat-map视图,( l l ,s)位置的红色点表示 l l 层与 s 层的强链接(平均上更多地依赖于 s s <script type="math/tex" id="MathJax-Element-17">s</script>输出)。
学习这种图示方法,能够很好地观察不同层之间的依赖关系
filter观察图
1)观察1: 一个block中前面层的所有特征应被用在后面的所有层。
2)观察2: 有几个transition layer,则 DenseNet就有几个间接连接层次。因为每个transition layer都与前面block的所有层连接,也就是与上一个transition layer的输出连接。
3)观察3: 通过图中观察发现,上面几行的值比较小,表明transition layer输出很多冗余的特征(平均值比较低)。这就是为什么DenseNet-BC更有效的证明,因为在transition layer前面执行了fmaps的压缩,避免transition layer输出冗余。
4)观察4: 按列进行观察发现,越往下颜色越偏红,也就是值越来越多;则说明transition layer或者classifier layer对block中的后面层依赖大于block前面层,这说明一个block的后面层产生了更高级(抽象)的特征。

七、总结

这篇论文主要利用了short path的作用,联合了低级和高级特征,增强了网络中的信息流——可以与ResNet对比着看
DenseNet的一些优势:
1)与ResNet对比,更少的特征就能达到resnet的性能,且short path链接模式不同,DenseNet使用的是concat链接,而ResNet使用add链接。
2)由于参数重用性大,所以防止一定的过拟合
3)DenseNet每个block中使用Dense链接,而不是整个网络使用Dense链接
4)DenseNet还隐含着深度监督特性
5)由于dense链接存在,减缓了梯度消失问题,增强了信息的传播。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值