diff --git a/fluid/image_classification/caffe2fluid/README.md b/fluid/image_classification/caffe2fluid/README.md index 9b54e37226a1e4e43f249b8addfd22a3f5c78780..ac5f7c6ae4299958718f7737c1dee2daeced3b0b 100644 --- a/fluid/image_classification/caffe2fluid/README.md +++ b/fluid/image_classification/caffe2fluid/README.md @@ -1,18 +1,17 @@ ### caffe2fluid this tool is used to convert a caffe-model to paddle-model(fluid api) - ### howto - 0, prepare caffepb.py in ./proto + 1, prepare caffepb.py in ./proto, two options provided option 1: generate it from caffe.proto using protoc bash ./proto/compile.sh option2: download one from github directly cd proto/ && wget https://github.com/ethereon/caffe-tensorflow/blob/master/kaffe/caffe/caffepb.py - 1, convert you caffe model using convert.py which will generate a python code and weight(in .npy) + 2, convert you caffe model using convert.py which will generate a python code and weight(in .npy) - 2, use the converted model to predict + 3, use the converted model to predict (see more detail info in 'tests/lenet/README.md') diff --git a/fluid/image_classification/caffe2fluid/kaffe/caffe/caffepb.py b/fluid/image_classification/caffe2fluid/kaffe/caffe/caffepb.py deleted file mode 120000 index e62be60846c22d287895794c4537463ae3be272f..0000000000000000000000000000000000000000 --- a/fluid/image_classification/caffe2fluid/kaffe/caffe/caffepb.py +++ /dev/null @@ -1 +0,0 @@ -../../proto/caffepb.py \ No newline at end of file diff --git a/fluid/image_classification/caffe2fluid/kaffe/caffe/resolver.py b/fluid/image_classification/caffe2fluid/kaffe/caffe/resolver.py index 1003a8cb1e16e5625038a7d5ca2bad227e8164eb..5fbd48d3ade5ab4b812210acf82be625871740cb 100644 --- a/fluid/image_classification/caffe2fluid/kaffe/caffe/resolver.py +++ b/fluid/image_classification/caffe2fluid/kaffe/caffe/resolver.py @@ -1,8 +1,18 @@ +import os import sys SHARED_CAFFE_RESOLVER = None +def import_caffepb(): + p = os.path.realpath(__file__) + p = os.path.dirname(p) + p = os.path.join(p, '../../proto') + sys.path.insert(0, p) + import caffepb + return caffepb + + class CaffeResolver(object): def __init__(self): self.import_caffe() @@ -15,8 +25,7 @@ class CaffeResolver(object): self.caffe = caffe except ImportError: # Fall back to the protobuf implementation - from . import caffepb - self.caffepb = caffepb + self.caffepb = import_caffepb() show_fallback_warning() if self.caffe: # Use the protobuf code from the imported distribution. diff --git a/fluid/image_classification/caffe2fluid/kaffe/paddle/network.py b/fluid/image_classification/caffe2fluid/kaffe/paddle/network.py index 093b660515c6ae1354d643ca7a38a30860835e16..620a84e8f1289672151f1f280559a56b37995ce0 100644 --- a/fluid/image_classification/caffe2fluid/kaffe/paddle/network.py +++ b/fluid/image_classification/caffe2fluid/kaffe/paddle/network.py @@ -165,7 +165,6 @@ class Network(object): # Get the number of channels in the input h_i, w_i = input.shape[2:] - fluid = import_fluid() output = fluid.layers.pool2d( input=input, @@ -182,7 +181,6 @@ class Network(object): # Get the number of channels in the input h_i, w_i = input.shape[2:] - fluid = import_fluid() output = fluid.layers.pool2d( input=input, diff --git a/fluid/image_classification/caffe2fluid/kaffe/paddle/transformer.py b/fluid/image_classification/caffe2fluid/kaffe/paddle/transformer.py index 82cbbdc8b90c5ca9a258c2193259f1988e405cff..92b9d32a3a755d8e6a2a8739cc3f42f9c8564b40 100644 --- a/fluid/image_classification/caffe2fluid/kaffe/paddle/transformer.py +++ b/fluid/image_classification/caffe2fluid/kaffe/paddle/transformer.py @@ -273,7 +273,6 @@ class TensorFlowEmitter(object): b += self.emit_node(node) blocks.append(b[:-1]) s = s + '\n\n'.join(blocks) - s += self.emit_convert_def(input_nodes) s += self.emit_main_def(name) return s diff --git a/fluid/image_classification/caffe2fluid/tests/lenet/README.md b/fluid/image_classification/caffe2fluid/tests/lenet/README.md index 531bcff30d8530007f950fbc9266c634cb12165a..e87fb65f22a3b1a02d86d5ceb1c055ec0bec9830 100644 --- a/fluid/image_classification/caffe2fluid/tests/lenet/README.md +++ b/fluid/image_classification/caffe2fluid/tests/lenet/README.md @@ -1,6 +1,8 @@ ### convert lenet model from caffe format into paddle format(fluid api) ### howto + 0, prepare your caffepb.py + 1, download a lenet caffe-model lenet_iter_10000.caffemodel download address: https://github.com/ethereon/caffe-tensorflow/raw/master/examples/mnist/lenet_iter_10000.caffemodel diff --git a/fluid/image_classification/caffe2fluid/tests/lenet/convert.sh b/fluid/image_classification/caffe2fluid/tests/lenet/convert.sh index 6221f1738403acc3cb20133857c6b2455d0b2515..b3ec1a1dce2434a4466cf5d4609de1b4aec9d346 100755 --- a/fluid/image_classification/caffe2fluid/tests/lenet/convert.sh +++ b/fluid/image_classification/caffe2fluid/tests/lenet/convert.sh @@ -2,6 +2,8 @@ #function: # convert a caffe model +# eg: +# bash ./convert.sh ./model.caffe/lenet.prototxt ./model.caffe/lenet.caffemodel lenet.py lenet.npy if [[ $# -ne 4 ]];then echo "usage:" diff --git a/fluid/image_classification/caffe2fluid/tests/lenet/lenet.py b/fluid/image_classification/caffe2fluid/tests/lenet/lenet.py index 8b758d9e9a35036acb1815b411c4f663f589b6ec..50e6927483a61c574f1152c6dc438a6b2c8a4d90 100644 --- a/fluid/image_classification/caffe2fluid/tests/lenet/lenet.py +++ b/fluid/image_classification/caffe2fluid/tests/lenet/lenet.py @@ -61,8 +61,8 @@ class Network(object): fluid = import_fluid() #load fluid mode directly if os.path.isdir(data_path): - assert ( - exe is not None), 'must provide a executor to load fluid model' + assert (exe is not None), \ + 'must provide a executor to load fluid model' fluid.io.load_persistables_if_exist(executor=exe, dirname=data_path) return True @@ -167,7 +167,6 @@ class Network(object): # Get the number of channels in the input h_i, w_i = input.shape[2:] - fluid = import_fluid() output = fluid.layers.pool2d( input=input, @@ -184,7 +183,6 @@ class Network(object): # Get the number of channels in the input h_i, w_i = input.shape[2:] - fluid = import_fluid() output = fluid.layers.pool2d( input=input,