《Computer vision》笔记-DenseNet(8)
作者:石文华
编辑:陈人和
前 言
章节目录
密集连接机制
网络组成架构
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)
机器学习算法工程师
一个用心的公众号
进群,学习,得帮助
你的关注,我们的热度,
我们一定给你学习最大的帮助
你点的每个赞,我都认真当成了喜欢