caffe转换tensorflow工具caffe-tensorflow

来源:互联网 发布:如何获取阿里云优惠码 编辑:程序博客网 时间:2024/06/07 11:47

caffe-tensorflow转换介绍及使用

caffe-tensorflow可以将caffe的网络定义文件和预训练参数转换成tensorflow的形式,包括tensorflow的网络结构源码和npy格式的权重文件。
从github上下载源码,进入源码目录运行convert.py即可。
其调用格式为

python convert.py def_path --caffemodel caffemodel_path --data-output-path dataoutput_path --code-output-path codeoutput_path

其中def_path为必需项,四个参数两个caffe输入,两个tensorflow端的输出。如果只需要权重参数则只需前三个参数。输出的tensorflow代码为其源码中Network的子类,网络构建过程实现了其setup方法,因此需在代码中引入才可以调用。tensorflow目录下network.py这个文件中实现了Network类,这个类封装了一些layer,包括带group的conv层,caffe-tensorflow的转换还是比较安全的,自行转换会遇到很多诸如caffe,tensorflow卷积核格式、fc权重格式、输入输出数据表示格式的不同的问题,caffe-tensorflow这个项目都会自行转换。

caffe-tensorflow实现细节

caffe-tensorflow的具体原理是通过pycaffe读取网络定义文件,并重新生成一张图,图上的节点保存各个层的信息,GraphBuilder类负责生成图结构,每个节点代表一个layer,作者定义了许多transformer,每个transformer对图做一些操作,有对图中数据进行操作的也有对图中的layer进行修改的,其中DataInjector类对caffemodel数据进行读取并将数据分发到图的各个节点上。

DataReshaper将caffe与tensorflow中的不同格式做了转换,包括卷积核的格式换,tensorflow的卷积核是[filter_height, filter_width, in_channels, out_channels]而caffe的卷积核是[out_channels, in_channels, filter_height, filter_width],tensorflow的fc层参数也和caffe的不同,tensorflow一般为[input_dimension,output_dimension],caffe刚好相反。而且tensorflow第一个fc层需要对pool5进行reshape,而pool5层和caffe的pool5层由于格式不同(tensorflow为NHWC,caffe为NCHW)所以caffe的weight实际上并不能适用与简单的将NHWC格式展开,所以这一层的weight需要变换。另外lrn的参数不同也需要调整,具体细节在另一篇博客lrn的介绍中有说明。

原创粉丝点击