TensorFlow模型轉爲caffe模型

最近因爲要將訓練好的模型移植到硬件上,所以須要將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
相關文章
相關標籤/搜索