def caffe_to_chainermodel(model, caffe_prototxt, caffemodel_path,
chainermodel_path):
os.chdir(osp.dirname(caffe_prototxt))
net = caffe.Net(caffe_prototxt, caffemodel_path, caffe.TEST)
for name, param in net.params.iteritems():
try:
layer = getattr(model, name)
except AttributeError:
print('Skipping caffe layer: %s' % name)
continue
has_bias = True
if len(param) == 1:
has_bias = False
print('{0}:'.format(name))
# weight
print(' - W: %s %s' % (param[0].data.shape, layer.W.data.shape))
assert param[0].data.shape == layer.W.data.shape
layer.W.data = param[0].data
# bias
if has_bias:
print(' - b: %s %s' % (param[1].data.shape, layer.b.data.shape))
assert param[1].data.shape == layer.b.data.shape
layer.b.data = param[1].data
S.save_npz(chainermodel_path, model)
评论列表
文章目录