def _convert(args): if args.dstFramework == 'caffe': from mmdnn.conversion.caffe.caffe_emitter import CaffeEmitter if args.IRWeightPath is None: emitter = CaffeEmitter(args.IRModelPath) else: assert args.dstWeightPath emitter = CaffeEmitter((args.IRModelPath, args.IRWeightPath)) elif args.dstFramework == 'keras': from mmdnn.conversion.keras.keras2_emitter import Keras2Emitter emitter = Keras2Emitter((args.IRModelPath, args.IRWeightPath)) elif args.dstFramework == 'tensorflow': from mmdnn.conversion.tensorflow.tensorflow_emitter import TensorflowEmitter if args.IRWeightPath is None: # Convert network architecture only emitter = TensorflowEmitter(args.IRModelPath) else: emitter = TensorflowEmitter((args.IRModelPath, args.IRWeightPath)) elif args.dstFramework == 'cntk': from mmdnn.conversion.cntk.cntk_emitter import CntkEmitter if args.IRWeightPath is None: emitter = CntkEmitter(args.IRModelPath) else: emitter = CntkEmitter((args.IRModelPath, args.IRWeightPath)) elif args.dstFramework == 'coreml': raise NotImplementedError("CoreML emitter is not finished yet.") elif args.dstFramework == 'pytorch': if not args.dstWeightPath or not args.IRWeightPath: raise ValueError("Need to set a target weight filename.") from mmdnn.conversion.pytorch.pytorch_emitter import PytorchEmitter emitter = PytorchEmitter((args.IRModelPath, args.IRWeightPath)) elif args.dstFramework == 'mxnet': from mmdnn.conversion.mxnet.mxnet_emitter import MXNetEmitter if args.IRWeightPath is None: emitter = MXNetEmitter(args.IRModelPath) else: if args.dstWeightPath is None: raise ValueError( "MXNet emitter needs argument [dstWeightPath(dw)], like -dw mxnet_converted-0000.param" ) emitter = MXNetEmitter( (args.IRModelPath, args.IRWeightPath, args.dstWeightPath)) elif args.dstFramework == 'onnx': from mmdnn.conversion.onnx.onnx_emitter import OnnxEmitter if args.IRWeightPath is None: raise NotImplementedError("ONNX emitter needs IR weight file") else: emitter = OnnxEmitter(args.IRModelPath, args.IRWeightPath) else: assert False emitter.run(args.dstModelPath, args.dstWeightPath, args.phase) return 0
def _convert(args): if args.dstModelFormat == 'caffe': raise NotImplementedError( "Destination [Caffe] is not implemented yet.") elif args.dstModelFormat == 'keras': from mmdnn.conversion.keras.keras2_emitter import Keras2Emitter emitter = Keras2Emitter(args.IRModelPath) elif args.dstModelFormat == 'tensorflow': from mmdnn.conversion.tensorflow.tensorflow_emitter import TensorflowEmitter if args.IRWeightPath == None: emitter = TensorflowEmitter(args.IRModelPath) else: emitter = TensorflowEmitter((args.IRModelPath, args.IRWeightPath)) elif args.dstModelFormat == 'cntk': from mmdnn.conversion.cntk.cntk_emitter import CntkEmitter if args.IRWeightPath == None: emitter = CntkEmitter(args.IRModelPath) else: emitter = CntkEmitter((args.IRModelPath, args.IRWeightPath)) elif args.dstModelFormat == 'coreml': raise NotImplementedError("CoreML emitter is not finished yet.") assert args.IRWeightPath != None from mmdnn.conversion.coreml.coreml_emitter import CoreMLEmitter emitter = CoreMLEmitter((args.IRModelPath, args.IRWeightPath)) model = emitter.gen_model() print("Saving the CoreML model [{}].".format(args.dstModelPath + '.mlmodel')) model.save(args.dstModelPath + '.mlmodel') print("The converted CoreML model saved as [{}].".format( args.dstModelPath + '.mlmodel')) return 0 elif args.dstModelFormat == 'pytorch': if not args.dstWeightPath or not args.IRWeightPath: raise ValueError("Need to set a target weight filename.") from mmdnn.conversion.pytorch.pytorch_emitter import PytorchEmitter emitter = PytorchEmitter((args.IRModelPath, args.IRWeightPath)) elif args.dstModelFormat == 'mxnet': from mmdnn.conversion.mxnet.mxnet_emitter import MXNetEmitter if args.IRWeightPath == None: emitter = MXNetEmitter(args.IRModelPath) else: emitter = MXNetEmitter((args.IRModelPath, args.IRWeightPath, args.inputShape, args.dstWeightPath)) else: assert False emitter.run(args.dstModelPath, args.dstWeightPath, args.phase) return 0
def mxnet_emit(original_framework, architecture_name, architecture_path, weight_path, test_input_path): from mmdnn.conversion.mxnet.mxnet_emitter import MXNetEmitter from collections import namedtuple Batch = namedtuple('Batch', ['data']) import mxnet # IR to code converted_file = TestModels.tmpdir + original_framework + '_mxnet_' + architecture_name + "_converted" converted_file = converted_file.replace('.', '_') output_weights_file = converted_file + "-0000.params" emitter = MXNetEmitter( (architecture_path, weight_path, output_weights_file)) emitter.run(converted_file + '.py', None, 'test') del emitter del MXNetEmitter # import converted model imported = imp.load_source('MXNetModel', converted_file + '.py') model_converted = imported.RefactorModel() model_converted = imported.deploy_weight(model_converted, output_weights_file) original_framework = checkfrozen(original_framework) if 'rnn' not in architecture_name: func = TestKit.preprocess_func[original_framework][ architecture_name] img = func(test_input_path(architecture_name)) img = np.transpose(img, (2, 0, 1)) input_data = np.expand_dims(img, 0) else: input_data = np.load(test_input_path(architecture_name)) model_converted.forward(Batch([mxnet.nd.array(input_data)])) predict = model_converted.get_outputs()[0].asnumpy() converted_predict = np.squeeze(predict) del model_converted del sys.modules['MXNetModel'] del mxnet os.remove(converted_file + '.py') os.remove(output_weights_file) return converted_predict
def MXNetEmit(original_framework, architecture_name, architecture_path, weight_path, image_path): from mmdnn.conversion.mxnet.mxnet_emitter import MXNetEmitter from collections import namedtuple Batch = namedtuple('Batch', ['data']) original_framework = checkfrozen(original_framework) import mxnet as mx print("Testing {} from {} to MXNet.".format(architecture_name, original_framework)) # IR to code converted_file = original_framework + '_mxnet_' + architecture_name + "_converted" converted_file = converted_file.replace('.', '_') output_weights_file = converted_file + "-0000.params" emitter = MXNetEmitter( (architecture_path, weight_path, output_weights_file)) emitter.run(converted_file + '.py', None, 'test') del emitter del MXNetEmitter # import converted model imported = __import__(converted_file) model_converted = imported.RefactorModel() model_converted = imported.deploy_weight(model_converted, output_weights_file) func = TestKit.preprocess_func[original_framework][architecture_name] img = func(image_path) img = np.transpose(img, (2, 0, 1)) input_data = np.expand_dims(img, 0) model_converted.forward(Batch([mx.nd.array(input_data)])) predict = model_converted.get_outputs()[0].asnumpy() converted_predict = np.squeeze(predict) del model_converted del sys.modules[converted_file] del mx os.remove(converted_file + '.py') os.remove(output_weights_file) return converted_predict
def MXNetEmit(original_framework, architecture_name, architecture_path, weight_path, image_path): from mmdnn.conversion.mxnet.mxnet_emitter import MXNetEmitter from collections import namedtuple Batch = namedtuple('Batch', ['data']) original_framework = checkfrozen(original_framework) import mxnet as mx print("Testing {} from {} to MXNet.".format(architecture_name, original_framework)) # IR to code converted_file = original_framework + '_mxnet_' + architecture_name + "_converted" converted_file = converted_file.replace('.', '_') output_weights_file = converted_file + "-0000.params" emitter = MXNetEmitter((architecture_path, weight_path, output_weights_file)) emitter.run(converted_file + '.py', None, 'test') del emitter del MXNetEmitter # import converted model imported = __import__(converted_file) model_converted = imported.RefactorModel() model_converted = imported.deploy_weight(model_converted, output_weights_file) func = TestKit.preprocess_func[original_framework][architecture_name] img = func(image_path) img = np.transpose(img, (2, 0, 1)) input_data = np.expand_dims(img, 0) model_converted.forward(Batch([mx.nd.array(input_data)])) predict = model_converted.get_outputs()[0].asnumpy() converted_predict = np.squeeze(predict) del model_converted del sys.modules[converted_file] del mx os.remove(converted_file + '.py') os.remove(output_weights_file) return converted_predict
def _convert(args): if args.framework == 'caffe': raise NotImplementedError( "Destination [Caffe] is not implemented yet.") elif args.framework == 'keras': raise NotImplementedError( "Destination [Keras] is not implemented yet.") elif args.framework == 'tensorflow': raise NotImplementedError( "Destination [Tensorflow] is not implemented yet.") elif args.framework == 'cntk': raise NotImplementedError( "Destination [Tensorflow] is not implemented yet.") elif args.framework == 'coreml': from mmdnn.conversion.coreml.coreml_emitter import CoreMLEmitter assert args.inputNetwork is not None assert args.inputWeight is not None emitter = CoreMLEmitter(args.inputNetwork, args.inputWeight) model = emitter.gen_model( args.inputNames, args.outputNames, image_input_names=set(args.imageInputNames) if args.imageInputNames else None, is_bgr=args.isBGR, red_bias=args.redBias, blue_bias=args.blueBias, green_bias=args.greenBias, gray_bias=args.grayBias, image_scale=args.scale, class_labels=args.classInputPath if args.classInputPath else None, predicted_feature_name=args.predictedFeatureName) """ from google.protobuf import text_format with open(args.output+'.txt', 'w') as f: f.write(text_format.MessageToString(model)) """ with open(args.output, 'wb') as f: model = model.SerializeToString() f.write(model) return 0 elif args.framework == 'pytorch': if not args.dstWeightPath or not args.IRWeightPath: raise ValueError("Need to set a target weight filename.") from mmdnn.conversion.pytorch.pytorch_emitter import PytorchEmitter emitter = PytorchEmitter((args.IRModelPath, args.IRWeightPath)) elif args.framework == 'mxnet': from mmdnn.conversion.mxnet.mxnet_emitter import MXNetEmitter if args.IRWeightPath == None: emitter = MXNetEmitter(args.IRModelPath) else: emitter = MXNetEmitter((args.IRModelPath, args.IRWeightPath, args.inputShape, args.dstWeightPath)) else: assert False emitter.run(args.output) return 0