Posts

Post not yet marked as solved
301 Views

Keras to CoreML conversion fails: 'InputLayer' object is not iterable

My Keras to CoreML conversion fails at this point. I'm using standalone Keras and everything works fine but the conversion for dense_layer in dense_layers: 		for layer_size in layer_sizes: 				for conv_layer in conv_layers: 						NAME = "{}-conv-{}-nodes-{}-dense-{}".format(conv_layer, layer_size, dense_layer, int(time.time())) 						print(NAME) 						i = i + 1 						print(i) 						model = Sequential() 						model.add(Conv2D(8, (5, 5), padding='same', activation='relu', input_shape=X.shape[1:])) 						model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2), padding='same')) 						model.add(Dropout(0.2)) 						model.add(Conv2D(layer_size, (3, 3), padding='same', activation='relu')) 						model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2), padding='same')) 						model.add(Dropout(0.2)) 						for l in range(conv_layer-1): 								model.add(Conv2D(layer_size, (3, 3), padding='same', activation='relu')) 								model.add(MaxPooling2D(pool_size=(2, 2), strides=(2,2), padding='same')) 								model.add(Dropout(0.2)) 						model.add(Flatten()) 						for _ in range(dense_layer): 								model.add(Dense(layer_size)) 								model.add(Activation('relu')) 						model.add(Dense(CLASSNAME_SIZE)) 						model.add(Activation('softmax')) 						tensorboard = TensorBoard(log_dir="logs/{}".format(NAME)) 						 						model.compile(loss='sparse_categorical_crossentropy', 							optimizer='sgd', 							metrics=['accuracy']) 						 						model.fit(X, Y, batch_size=32, epochs=1, validation_data=(X_val,Y_val), shuffle=True, callbacks=[tensorboard]) 						model.save('traffic_signsv8.model') 						model.save('traffic_signsv8.h5') 						model = load_model('traffic_signsv8.h5') 						coremlModel = coremltools.converters.keras.convert(model, input_names = 'image', image_input_names = 'image', input_name_shape_dict={'input_1:0': [3, 48, 48, 1]}, image_scale=1.0/255.0) 						coremlModel.save('traffic_signsv8.mlmodel') 						spec = coremltools.utils.load_spec("traffic_signsv8.mlmodel") 						input = spec.description.input[0] 						input.type.imageType.colorSpace = ft.ImageFeatureType.RGB 						input.type.imageType.height = 48 						input.type.imageType.width = 48 						coremltools.utils.save_spec(spec, "try.mlmodel")
Asked
by karalis1.
Last updated
.
Post not yet marked as solved
143 Views

CoreML: exception Espresso exception: “Invalid state”: Null output blobs

Hi, I have this CNN model I made in Keras but actually when converting something strange happens with CoreML and the prediction inside my app crashes. This is the error i get [Espresso::handleexplan] exception=Espresso exception: "Invalid state": Null output blobs [Exception from Layer: 5: sequential/conv2d3/BiasAdd] 2020-12-15 01:06:31.245711+0100 TSD[41213:1753543] [coreml] Error computing NN outputs -1 2020-12-15 01:06:31.245849+0100 TSD[41213:1753543] [coreml] Failure in -executePlan:error:. Error computing NN outputs. My model takes 48x48 images in COLORBGR2RGB. Everything works fine in Python, predictions included My Keras model: def cnn_model(): 		model = Sequential() 		model.add(Conv2D(32, (3, 3), padding='same', 										 activation='relu')) 		model.add(Conv2D(32, (3, 3), activation='relu')) 		model.add(MaxPooling2D(pool_size=(2, 2))) 		model.add(Dropout(0.2)) 		model.add(Conv2D(64, (3, 3), padding='same', activation='relu')) 		model.add(Conv2D(64, (3, 3), activation='relu')) 		model.add(MaxPooling2D(pool_size=(2, 2))) 		model.add(Dropout(0.2)) 		model.add(Conv2D(128, (3, 3), padding='same', activation='relu')) 		model.add(Conv2D(128, (3, 3), activation='relu')) 		model.add(MaxPooling2D(pool_size=(2, 2))) 		model.add(Dropout(0.2)) 		model.add(Flatten()) 		model.add(keras.layers.InputLayer(input_shape=(X.shape[1]))) 		model.add(Dense(512, activation='relu')) 		model.add(Dropout(0.2)) 		model.add(Dense(CLASSNAME_SIZE, activation='softmax')) 		return model model = cnn_model() model.compile(loss='sparse_categorical_crossentropy', 							optimizer='sgd', 							metrics=['accuracy']) model.fit(X, Y, batch_size=32, epochs=20, validation_data=(X_val,Y_val), shuffle=True) model.save('traffic_signsv3.model') model.save('traffic_signsv3.h5') model = keras.models.load_model('traffic_signsv3.h5') coremlModel = coremltools.convert(model, input_names = 'image', image_input_names = 'image') coremlModel.save('traffic_signsv3.mlmodel') My CoreML conversion to Image is defined in this way: import coremltools import coremltools.proto.FeatureTypes_pb2 as ft spec = coremltools.utils.load_spec("traffic_signsv3.mlmodel") input = spec.description.input[0] input.type.imageType.colorSpace = ft.ImageFeatureType.RGB input.type.imageType.height = 48 input.type.imageType.width = 48 coremltools.utils.save_spec(spec, "tsdetection.mlmodel")
Asked
by karalis1.
Last updated
.