TensorFlow模型轉為caffe模型


最近由於要將訓練好的模型移植到硬件上,因此需要將TensorFlow轉為caffe模型。

caffe模型需要兩個文件,一個是定義網絡結構的prototxt,一個是存儲了參數的caffemodel文件。只要生成這兩個文件,caffe模型就算轉好了。

在模型轉換的過程中,我主要參考了https://github.com/lFatality/tensorflow2caffe

首先根據已有的tensorflow模型定義caffe模型需要的網絡結構prototxt文件,這個可以參考一些現有經典的prototxt。

然后生成caffe模型需要的模型參數caffemodel。基本過程是:把ckpt中的參數讀出來,因為tensorflow和caffe對特征的維度處理不一樣,tensorflow中特征的維度是NHWC(Number of filters * Height * Width * Channel),caffe中特征的維度是NCWH(Number of filters * Channel * width * height),所以,需要將參數從NHWC轉為NCWH的順序,然后保存為caffe模型。

具體過程,參考資料中講得比較清楚,在此不做太多說明。在模型轉換的過程中,在batch norm層的轉換時碰到了一些問題,在caffe中batch norm中除了存儲mean和variance之外還有scale_factor,在測試過程中需要將其設置為1。

下面是其中一層全連接層的轉換代碼。

net.params['fc15'][0].data[...] = w_15_new
net.params['fc15'][1].data[...] = b_15
net.params['fc15_bn'][0].data[...] = mean_15
net.params['fc15_bn'][1].data[...] = variance_15
net.params['fc15_bn'][2].data[...] = 1
net.params['fc15_scale'][0].data[...] = gamma_15
net.params['fc15_scale'][1].data[...] = beta_15


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM