[关闭]
@Team 2019-03-24T08:16:40.000000Z 字数 2543 阅读 1293

《Computer vision》笔记-DenseNet(8)

石文华


1、前言:

DenseNet 是一种具有密集连接的卷积神经网络,即任何两层之间都有直接的连接,也就是说,网络每一层的输入都是前面所有层输出的并集,而该层所学习的特征图也会被直接传给其后面所有层作为输入。这种密集连接通过将特征在channel上的连接来实现特征重用(feature reuse),这让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能,DenseNet也因此斩获CVPR 2017的最佳论文奖。

2、密集连接机制:

即互相连接所有的层,具体来说就是每个层都会接受其前面所有层作为其额外的输入,在DenseNet中,每个层都会与前面所有层在channel维度上连接(concat)在一起,并作为下一层的输入。对于一个L层的网络,DenseNet共包含个L(L+1)/2个连接。DenseNet是直接concat来自不同层的特征图来实现特征重用的。
image.png-104.9kB
image.png-61.8kB

3、网络组成架构

由于密集连接的时候要求特征图大小是一致的,为了使随着网络深度的加深特征图大小降低,也就是使用pooling,使用DenseBlock和Transition两种模块来组合。DenseBlock模块里面层与层之间采用密集连接方式,Transition连接两个相邻的DenseBlock,使用Pooling降低分辨率。看图:
image.png-88.1kB

4、DenseBlock和Transition的细节

(1)非线性组合:
DenseBlock中是非线性组合函数,比如BN+ReLU+3x3 Conv结构,而且各个层的特征图大小是一致的,这样才能保证在channel维度上连接。
(2)增长率(Growth rate):
由于网络中的每一层都直接与其前面层相连,实现特征的重复利用,因此为了降低冗余性,使用了一个超参数K,用于控制每一层输出的feature maps的厚度,一般情况下使用较小的k(比如12),目的是为了把网络的每一层设计得特别「窄」,即只学习非常少的特征图(最极端情况就是每一层只学习一个特征图)。假定输入层的特征图的channel数为3,那么L层输入的channel数为3+k(L-1),因此随着层数增加,尽管k设定得较小,DenseBlock的输入会非常多,不过这是由于特征重用所造成的,每个层仅有k个特征是自己独有的。如下图所示,使用K个卷积核对(x0,x0,x2,x3)组成的特征图进行非线性变换得到通道数为K的x4,再通过x4和前面每个阶段的特征图拼接起来得到(x0,x1,x2,x3,x4)
image.png-109kB
(3)bottleneck层:
虽然k使用较小的值,但是通过多个层不断的密集连接,最终特征图的通道数还是会比较大而造成网络计算量增大。因此在非线性变换中引入1*1的卷积来进行降维。引入1*1之后的非线性模块变为:BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv,称为DenseNet-B结构,看图:

image.png-71.5kB

(4)Transition层:
Transition层也是非线性变换函数组成的模块,组合方式为:BN+ReLU+1x1 Conv+2x2 AvgPooling,既然是非线性变换组合,在这个组合中加入pooling就可以起到降低特征图大小的作用,那么它也可以通过控制输入的卷积核个数,起到进一步压缩特征图的作用,从而进一步优化模型。假设一个Denseblock中包含m个特征图,那么我们使其输出连接的transition layer层生成⌊θm⌋个输出特征图.当这里的θ取值为(0,1]时,起到压缩的作用,因此可以叫做压缩系数, 当θ=1时,transition layer将保留原feature维度不变。

5、DenseNet 的优点

(1)省参数, 在 ImageNet 分类数据集上达到同样的准确率,DenseNet 所需的参数量不到 ResNet 的一半
(2)省计算。达到与 ResNet 相当的精度,DenseNet 所需的计算量也只有 ResNet 的一半左右.
(3)抗过拟合, 对于 DenseNet 抗过拟合的原因有一个比较直观的解释:神经网络每一层提取的特征都相当于对输入数据的一个非线性变换,而随着深度的增加,变换的复杂度也逐渐增加(更多非线性函数的复合)。相比于一般神经网络的分类器直接依赖于网络最后一层(复杂度最高)的特征,DenseNet 可以综合利用浅层复杂度低的特征,因而更容易得到一个光滑的具有更好泛化性能的决策函数。
(4)支持特征重用,强化特征传播,有效解决梯度消失问题。

6、FC-DenseNet语意分割

image.png-158.6kB
由上图可以看出,全卷积 DenseNet 使用 DenseNet作为它的基础编码器,并且也以类似于 U-Net的方式,在每一层级上将编码器和解码器进行拼接。在解码阶段,将卷积操作替换为dense模块,并由transition up模块完成升采样,transition up模块使用转置卷积升采样以前的特征图,然后将升采样后的特征图连接到来自下采样过程中的dense模块的跨层连接。需要注意的是,为了解决特征图数目的线性增长问题,dense模块的输入并不连接到它的输出,转置卷积仅对最后一个dense block的特征图使用,因为最后一个dense模块包含了前面所有相同分辨率dense模块信息之和。同时引入跳层解决之前dense block特征损失的问题。网络结构如下图所示:
image.png-246.3kB

7、参考:

https://www.jianshu.com/p/8a117f639eef
https://www.sohu.com/a/161639222_114877
https://mp.weixin.qq.com/s/xhvyK26zxWNhB8XcKYZSAA
https://mp.weixin.qq.com/s/6ZDkwxm3WZDZ_jN5WEdvrQ
https://blog.csdn.net/cv_family_z/article/details/77506526

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注