2016-12-14 28 views
14

Tensorflow modelini Caffe modeline dönüştürmek istiyorum.Tensorflow modelini Caffe modeline dönüştürün

Google'da arama yaptım, ancak caffe'den tensorflow'a sadece ters çeviriciler bulabildim ama tam tersini değil.

Nasıl yapılacağı konusunda bir fikri olan var mı?

sayesinde Evi @Patwie tarafından yorumunda önerildiği gibi

+1

Caffe ayrıca bir python sarıcısını da gönderir. Tek yol, ağırlıkların az ya da çok el ile kopyalanmasıdır. Bu soruyla erkenden yoldasın. Umarım TensorFlow, ONNX'i de yakın gelecekte uyarlar. – Patwie

+0

Zor. Tensorflow model olarak koddur, ancak caffe model olarak veri yapısıdır. –

cevap

1

, sen katmanı tarafından ağırlıkları katmanını kopyalayarak elle yapmak zorunda. Örneğin, bir caffemodel bir tensorflow kontrol noktasından ilk dönüşüm katman ağırlıkları kopyalamak için, aşağıdaki gibi bir şey yapmak zorunda:

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') 

Not 1: Bu kod test edilmemiştir. Bunun işe yarayıp yaramayacağından emin değilim, ama bence yapmalı. Ayrıca, bu sadece bir konv tabakası içindir. Uygulamada, ilk katman ağırlıkları hangi dizinde hangi kontrol etmek için tensorflow kontrol noktasından analiz etmek zorunda ( all_vars yazdırmak) ve daha sonra tek tek her bir katmanın ağırlıkları kopyalayın.

Not 2: genellikle bir oturma modelini (conv1-> bn1-> relu1-> conv2-> bn2-> relu2 ...)

izleyin gibi bazı otomasyon ilk dönüşüm katmanları üzerinde yineleme yapılabilir Not 3: Tensorflow, her bir katman ağırlığını ayrı indislere bölebilir. Örneğin, ağırlıkları ve biases, yukarıda gösterildiği gibi bir konv tabakası için ayrılmıştır. Ayrıca, gama, ve varyans toplu normalleştirme tabaka ayrılmıştır anlamına .