融合batchnorm 至conv中
最近在將模型轉換成嵌入式裝置可以使用的模型時,發現很多人都會將batchnorm層溶入到卷積層中做運算,剛開始看程式都看不太懂,後來查詢了一些資料再自己推導一次,發現是很簡單的數學運算,覺得很有趣,特地記錄下來學習學習~~
公式運算:
原本的卷積核公式為
原本的batch_norm的公式為:
如今要把batchnorm與卷積核融合成為同一個卷積核,也就是說要計算出一個新的權重w’與b’,如下列公式所示
再來就是公式推導了,首先將Z取代為wx+b然後代入
之後移項推一推就可以得出下列式子
對照一下可以發現出新的w’與新的b’對照如下:
程式碼實現(caffe)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
參考資料:
https://github.com/chuanqi305/MobileNet-SSD/blob/master/merge_bn.py https://www.itread01.com/content/1556626925.html https://stackoverflow.com/questions/49536856/tensorflow-how-to-merge-batchnorm-into-convolution-for-faster-inference https://ithelp.ithome.com.tw/articles/10225171