-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathcaffe2tf.py
45 lines (39 loc) · 1.51 KB
/
caffe2tf.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
try:
import caffe
except ImportError:
print("!!!! Caffe import error")
pass
import numpy as np
from collections import OrderedDict
import tensorflow as tf
import os
def save_model(deploy, model, savename):
net = caffe.Net(deploy, model, caffe.TEST)
params_ = OrderedDict()
for name, layer in net.params.items():
params_[name] = {}
assert len(layer) == 2
if name.startswith('conv'):
params_[name]['weights'] = layer[0].data.transpose(2, 3, 1, 0).copy()
params_[name]['biases'] = layer[1].data.copy()
elif name.startswith('fc'):
params_[name]['weights'] = layer[0].data.T.copy()
params_[name]['biases'] = layer[1].data.copy()
elif name.startswith('deconv'):
params_[name]['weights'] = layer[0].data.transpose(2, 3, 1, 0).copy()
params_[name]['biases'] = layer[1].data.copy()
elif name.startswith('defc'):
params_[name]['weights'] = layer[0].data.T.copy()
params_[name]['biases'] = layer[1].data.copy()
else:
raise NotImplementedError
np.savez(savename, **params_)
print ("caffemodel parameters had been saved")
def load_model(model_path):
model_data = np.load(model_path).items()
params_ = OrderedDict()
for layer in model_data:
layer_name, layer_params = layer
params_[layer_name] = {'weights': layer_params.item()['weights'],
'biases': layer_params.item()['biases']}
return params_