查看原文
其他

《Computer vision》笔记-DenseNet(8)

石文华 机器学习算法工程师 2021-12-31

   作者:石文华           

编辑:陈人和           


前  言


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

章节目录

  • 密集连接机制

  • 网络组成架构

  • DenseBlock和Transition的细节

  • DenseNet的优点

  • FC-DenseNet语意分割



01

密集连接机制

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


02

网络组成架构

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


03

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)

(3)bottleneck层: 
虽然k使用较小的值,但是通过多个层不断的密集连接,最终特征图的通道数还是会比较大而造成网络计算量增大。因此在非线性变换中引入1*1的卷积来进行降维。引入1*1之后的非线性模块变为:BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv,称为DenseNet-B结构,看图:

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


04

DenseNet优点 

(1)省参数, 在 ImageNet 分类数据集上达到同样的准确率,DenseNet 所需的参数量不到 ResNet 的一半 。

(2)省计算。达到与 ResNet 相当的精度,DenseNet 所需的计算量也只有 ResNet 的一半左右。

(3)抗过拟合, 对于 DenseNet 抗过拟合的原因有一个比较直观的解释:神经网络每一层提取的特征都相当于对输入数据的一个非线性变换,而随着深度的增加,变换的复杂度也逐渐增加(更多非线性函数的复合)。相比于一般神经网络的分类器直接依赖于网络最后一层(复杂度最高)的特征,DenseNet 可以综合利用浅层复杂度低的特征,因而更容易得到一个光滑的具有更好泛化性能的决策函数。 

(4)支持特征重用,强化特征传播,有效解决梯度消失问题。



05

FC-DenseNet语意分割参考

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



参考:

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




 

END








往期回顾之作者石文华

【1】《Computer vision》笔记-MobileNet(7)

【2】《Computer vision》笔记-SqueezeNet(6)

【3】《Computer vision》笔记-Xception(5)

【4】《Computer vision》笔记-ResNet(4)

【5】《Computer vision》笔记-GoodLeNet(3)









机器学习算法工程师


                            一个用心的公众号

长按,识别,加关注

进群,学习,得帮助

你的关注,我们的热度,

我们一定给你学习最大的帮助

        


你点的每个赞,我都认真当成了喜欢








: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存