Only the new Caffe model format is supported. If you have an old model, use the upgrade_net_proto_text and upgrade_net_proto_binary tools that ship with Caffe to upgrade them first. Also make sure you're using a fairly recent version of Caffe.
It appears that Caffe and TensorFlow cannot be concurrently invoked (CUDA conflicts - even with set_mode_cpu). This makes it a two-stage process: first extract the parameters with convert.py, then import it into TensorFlow.
Caffe is not strictly required. If PyCaffe is found in your PYTHONPATH, and the USE_PYCAFFE
environment variable is set, it will be used. Otherwise, a fallback
will be used. However, the fallback uses the pure Python-based
implementation of protobuf, which is astoundingly slow (~1.5 minutes to
parse the VGG16 parameters). The experimental CPP protobuf backend
doesn't particularly help here, since it runs into the file size limit
(Caffe gets around this by overriding this limit in C++). A cleaner
solution here would be to implement the loader as a C++ module.
Only a subset of Caffe layers and accompanying parameters are currently supported.
Not all Caffe models can be converted to TensorFlow. For instance,
Caffe supports arbitrary padding whereas TensorFlow's support is
currently restricted to SAME and VALID.
The border values are handled differently by Caffe and TensorFlow. However, these don't appear to affect things too much.
Image rescaling can affect the ILSVRC2012 top 5 accuracy listed above
slightly. VGG16 expects isotropic rescaling (anisotropic reduces
accuracy to 88.45%) whereas BVLC's implementation of GoogLeNet expects
anisotropic (isotropic reduces accuracy to 87.7%).
The support class kaffe.tensorflow.Network has no internal dependencies. It can be safely extracted and deployed without the rest of this library.
The ResNet model uses 1x1 convolutions with a stride of 2. This is
currently only supported in the master branch of TensorFlow (the latest
release at time of writing being v0.8.0, which does not support it).