卷积层和BN层融合

常规的神经网络连接结构如下

屏幕快照 2018-08-27 下午4.43.56-w171

当网络训练完成, 在推导的时候为了加速运算, 通常将卷积层和 batch-norm 层融合, 原理如下

\[\begin{align*} y_{conv} &= w \cdot x + b \\ y_{bn} &= \gamma \cdot \left (\frac{y_{conv} - E[x]}{\sqrt{Var[x] + \epsilon}} \right)+\beta \\ &= \gamma \cdot \left (\frac{wx+b - E[x]}{\sqrt{ Var[x] + \epsilon}} \right)+\beta \\ \hat w &= \frac{\gamma}{\sqrt{Var[x] + \epsilon}}\cdot w \\ \hat b &= \frac{\gamma}{\sqrt{Var[x] + \epsilon}}\cdot \left({b - E[x]} \right)+\beta \\ y_{bn} &= \hat w \cdot x + \hat b \\ \end{align*} \]

推导时, E[x] 为 runnin_mean(滑动均值), Var[x] 为 running_var(滑动方差),
pytorch 的 running_var 存储的是方差, 而不是标准差

caffe 中的 conv-bn-scale-relu 结构

屏幕快照 2018-08-27 下午5.22.42-w384

caffe模型的转化可以参考pvanet的卷积层和 batch-norm融合代码

posted @ 2018-08-27 17:08  nowgood  阅读(8946)  评论(0编辑  收藏  举报