2016-12-14 4 views
14

Я хотел был бы иметь возможность преобразовать модель Tensorflow в модель Caffe.Преобразование модели Tensorflow в модель Caffe

Я искал в google, но мне удалось найти только конвертеры от caffe to tensorflow, но не наоборот.

У кого-нибудь есть идея, как это сделать?

Спасибо, Evi

+1

Caffe также отправляет упаковку python. Единственный способ - более или менее вручную скопировать веса. Ты рано встал с этим вопросом. Будем надеяться, что TensorFlow также адаптирует ONNX в ближайшем будущем. – Patwie

+0

Это сложно. Tensorflow - это код в качестве модели, однако caffe - это структура данных как модель. –

ответ

1

Как было предложено в комментариях по @Patwie, вы должны сделать это вручную, путем копирования слоя весов слоя. Например, чтобы скопировать первые веса CONV слоя из tensorflow контрольной точки к caffemodel, вы должны сделать что-то вроде следующего:

sess = tf.Session() 
new_saver = tf.train.import_meta_graph("/path/to/checkpoint.meta") 
what = new_saver.restore(sess, "/path/to/checkpoint") 

all_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES) 

conv1 = all_vars[0] 
bias1 = all_vars[1] 

conv_w1, bias_1 = sess.run([conv1,bias1]) 

net = caffe.Net('path/to/conv.prototxt', caffe.TEST) 

net.params['conv_1'][0].data[...] = conv_w1 
net.params['conv_1'][1].data[...] = bias_1 

... 

net.save('modelfromtf.caffemodel') 

Note1: Этот код имеет НЕ проверялась. Я не уверен, что это сработает, но я думаю, что это нужно. Кроме того, это только для одного conv-слоя. На практике вы должны сначала проанализировать свою контрольную точку тензорного потока, чтобы проверить, какие весы слоев имеют индекс (распечатайте all_vars), а затем скопируйте каждый вес каждого уровня отдельно.

Примечание2: Некоторые автоматизации может быть сделано путем перебора начальных CONV слоев, поскольку они обычно следуют установленному шаблону (conv1-> bn1-> relu1-> conv2-> bn2-> relu2 ...)

Примечание3: Тензорный поток может дополнительно разделить вес каждого слоя на отдельные индексы. Например: весовые и смещения разделены для conv-слоя, как показано выше. Кроме того, гамма, среднее и дисперсия разделены для слоя нормализации партии.

Смежные вопросы