merge卷积和bn层的原理

《merge卷积和bn层的原理》

  这是一个在移动端非常实用的技巧,而且丝毫不会影响模型的精度,而提高模型的运算速度,就是把BN层离线的时候做好,放在权重值和偏执项中就可以了。

Key Words:merge卷积层和BN层


Beijing, 2020

作者:RaySue

Agile Pioneer  

  为了让部署的caffe模型获得更高的推理效率,一个技巧就是合并卷积层和BN层,通过离线的对网络的权重值进行计算,来一定程度的减少计算量。

  BN层的融合即为将caffe中BN层与Scale层融合进Convolution的权重之中,把三层减少为一层,适用于训练完成的模型部署阶段,而不能用在训练中。

  假设每一层的输入均表示为X,权重为W,则卷积层可以写作
X o u t = W X i n + b              ( 1 ) X_{out} = WX_{in}+b \space\space\space\space\space\space\space\space\space\space\space\space (1) Xout=WXin+b            (1)
  BN层操作,一个是归一化(caffe的BatchNorm),另一个是平移和缩放(caffe的Scale)其中caffe的BatchNorm操作为:
X n o r m = X o u t − m e a n v a r             ( 2 ) X_{norm} = \frac{X_{out}−mean}{\sqrt{var}} \space\space\space\space\space\space\space\space\space\space\space(2) Xnorm=var Xoutmean           (2)
  caffe的BN层之后的Scale的操作是平移和缩放, 其中 α \alpha α β \beta β是通过迭代学习的:
X b n = γ × X n o r m + β              ( 3 ) X_{bn} = \gamma \times X_{norm}+\beta \space\space\space\space\space\space\space\space\space\space\space\space (3) Xbn=γ×Xnorm+β            (3)
  合并上述(1)、(2)、(3)式,即可得到:
X b n = γ × ( W X i n + b ) − m e a n v a r + β     ( 4 ) X_{bn} = \gamma \times \frac {(WX_{in}+b) - mean} {\sqrt{var}} + \beta \space\space\space (4) Xbn=γ×var (WXin+b)mean+β   (4)
  展开(4):
X b n = [ γ v a r W ] × X i n + [ γ v a r ( b − m e a n ) + β ]     ( 5 ) X_{bn} = [\frac{\gamma}{\sqrt{var}}W] \times X_{in} + [\frac{\gamma}{\sqrt{var}}(b - mean) + \beta] \space\space\space (5) Xbn=[var γW]×Xin+[var γ(bmean)+β]   (5)
  所以只需要通过训练得到的mean、var、 α \alpha α β \beta β通过如下式子修改原始的W和b即可:
W n e w = γ v a r W     W_{new} =\frac{\gamma}{\sqrt{var}}W \space\space\space Wnew=var γW   
    b n e w = γ v a r ( b − m e a n ) + β    \space\space\space b_{new}=\frac{\gamma}{\sqrt{var}}(b - mean) + \beta \space\space    bnew=var γ(bmean)+β  


  • Caffe 中的合并层
layer {
    bottom: "conv1"
    top: "conv1"
    name: "scale_conv1"
    type: "Scale"
    scale_param {
        bias_term: true // 合并后的bias_term必须为true
    }
}

参考

https://blog.csdn.net/zym19941119/article/details/84635371
https://blog.csdn.net/hjxu2016/article/details/81813535

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值