最近因爲要將訓練好的模型移植到硬件上,所以須要將TensorFlow轉爲caffe模型。git
caffe模型須要兩個文件,一個是定義網絡結構的prototxt,一個是存儲了參數的caffemodel文件。只要生成這兩個文件,caffe模型就算轉好了。github
在模型轉換的過程當中,我主要參考了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模型。spa
具體過程,參考資料中講得比較清楚,在此不作太多說明。在模型轉換的過程當中,在batch norm層的轉換時碰到了一些問題,在caffe中batch norm中除了存儲mean和variance以外還有scale_factor,在測試過程當中須要將其設置爲1。code
下面是其中一層全鏈接層的轉換代碼。orm
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