Ejemplo n.º 1
0
def test_cat_classification(model):
    print("\n--- Test cat classification (%s) ---" % model)
    filename = "assets/cat.jpg"
    intermediate = DeepNetwork(filename=model)
    class_name = intermediate.predict(imread(filename))
    print("Model selected class '{0}' for image {1}".format(
        class_name, filename))
Ejemplo n.º 2
0
def convert(torch_model, class_map, description="Neural Network Model"):
    """
	Convert a torch model to PMML
	@model. The torch model object
	@class_map. A map in the form {class_id: class_name}
	@description. A short description of the model
	Returns a DeepNeuralNetwork object which can be exported to PMML
	"""
    pmml = DeepNetwork(description=description, class_map=class_map)
    pmml.torch_model = torch_model
    pmml.model_name = str(torch_model)
    layers = serialize_layers(torch_model, '')
    # Attach the first layer
    previous_layer = convert_input()
    pmml._append_layer(previous_layer)
    # Attach the following layers
    flattened = False
    for identifier, layer in layers:
        print(layer.__class__)
        if layer.__class__ in CONVERSIONS:
            if layer.__class__ == nn.Linear and not flattened:
                previous_layer = convert_flatten(previous_layer)
                pmml._append_layer(previous_layer)
                flattened = True
            converter = CONVERSIONS[layer.__class__]
            previous_layer = converter(identifier, layer, previous_layer)
            pmml._append_layer(previous_layer)
        elif layer.__class__ == Bottleneck:
            pmml, previous_layer = convert_bottleneck(pmml, identifier, layer,
                                                      previous_layer)
        else:
            pass
            # raise ValueError("Unknown layer type:", layer.__class__)
    return pmml
Ejemplo n.º 3
0
def test_intermediate_to_keras(pmml_file, keras_model):
    """
    Test conversion between intermediate form and keras
    Compare the loaded PMML file to @keras_model
    """
    print("\n--- Test Intermediate to Keras (%s) ---" % pmml_file)
    intermediate = DeepNetwork(filename=pmml_file)
    new_keras_model = intermediate.get_keras_model()
    new_config = new_keras_model.get_config()
    old_config = keras_model.get_config()
Ejemplo n.º 4
0
def convert(torch_model, class_map, description="Neural Network Model"):
    """
	Convert a torch model to PMML
	@model. The torch model object
	@class_map. A map in the form {class_id: class_name}
	@description. A short description of the model
	Returns a DeepNeuralNetwork object which can be exported to PMML
	"""
    pmml = DeepNetwork(description=description, class_map=class_map)
    pmml.torch_model = torch_model
    pmml.model_name = str(torch_model)
    first_layer = convert_input()
    last_layer = convert_recursive(torch_model, first_layer, pmml)
Ejemplo n.º 5
0
def convert_torch_to_pmml(torch_model,
                          output_path,
                          weights_path,
                          description,
                          debug=True):
    """
    Convert a torch model to PMML
    """
    print("\nGenerating model: %s" % description)
    class_map = load_imagenet_classes()
    pmml = convert(torch_model, class_map=class_map, description=description)
    pmml.save_pmml(output_path, weights_path=weights_path, save_weights=False)
    if debug:
        print("Checking model: %s" % output_path)
        intermediate = DeepNetwork(filename=output_path)
        old_config = torch_model.get_config()
        new_config = intermediate.get_keras_model().get_config()
        directory = os.path.dirname(output_path)
        dump_config(old_config, new_config, directory)
        test_prediction(output_path, "assets/cat.jpg")
Ejemplo n.º 6
0
def test_prediction(output_path, image_path):
    intermediate = DeepNetwork(filename=output_path)
    class_name = intermediate.predict(imread(image_path))
    print("Model selected class '{0}' for image {1}".format(
        class_name, intermediate.description))
Ejemplo n.º 7
0
def convert(keras_model, class_map, description="Neural Network Model"):
    """
	Convert a keras model to PMML
	@model. The keras model object
	@class_map. A map in the form {class_id: class_name}
	@description. A short description of the model
	Returns a DeepNeuralNetwork object which can be exported to PMML
	"""
    pmml = DeepNetwork(description=description, class_map=class_map)
    pmml.keras_model = keras_model
    pmml.model_name = keras_model.name
    config = keras_model.get_config()

    for layer in config['layers']:
        layer_class = layer['class_name']
        layer_config = layer['config']
        layer_inbound_nodes = layer['inbound_nodes']
        # Input
        if layer_class is "InputLayer":
            pmml._append_layer(
                InputLayer(name=layer_config['name'],
                           input_size=layer_config['batch_input_shape'][1:]))
        # Conv2D
        elif layer_class is "Conv2D":
            pmml._append_layer(
                Conv2D(
                    name=layer_config['name'],
                    channels=layer_config['filters'],
                    kernel_size=layer_config['kernel_size'],
                    dilation_rate=layer_config['dilation_rate'],
                    use_bias=layer_config['use_bias'],
                    activation=layer_config['activation'],
                    strides=layer_config['strides'],
                    padding=layer_config['padding'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        # DepthwiseConv2D
        elif layer_class is "DepthwiseConv2D":
            pmml._append_layer(
                DepthwiseConv2D(
                    name=layer_config['name'],
                    kernel_size=layer_config['kernel_size'],
                    depth_multiplier=layer_config['depth_multiplier'],
                    use_bias=layer_config['use_bias'],
                    activation=layer_config['activation'],
                    strides=layer_config['strides'],
                    padding=layer_config['padding'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        # MaxPooling
        elif layer_class is "MaxPooling2D":
            pmml._append_layer(
                MaxPooling2D(
                    name=layer_config['name'],
                    pool_size=layer_config['pool_size'],
                    strides=layer_config['strides'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        elif layer_class is "AveragePooling2D":
            pmml._append_layer(
                AveragePooling2D(
                    name=layer_config['name'],
                    pool_size=layer_config['pool_size'],
                    strides=layer_config['strides'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        elif layer_class is "GlobalAveragePooling2D":
            pmml._append_layer(
                GlobalAveragePooling2D(
                    name=layer_config['name'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        # Flatten
        elif layer_class is "Flatten":
            pmml._append_layer(
                Flatten(
                    name=layer_config['name'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        # Dense
        elif layer_class is "Dense":
            pmml._append_layer(
                Dense(
                    name=layer_config['name'],
                    channels=layer_config['units'],
                    use_bias=layer_config['use_bias'],
                    activation=layer_config['activation'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        # Zero padding layer
        elif layer_class is "ZeroPadding2D":
            pmml._append_layer(
                ZeroPadding2D(
                    name=layer_config['name'],
                    padding=layer_config['padding'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        # Reshape layer
        elif layer_class is "Reshape":
            pmml._append_layer(
                Reshape(
                    name=layer_config['name'],
                    target_shape=layer_config['target_shape'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        elif layer_class is "Dropout":
            pmml._append_layer(
                Dropout(
                    name=layer_config['name'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        # Batch Normalization
        elif layer_class is "BatchNormalization":
            pmml._append_layer(
                BatchNormalization(
                    name=layer_config['name'],
                    axis=layer_config['axis'],
                    momentum=layer_config['momentum'],
                    epsilon=layer_config['epsilon'],
                    center=layer_config['center'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        elif layer_class is "Add":
            pmml._append_layer(
                Merge(name=layer_config['name'],
                      inbound_nodes=get_inbound_nodes(layer_inbound_nodes)))
        elif layer_class is "Subtract":
            pmml._append_layer(
                Merge(name=layer_config['name'],
                      operator='subtract',
                      inbound_nodes=get_inbound_nodes(layer_inbound_nodes)))
        elif layer_class is "Dot":
            pmml._append_layer(
                Merge(name=layer_config['name'],
                      operator='dot',
                      inbound_nodes=get_inbound_nodes(layer_inbound_nodes)))
        elif layer_class is "Concatenate":
            pmml._append_layer(
                Merge(name=layer_config['name'],
                      axis=layer_config['axis'],
                      operator='concatenate',
                      inbound_nodes=get_inbound_nodes(layer_inbound_nodes)))
        elif layer_class is "Activation":
            pmml._append_layer(
                Activation(
                    name=layer_config['name'],
                    activation=layer_config['activation'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        elif layer_class is "ReLU":
            pmml._append_layer(
                Activation(
                    name=layer_config['name'],
                    activation='relu',
                    threshold=layer_config['threshold'],
                    max_value=layer_config['max_value'],
                    negative_slope=layer_config['negative_slope'],
                    inbound_nodes=get_inbound_nodes(layer_inbound_nodes),
                ))
        # Unknown layer
        else:
            raise ValueError("Unknown layer type:", layer_class)
    return pmml
Ejemplo n.º 8
0
def test_pmml_to_intermediate():
    """
    Load an PMML file to an intermediate form
    """
    print("\n--- Test PMML to intermediate ---")
    intermediate = DeepNetwork(filename=VGG_16_MODEL)