DenseNet算法详解

DenseNet算法详解

在这里插入图片描述在这里插入图片描述

二、网络结构

1. 紧密连接(Dense connectivity)

在DenseNet结构中,讲每一层的输出都导入后面的所有层,与ResNet的相加不同的是,DenseNet结构使用的是连结结构(concatenate)。这样的结构可以减少网络参数,避免ResNet中可能出现的缺点(例如某些层被选择性丢弃,信息阻塞等)。

2. 组成函数(Composite function)

Batch Normalization + ReLU + 3*3 Conv层

3. 过渡层(Transition Layer)

过渡层包含瓶颈层(bottleneck layer,即1*1卷积层)和池化层。

1)瓶颈层

1*1的卷积层用于压缩参数。每一层输出k个feature maps,理论上将每个Dense Block输出为4k个feature maps,然而实际情况中会大于这个数字。卷积层的作用是将一个Dense Block的参数压缩到4k个。

2)池化层

由于采用了Dense Connectivity结构,直接在各个层之间加入池化层是不可行的,因此采用的是Dense Block组合的方式,在各个Dense Block之间加入卷积层和池化层。

4. 增长率(Growth rate)

这里的增长率代表的是每一层输出的feature maps的厚度。ResNet,GoogleNet等网络结构中经常能见到输出厚度为上百个,其目的主要是为了提取不同的特征。但是由于DenseNet中每一层都能直接为后面网络所用,所以k被限制在一个很小的数值。

5. 压缩(Compression)

跟1*1卷积层作用类似,压缩参数。作者选择压缩率(theta)为0.5。

包含bottleneck layer的叫DenseNet-B,包含压缩层的叫DenseNet-C,两者都包含的叫DenseNet-BC。

DenseNet的一个优点是网络更窄,参数更少,很大一部分原因得益于这种密

另外作者还观察到这种dense connection有正则化的效果,因此对于过拟合有一定的抑制作用,博主认为是因为参数减少了(后面会介绍为什么参数会减少),所以过拟合现象减轻。

文章中只有两个公式,是用来阐述DenseNet和ResNet的关系,对于从原理上理解这两个网络还是非常重要的。

第一个公式是ResNet的。这里的l表示层,xl表示l层的输出,Hl表示一个非线性变换。所以对于ResNet而言,l层的输出是l-1层的输出加上对l-1层输出的非线性变换。

在这里插入图片描述

第二个公式是DenseNet的。[x0,x1,…,xl-1]表示将0到l-1层的输出feature map做concatenation。concatenation是做通道的合并,就像Inception那样。而前面resnet是做值的相加,通道数是不变的。Hl包括BN,ReLU和3*3的卷积。

在这里插入图片描述
所以从这两个公式就能看出DenseNet和ResNet在本质上的区别,太精辟。

前面的Figure 1表示的是dense block,而下面的Figure 2表示的则是一个DenseNet的结构图,在这个结构图中包含了3个dense block。作者将DenseNet分成多个dense block,原因是希望各个dense block内的feature map的size统一,这样在做concatenation就不会有size的问题。

在这里插入图片描述这个Table1就是整个网络的结构图。这个表中的k=32,k=48中的k是growth rate,表示每个dense block中每层输出的feature map个数。为了避免网络变得很宽,作者都是采用较小的k,比如32这样,作者的实验也表明小的k可以有更好的效果。根据dense block的设计,后面几层可以得到前面所有层的输入,因此concat后的输入channel还是比较大的。另外这里每个dense block的33卷积前面都包含了一个11的卷积操作,就是所谓的bottleneck layer,目的是减少输入的feature map数量,既能降维减少计算量,又能融合各个通道的特征,何乐而不为。另外作者为了进一步压缩参数,在每两个dense block之间又增加了11的卷积操作。因此在后面的实验对比中,如果你看到DenseNet-C这个网络,表示增加了这个Translation layer,该层的11卷积的输出channel默认是输入channel到一半。如果你看到DenseNet-BC这个网络,表示既有bottleneck layer,又有Translation layer。

在这里插入图片描述
**再详细说下bottleneck和transition layer操作。**在每个Dense Block中都包含很多个子结构,以DenseNet-169的Dense Block(3)为例,包含32个11和33的卷积操作,也就是第32个子结构的输入是前面31层的输出结果,每层输出的channel是32(growth rate),那么如果不做bottleneck操作,第32层的33卷积操作的输入就是3132+(上一个Dense Block的输出channel),近1000了。而加上11的卷积,代码中的11卷积的channel是growth rate4,也就是128,然后再作为33卷积的输入。这就大大减少了计算量,这就是bottleneck。至于transition layer,放在两个Dense Block中间,是因为每个Dense Block结束后的输出channel个数很多,需要用11的卷积核来降维。还是以DenseNet-169的Dense Block(3)为例,虽然第32层的33卷积输出channel只有32个(growth rate),但是紧接着还会像前面几层一样有通道的concat操作,即将第32层的输出和第32层的输入做concat,前面说过第32层的输入是1000左右的channel,所以最后每个Dense Block的输出也是1000多的channel。因此这个transition layer有个参数reduction(范围是0到1),表示将这些输出缩小到原来的多少倍,默认是0.5,这样传给下一个Dense Block的时候channel数量就会减少一半,这就是transition layer的作用。文中还用到dropout操作来随机减少分支,避免过拟合,毕竟这篇文章的连接确实多。

实验结果:

作者在不同数据集上采用的DenseNet网络会有一点不一样,比如在Imagenet数据集上,DenseNet-BC有4个dense block,但是在别的数据集上只用3个dense block。其他更多细节可以看论文3部分的Implementation Details。训练的细节和超参数的设置可以看论文4.2部分,在ImageNet数据集上测试的时候有做224*224的center crop。

Table2是在三个数据集(C10,C100,SVHN)上和其他算法的对比结果。ResNet[11]就是kaiming He的论文,对比结果一目了然。**DenseNet-BC的网络参数和相同深度的DenseNet相比确实减少了很多!参数减少除了可以节省内存,还能减少过拟合。**这里对于SVHN数据集,DenseNet-BC的结果并没有DenseNet(k=24)的效果好,作者认为原因主要是SVHN这个数据集相对简单,更深的模型容易过拟合。在表格的倒数第二个区域的三个不同深度L和k的DenseNet的对比可以看出随着L和k的增加,模型的效果是更好的。
在这里插入图片描述
Figure3是DenseNet-BC和ResNet在Imagenet数据集上的对比,左边那个图是参数复杂度和错误率的对比,你可以在相同错误率下看参数复杂度,也可以在相同参数复杂度下看错误率,提升还是很明显的!右边是flops(可以理解为计算复杂度)和错误率的对比,同样有效果。
在这里插入图片描述Figure4也很重要。左边的图表示不同类型DenseNet的参数和error对比。中间的图表示DenseNet-BC和ResNet在参数和error的对比,相同error下,DenseNet-BC的参数复杂度要小很多。右边的图也是表达DenseNet-BC-100只需要很少的参数就能达到和ResNet-1001相同的结果。

在这里插入图片描述另外提一下DenseNet和随机深度的关系,在随机深度中,残中的层在训练过程中会被随机掉掉,其实这就会使得相邻层之间直接连接,这和DenseNet是很像的。

总结:
博主读完这篇文章真的有点相见恨晚的感觉,半年前就在的arXiv上挂出来了,听说当时就引起了轰动,后来又被选为CVPR2017的口服,感觉要撼动RESNET的地位了,再加上现在很多分类检测的网络都是在RESNET上做的,这岂不是大地震了。惊讶之余来总结下这篇文章,该文章提出的DenseNet核心思想在于建立了不同层之间的连接关系,充分利用了功能,进一步减轻了梯度消失问题,加深网络不是问题,而且训练效果非常好。另外,利用瓶颈层,翻译层以及较小的增长率使得网络变窄,参数减少,有效抑制了过拟合,同时计算量也减少了.DenseNet优点很多,而且在和RESNET的对比中优势还是非常明显的。

黄高博士及刘壮取得联系两位作者对 DenseNet 的详细介绍及常见疑问解答

https://www.leiphone.com/news/201708/0MNOwwfvWiAu43WO.html

转发自https://www.jianshu.com/p/8a117f639eef

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DenseNet是一种卷积神经网络(Convolutional Neural Network, CNN)的架构,主要用于图像分类和目标检测任务。它在2017年被提出,并在ImageNet图像分类挑战赛上取得了优秀的结果。 DenseNet的核心思想是密集连接(Dense connection),不同于传统的CNN中的跳跃连接(Skip connection)。在DenseNet中,每个层都直接与所有后续层进行连接。这种密集连接的结构有助于增强信息的传递和重用,并有效地解决了梯度消失问题。 DenseNet的网络结构由多个密集块(Dense Block)组成,每个密集块包含多个卷积层。在每个密集块内部,输入特征图会被逐层地累加,这样每一层都可以直接访问前面所有层的特征图。为了减少通道数增加带来的计算量,每个密集块会使用一个过渡层(Transition Layer)进行降维。 DenseNet的优点有: 1. 参数和计算效率高:由于特征重用和密集连接的设计,DenseNet相对于其他网络使用更少的参数,并且具有更高的计算效率。 2. 梯度传播更加顺畅:由于每个层都直接连接到后续层,梯度可以更容易地传播,有助于解决梯度消失问题。 3. 提高特征表示能力:密集连接使得网络可以更好地学习到输入特征之间的相关性和非线性关系,从而提高特征表示的能力。 总结来说,DenseNet通过密集连接的设计,在图像分类和目标检测任务中取得了较好的性能。它是一种有效的卷积神经网络架构,并且在许多应用中都得到了广泛的应用和研究。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值