コード例 #1
0
def convert_pytorch2keras2ir():
    max_error = 0
    model = VGG16(vgg([64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'C', 512, 512, 512, 'M', 512, 512, 512], 3))
    # load weights here
    state_dict_to_load = torch.load('vgg16_reducedfc/vgg16_reducedfc.pth', map_location=lambda storage, loc: storage)
    renamed_tate_dict_to_load = {}
    for k, v in state_dict_to_load.items():
        renamed_tate_dict_to_load['vgg.' + k] = v
    print(model.state_dict().keys())
    print(state_dict_to_load.keys())

    model.load_state_dict(renamed_tate_dict_to_load)

    for m in model.modules():
        m.training = False

    input_np = np.ones((1, 3, 224, 224)) * 0.5
    # np.random.uniform(0, 1, (1, 3, 224, 224))
    input_var = Variable(torch.FloatTensor(input_np))
    output = model(input_var)

    k_model = pytorch_to_keras((3, 224, 224,), output)

    pytorch_output = output.data.numpy()

    print(pytorch_output)
    print(np.argmax(pytorch_output))
    return

    keras_output = k_model.predict(input_np)

    error = np.max(pytorch_output - keras_output)
    print(error)
    if max_error < error:
        max_error = error

    print('Max error: {0}'.format(max_error))

    # save network structure as JSON
    json_string = k_model.to_json()
    with open("vgg16_reducedfc/imagenet_vgg16_reducedfc.json", "w") as of:
        of.write(json_string)

    print("Network structure is saved as [vgg16_reducedfc/imagenet_vgg16_reducedfc.json].")

    k_model.save_weights('vgg16_reducedfc/imagenet_vgg16_reducedfc.h5')

    print("Network weights are saved as [vgg16_reducedfc/imagenet_vgg16_reducedfc.h5].")

    parser = Keras2Parser(('vgg16_reducedfc/imagenet_vgg16_reducedfc.json', 'vgg16_reducedfc/imagenet_vgg16_reducedfc.h5'))
    parser.run('vgg16_reducedfc/ir')
コード例 #2
0
    def KerasParse(architecture_name, image_path):
        # get original model prediction result
        original_predict = keras_extractor.inference(architecture_name, image_path)

        # download model
        model_filename = keras_extractor.download(architecture_name, TestModels.cachedir)

        # original to IR
        parser = Keras2Parser(model_filename)
        parser.gen_IR()
        parser.save_to_proto(TestModels.tmpdir + architecture_name + "_converted.pb")
        parser.save_weights(TestModels.tmpdir + architecture_name + "_converted.npy")
        del parser
        return original_predict
コード例 #3
0
    def KerasParse(architecture_name, image_path):
        from mmdnn.conversion.examples.keras.extractor import keras_extractor
        from mmdnn.conversion.keras.keras2_parser import Keras2Parser

        # get original model prediction result
        original_predict = keras_extractor.inference(architecture_name, TestModels.cachedir, image_path)

        # download model
        model_filename = keras_extractor.download(architecture_name, TestModels.cachedir)
        del keras_extractor

        # original to IR
        IR_file = TestModels.tmpdir + 'keras_' + architecture_name + "_converted"
        parser = Keras2Parser(model_filename)
        parser.run(IR_file)
        del parser
        del Keras2Parser
        return original_predict
コード例 #4
0
def _convert(args):
    if args.srcFramework == 'caffe':
        from mmdnn.conversion.caffe.transformer import CaffeTransformer
        transformer = CaffeTransformer(args.network,
                                       args.weights,
                                       "tensorflow",
                                       args.inputShape,
                                       phase=args.caffePhase)
        graph = transformer.transform_graph()
        data = transformer.transform_data()

        from mmdnn.conversion.caffe.writer import JsonFormatter, ModelSaver, PyWriter
        JsonFormatter(graph).dump(args.dstPath + ".json")
        print("IR network structure is saved as [{}.json].".format(
            args.dstPath))

        prototxt = graph.as_graph_def().SerializeToString()
        with open(args.dstPath + ".pb", 'wb') as of:
            of.write(prototxt)
        print("IR network structure is saved as [{}.pb].".format(args.dstPath))

        import numpy as np
        with open(args.dstPath + ".npy", 'wb') as of:
            np.save(of, data)
        print("IR weights are saved as [{}.npy].".format(args.dstPath))

        return 0

    elif args.srcFramework == 'caffe2':
        raise NotImplementedError("Caffe2 is not supported yet.")
        '''
        assert args.inputShape != None
        from dlconv.caffe2.conversion.transformer import Caffe2Transformer
        transformer = Caffe2Transformer(args.network, args.weights, args.inputShape, 'tensorflow')

        graph = transformer.transform_graph()
        data = transformer.transform_data()
        
        from dlconv.common.writer import JsonFormatter, ModelSaver, PyWriter
        JsonFormatter(graph).dump(args.dstPath + ".json")
        print ("IR saved as [{}.json].".format(args.dstPath))

        prototxt = graph.as_graph_def().SerializeToString()
        with open(args.dstPath + ".pb", 'wb') as of:
            of.write(prototxt)
        print ("IR saved as [{}.pb].".format(args.dstPath))
        
        import numpy as np
        with open(args.dstPath + ".npy", 'wb') as of:
            np.save(of, data)
        print ("IR weights saved as [{}.npy].".format(args.dstPath))
        
        return 0
        '''

    elif args.srcFramework == 'keras':
        if args.network != None:
            model = (args.network, args.weights)
        else:
            model = args.weights

        from mmdnn.conversion.keras.keras2_parser import Keras2Parser
        parser = Keras2Parser(model)

    elif args.srcFramework == 'tensorflow':
        if args.weights == None:
            # only convert network structure
            model = args.network
        else:
            model = (args.network, args.weights)

        from mmdnn.conversion.tensorflow.tensorflow_parser import TensorflowParser
        parser = TensorflowParser(model, args.dstNodeName)

    elif args.srcFramework == 'mxnet':
        assert args.inputShape != None
        if args.weights == None:
            model = (args.network, args.inputShape)
        else:
            import re
            if re.search('.', args.weights):
                args.weights = args.weights[:-7]
            prefix, epoch = args.weights.rsplit('-', 1)
            model = (args.network, prefix, epoch, args.inputShape)

        from mmdnn.conversion.mxnet.mxnet_parser import MXNetParser
        parser = MXNetParser(model)

    else:
        raise NotImplementedError("Unknown framework [{}].".format(
            args.srcFramework))

    parser.gen_IR()
    parser.save_to_json(args.dstPath + ".json")
    parser.save_to_proto(args.dstPath + ".pb")
    parser.save_weights(args.dstPath + ".npy")

    return 0
コード例 #5
0
def _convert(args):
    if args.inputShape != None:
        inputshape = []
        for x in args.inputShape:
            shape = x.split(',')
            inputshape.append([int(x) for x in shape])
    else:
        inputshape = [None]
    if args.srcFramework == 'caffe':
        from mmdnn.conversion.caffe.transformer import CaffeTransformer
        transformer = CaffeTransformer(args.network,
                                       args.weights,
                                       "tensorflow",
                                       inputshape[0],
                                       phase=args.caffePhase)
        graph = transformer.transform_graph()
        data = transformer.transform_data()

        from mmdnn.conversion.caffe.writer import JsonFormatter, ModelSaver, PyWriter
        JsonFormatter(graph).dump(args.dstPath + ".json")
        print("IR network structure is saved as [{}.json].".format(
            args.dstPath))

        prototxt = graph.as_graph_def().SerializeToString()
        with open(args.dstPath + ".pb", 'wb') as of:
            of.write(prototxt)
        print("IR network structure is saved as [{}.pb].".format(args.dstPath))

        import numpy as np
        with open(args.dstPath + ".npy", 'wb') as of:
            np.save(of, data)
        print("IR weights are saved as [{}.npy].".format(args.dstPath))

        return 0

    elif args.srcFramework == 'caffe2':
        raise NotImplementedError("Caffe2 is not supported yet.")

    elif args.srcFramework == 'keras':
        if args.network != None:
            model = (args.network, args.weights)
        else:
            model = args.weights

        from mmdnn.conversion.keras.keras2_parser import Keras2Parser
        parser = Keras2Parser(model)

    elif args.srcFramework == 'tensorflow' or args.srcFramework == 'tf':

        if args.dstNodeName is None:
            raise ValueError(
                "Need to provide the output node of Tensorflow model.")

        assert args.network or args.weights
        if not args.network:
            if args.inNodeName is None:
                raise ValueError(
                    "Need to provide the input node of Tensorflow model.")
            if inputshape is None:
                raise ValueError(
                    "Need to provide the input node shape of Tensorflow model."
                )
            assert len(args.inNodeName) == len(inputshape)
            from mmdnn.conversion.tensorflow.tensorflow_frozenparser import TensorflowParser2
            parser = TensorflowParser2(args.weights, inputshape,
                                       args.inNodeName, args.dstNodeName)

        else:
            from mmdnn.conversion.tensorflow.tensorflow_parser import TensorflowParser
            if args.inNodeName and inputshape[0]:
                parser = TensorflowParser(args.network, args.weights,
                                          args.dstNodeName, inputshape[0],
                                          args.inNodeName)
            else:
                parser = TensorflowParser(args.network, args.weights,
                                          args.dstNodeName)

    elif args.srcFramework == 'mxnet':
        assert inputshape != None
        if args.weights == None:
            model = (args.network, inputshape[0])
        else:
            import re
            if re.search('.', args.weights):
                args.weights = args.weights[:-7]
            prefix, epoch = args.weights.rsplit('-', 1)
            model = (args.network, prefix, epoch, inputshape[0])

        from mmdnn.conversion.mxnet.mxnet_parser import MXNetParser
        parser = MXNetParser(model)

    elif args.srcFramework == 'cntk':
        from mmdnn.conversion.cntk.cntk_parser import CntkParser
        model = args.network or args.weights
        parser = CntkParser(model)

    elif args.srcFramework == 'pytorch':
        assert inputshape != None
        from mmdnn.conversion.pytorch.pytorch_parser import PytorchParser
        model = args.network or args.weights
        assert model != None
        parser = PytorchParser(model, inputshape[0])

    elif args.srcFramework == 'torch' or args.srcFramework == 'torch7':
        from mmdnn.conversion.torch.torch_parser import TorchParser
        model = args.network or args.weights
        assert model != None
        parser = TorchParser(model, inputshape[0])

    elif args.srcFramework == 'onnx':
        from mmdnn.conversion.onnx.onnx_parser import ONNXParser
        parser = ONNXParser(args.network)

    elif args.srcFramework == 'darknet':
        from mmdnn.conversion.darknet.darknet_parser import DarknetParser
        parser = DarknetParser(args.network, args.weights, args.darknetStart)

    elif args.srcFramework == 'coreml':
        from mmdnn.conversion.coreml.coreml_parser import CoremlParser
        parser = CoremlParser(args.network)

    else:
        raise ValueError("Unknown framework [{}].".format(args.srcFramework))

    parser.run(args.dstPath)

    return 0
コード例 #6
0
ファイル: convertToIR.py プロジェクト: lzqkean/MMdnn
def _convert(args):
    if args.srcFramework == 'caffe':
        from mmdnn.conversion.caffe.transformer import CaffeTransformer
        transformer = CaffeTransformer(args.network,
                                       args.weights,
                                       "tensorflow",
                                       args.inputShape,
                                       phase=args.caffePhase)
        graph = transformer.transform_graph()
        data = transformer.transform_data()

        from mmdnn.conversion.caffe.writer import JsonFormatter, ModelSaver, PyWriter
        JsonFormatter(graph).dump(args.dstPath + ".json")
        print("IR network structure is saved as [{}.json].".format(
            args.dstPath))

        prototxt = graph.as_graph_def().SerializeToString()
        with open(args.dstPath + ".pb", 'wb') as of:
            of.write(prototxt)
        print("IR network structure is saved as [{}.pb].".format(args.dstPath))

        import numpy as np
        with open(args.dstPath + ".npy", 'wb') as of:
            np.save(of, data)
        print("IR weights are saved as [{}.npy].".format(args.dstPath))

        return 0

    elif args.srcFramework == 'caffe2':
        raise NotImplementedError("Caffe2 is not supported yet.")

    elif args.srcFramework == 'keras':
        if args.network != None:
            model = (args.network, args.weights)
        else:
            model = args.weights

        from mmdnn.conversion.keras.keras2_parser import Keras2Parser
        parser = Keras2Parser(model)

    elif args.srcFramework == 'tensorflow' or args.srcFramework == 'tf':
        if args.dstNodeName is None:
            raise ValueError(
                "Need to provide the output node of Tensorflow model.")

        # assert args.network or args.frozen_pb
        if args.frozen_pb:
            from mmdnn.conversion.tensorflow.tensorflow_frozenparser import TensorflowParser2
            parser = TensorflowParser2(args.frozen_pb, args.inputShape,
                                       args.dstNodeName)
        else:
            from mmdnn.conversion.tensorflow.tensorflow_parser import TensorflowParser
            parser = TensorflowParser(args.network, args.weights,
                                      args.frozen_pb, args.dstNodeName)

    elif args.srcFramework == 'mxnet':
        assert args.inputShape != None
        if args.weights == None:
            model = (args.network, args.inputShape)
        else:
            import re
            if re.search('.', args.weights):
                args.weights = args.weights[:-7]
            prefix, epoch = args.weights.rsplit('-', 1)
            model = (args.network, prefix, epoch, args.inputShape)

        from mmdnn.conversion.mxnet.mxnet_parser import MXNetParser
        parser = MXNetParser(model)

    elif args.srcFramework == 'cntk':
        from mmdnn.conversion.cntk.cntk_parser import CntkParser
        model = args.network or args.weights
        parser = CntkParser(model)

    elif args.srcFramework == 'pytorch':
        assert args.inputShape != None
        from mmdnn.conversion.pytorch.pytorch_parser import PyTorchParser
        parser = PyTorchParser(args.network, args.inputShape)

    else:
        raise ValueError("Unknown framework [{}].".format(args.srcFramework))

    parser.run(args.dstPath)

    return 0