caffe中bn层与scale层(还有卷积通道融合的一些解释)

版权声明:如需转载请注明出处,谢谢 https://blog.csdn.net/qinglv1/article/details/86591130

      该文章大部分来自转载,里面也有自己的一些总结整理,如有不对,可以联系我,谢谢

       卷积层默认是开启卷积层的偏置项的,一般情况下,也都是让他开启着,一般学习得到的也就是权重w和偏置b。在卷积之后得到的数值的来源:wx+b。

        而且卷积可以增加通道之间的融合/交流,比如senet就是这样增加通道之间的融合,也就是channel attention,全局平局池化的作用其实是将一个特征图压缩为一个数值,几个特征图就是截实数值,这就是senet里面的压缩的概念,其实就是对于不同的通道给一个指定的权重,然后区分重要性。引用某个文章里面的话

        对于senet的解析(引用来自链接https://blog.csdn.net/evan123mg/article/details/80058077 ,详细内容请看原文)(1)首先是 Squeeze 操作,顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野,这一点在很多任务中都是非常有用的。 (2) 其次是 Excitation 操作,它是一个类似于循环神经网络中门的机制。通过参数 w 来为每个特征通道生成权重,其中参数 w 被学习用来显式地建模特征通道间的相关性。(3)最后是一个 Reweight 的操作,将 Excitation 的输出的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。这里我们使用 global average pooling 作为 Squeeze 操作。(4)紧接着两个 Fully Connected 层组成一个 Bottleneck 结构去建模通道间的相关性,并输出和输入特征同样数目的权重。我们首先将特征维度降低到输入的 1/16,然后经过 ReLu 激活后再通过一个 Fully Connected 层升回到原来的维度(这个使用1*1卷积进行操作的,具体对于1*1卷积的操作:一般来讲,1*1卷积核的参数量很少,对于减少参数量来说是一个不错的选择,毕竟网络的参数越多,容量越大,越难训练;而且经常使用它做升维降维,比如channel=128,经过1*1卷积后channel=512,只用了128*512个参数,但是网络宽度增加了四倍。另外,1*1卷积可以代替全连接层,事实证明效果还不错来自链接https://www.zhihu.com/question/270007987/answer/353777954)。这样做比直接用一个 Fully Connected 层的好处在于:1)具有更多的非线性,可以更好地拟合通道间复杂的相关性;2)极大地减少了参数量和计算量。然后通过一个 Sigmoid 的门获得 0~1 之间归一化的权重,最后通过一个 Scale 的操作来将归一化后的权重加权到每个通道的特征上。

       卷积本身就有提取spatial attention的能力,比如文章《Residual Attention Network for Image Classification》,只是相当于增加了网络的深度,而且各种卷积反卷积的操作下来,也就是相当于提取了对应的高层语义。之前的文章如果后面跟着bn层,一般就不需要偏置参数了bias_term: false。

以下转自:https://zhidao.baidu.com/question/621624946902864092.html

caffe 中为什么bn层要和scale层一起使用

这个问题首先你要理解batchnormal是做什么的。它其实做了两件事。
1) 输入归一化 x_norm = (x-u)/std, 其中u和std是个累计计算的均值和方差。
2)y=alpha×x_norm + beta,对归一化后的x进行比例缩放和位移。其中alpha和beta是通过迭代学习的。
那么caffe中的bn层其实只做了第一件事。scale层做了第二件事。
这样你也就理解了scale层里为什么要设置bias_term=True,这个偏置就对应2)件事里的beta。
 
注意:
BN与Scale是对数据进行了归一化,
在超分辨率领域,对图像使用BN层的话,如果只针对单一X2或者X3或者X4倍分辨率时候,不使用BN层效果更好,如果数据集中同时包含x2,x3,x4倍分辨率数据,那么加上BN层效果更好
在跨数据域数据转换中,从A域到B域,一定要将A域的BN与Scale的学习率置为0

猜你喜欢

转载自blog.csdn.net/qinglv1/article/details/86591130