最近因为要将训练好的模型移植到硬件上,所以须要将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