1. 程式人生 > >TensorFlow模型轉為caffe模型

TensorFlow模型轉為caffe模型

color num .data com 參考資料 net 說明 全連接 proto

最近由於要將訓練好的模型移植到硬件上,因此需要將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

TensorFlow模型轉為caffe模型