欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

随记:DenseNet

程序员文章站 2024-03-15 11:00:35
...

DenseNet

论文:Densely Connected Convolutional Networks
论文链接:https://arxiv.org/pdf/1608.06993.pdf
代码的github链接:https://github.com/liuzhuang13/DenseNet

1. 介绍

DenseNet是CVPR2017年的文章,之前的ResNet(解决了随着网络深度的加深,梯度消失问题会愈加明显的问题)主要是将网络做长,Inception(可以自适应学习到各种核)主要是将网络做宽,而DenseNet则是通过对feature的极致利用达到更好的效果和更少的参数。
DenseNet网络结构图如下,在保证网络中层与层之间最大程度的信息传输条件下,直接将所有层连接起来。
随记:DenseNet

在传统的卷积神经网络中,如果你有L层,那么就有L个连接,而在DenseNet中,你将会有L(L-1)/2个连接。每一层都会输入来自前面所有层的输出。
上图只是一个dense block,而下面是一个DenseNet的结构图:
随记:DenseNet
其中各个dense block内的feature map大小需要一致,因为每次后传都需要concatenation。这也是作者分多个dense block的原因,因为分了多个才能使feature map大小有变化。

下面的Table1是整个网络的结构图。
随记:DenseNet
其中,k=32,k=48中的k是growth rate,表示输出feature map的个数。DenseNet-121中121是层的个数(卷积层+全连接层),在这里就是(6+12+24+16)*2+1(7*7conv)+3(Translation layer)+1(fc)=121.

  • 根据dense block的设计,后面几层可以得到前面所有层的输入,因此concat后的输入channel还是比较大的。
  • 每个dense block的3*3卷积前面都包含了一个1*1的卷积操作,就是所谓的bottleneck layer,目的是减少输入的feature map数量,`既能降维减少计算量,又能融合各个通道的特征。
  • 为了进一步压缩参数,在每两个dense block之间又增加了1*1的卷积操作。称为Translation layer。

如果你看到DenseNet-C这个网络,表示增加了这个Translation layer,该层的1*1卷积的输出channel默认是输入channel到一半。如果你看到DenseNet-BC这个网络,表示既有bottleneck layer,又有Translation layer。

2. 与ResNet对比

公式上:
ResNet的:
随记:DenseNet
这里的l表示层,x_l表示l层的输出,H_l表示一个非线性变换。所以对于ResNet而言,l层的输出是l-1层的输出加上对l-1层输出的非线性变换
DenseNet的:
随记:DenseNet
[x0,x1,…,xl-1]表示将0到l-1层的输出feature map做concatenation。concatenation是做通道的合并,就像Inception那样。而前面resnet是做值的相加,通道数是不变的。H_l包括BN,ReLU和3*3的卷积。
性能上:
随记:DenseNet

3. 优点

核心是:每一层都会和前面所有层相连,每一层的feature map size 变小,这样的网络结构使得网络更窄,参数更少了,因为加上dense block 之后,每个卷积层的输出feature map数量都很小(小于100),有减轻过拟合的现象;同时这样的连接使得特征和梯度传递更加有效,训练也就方便了。
前面提到过梯度消失问题在网络深度越深的时候越容易出现,原因就是输入信息和梯度信息在很多层之间传递导致的,而现在这种dense connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深网络不是问题。

列下DenseNet的几个优点,感受下它的强大: 
1、减轻了vanishing-gradient(梯度消失) 
2、加强了feature的传递,更有效地利用feature 
3、一定程度上较少了参数数量

【参考】https://blog.csdn.net/u014380165/article/details/75142664

相关标签: DL