Как было предложено в комментариях по @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-слоя, как показано выше. Кроме того, гамма, среднее и дисперсия разделены для слоя нормализации партии.
Caffe также отправляет упаковку python. Единственный способ - более или менее вручную скопировать веса. Ты рано встал с этим вопросом. Будем надеяться, что TensorFlow также адаптирует ONNX в ближайшем будущем. – Patwie
Это сложно. Tensorflow - это код в качестве модели, однако caffe - это структура данных как модель. –