加速技巧---Conv BN的融合

 網絡完成訓練後,在inference階段,爲了加速運算,通常將卷積層和BN層進行融合:

卷積層:

z = w * x + b

BN層:

y = \frac{x - E[x]}{\sqrt{var[x]}} \cdot \gamma + \beta

融合兩層: 將Conv層的公式帶入到BN層的公式

\begin{align} \nonumber y &= \frac{w*x+b - E[x]}{\sqrt{var[x]}} \cdot \gamma + \beta \\ \nonumber &= \frac{w*x}{\sqrt{var[x]}}\cdot \gamma + \left( \frac{b-E[x]}{\sqrt{var[x]}} \cdot \gamma + \beta \right) \end{align}

融合後相當於:

w_{new} = \frac{w*x}{\sqrt{var}} \cdot \gamma

b_{new} = \frac{b-mean}{\sqrt{var}} \cdot \gamma + \beta

【tips:inference階段,E[x]爲滑動均值,Var[x]爲滑動方差】

將BN層融合到卷積層中,相當於對卷積核進行一定的修改,沒有增加捲積的計算量,同時整個BN層的計算量都省去了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章