【网络结构】DenseNet

概述

在ResNet之后,骨干网络的结构有两种趋势,一种是更深,另一种是更宽。
而DenseNet则不是,它在ResNet的short-path的基础上提出了一种稠密卷积的思想,进一步缓解了梯度消失的问题,加强了特征提取、特征重用的效果,并且显著减少了参数量,同时最终模型的尺寸也比较小。
在每一个稠密卷积块中,它的输入是前面所有层的输出进行concat之后的结果,它的输出同样会作用到后面的所有层。这样一来,信息或者梯度的流通就非常通畅了,一方面使得网络更容易训练,另一方面也使得网络达到非常好的特征提取的作用。
下图是一个dense block模块,层数是5,网络增长率是4,也就是每层的输出通道数是4。
在这里插入图片描述
其中有两点,第一点是稠密卷积块中的特征融合采用的是concat的方式而ResNet采用的是相加的方式。传统的前馈神经网络的结构可以看成是有状态的算法,每一层从其前一层读取状态并写入下一层,这个过程会改变状态,但也传递了需要保留的信息,ResNet使用的恒等映射则使这种信息的表示更加明确了,但是会阻碍网络的信息流。所以DenseNet使用concat的方式,进一步区分了添加到网络的信息和保留的信息,并且不阻碍信息流;第二点是同ResNet类似,由于众多的short-path,使得网络不需要学习原有的映射,转而在已知信息上的偏移就可以了,使得网络能够更好的训练起来。(作者的观点是使得梯度的流动更加通畅)并且DenseNet具有一部分正则化的效果。第三点DenseNet看着复杂,但是参数量相对而言会少很多哟。因为如下图所示:
在这里插入图片描述

细节

网络结构

以DenseNet用于图片分类为例,主要包括核心的dense blocks和dense blocks之间的transition layers,
在这里插入图片描述

dense blocks

如果我们把输入图片记为 x 0 x_0 x0,第 l l l层的输出是 x l x_{l} xl,每一个稠密卷积块经过的变换记为 H l ( ) H_{l}() Hl(),这里的 l l l是层数。
那么传统的前馈神经网络就是 x l = H l ( x l − 1 ) x_{l}=H_{l}(x_{l-1}) xl=Hl(xl1),ResNet是 x l = H l ( x l − 1 ) + x l − 1 x_{l}=H_{l}(x_{l-1})+x_{l-1} xl=Hl(xl1)+xl1,而DenseNet就是 x l = H l ( [ x 0 , x 1 , , , x l − 1 ] ) x_{l}=H_{l}([x_{0},x_{1},,,x_{l-1}]) xl=Hl([x0,x1,,,xl1])这里的 [ ] [] []代表concat操作。
这个 H l ( ) H_{l}() Hl()在基础版本中是BN+ReLu+3x3卷积,
而在DenseNet-B中则是BN+ReLu+1x1卷积+BN+ReLu+3x3卷积,并且1x1卷积的输出通道是4k;

transition layers

当前部分包括BN+1x1卷积+2x2的平均池化。这里的1x1在最初的的DenseNet中是不改变通道数的,而在DenseNet-BC中则是会改变的,DenseNet-BC是在DenseNet-B的基础上加入了这个压缩的操作。假设dense block的输出通道是 m m m,经过 transition layers之后变为 θ m \theta m θm,这个 θ \theta θ也称为压缩因子。
这个部分主要是为了减少计算量,毕竟要是没有这一环节的话,尺寸是不会变化的,并且输入数据的通道数会很多很多,以为图片的通道数为 k 0 k_0 k0,每个稠密卷积块的输出为 k k k那么第 l l l层的输入通道数就是 k 0 + k ∗ ( k − 1 ) k_{0}+k*(k-1) k0+k(k1) l l l很大的话,做3x3的卷积是计算量很大的。然后看这个式子我么能发现,通道数是和 k k k成正相关的,因此我们又把 k k k称为增长率,这是个超参数。

总结

三个版本的DenseNet

原始DenseNet:

Dense Block模块:BN+Relu+Conv(3*3)

transition layer模块:BN+Relu+Conv(11)(filternum:m)+dropout+Pooling(22)

DenseNet-B:

Dense Block模块:BN+Relu+Conv(11)(filternum:4K)+BN+Relu+Conv(33)

transition layer模块:BN+Relu+Conv(11)(filternum:m)+Pooling(22)

DenseNet-BC:

Dense Block模块:BN+Relu+Conv(11)(filternum:4K)+BN+Relu+Conv(33)

transition layer模块:BN+Relu+Conv(11)(filternum:θm,其中0<θ<1,文章取θ=0.5)+Pooling(22)

其中,DenseNet-B在原始DenseNet的基础上,在Dense Block模块中加入了1*1卷积,使得将每一个layer输入的feature map都降为到4k的维度,大大的减少了计算量。

DenseNet-BC在DenseNet-B的基础上,在transitionlayer模块中加入了压缩率θ参数,论文中将θ设置为0.5,这样通过1*1卷积,将上一个Dense Block模块的输出feature map维度减少一半。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值