Search code examples
fluttertensorflowkerastensorflow-lite

Converted model (from h5 to tflite) doesn't work with tflite_flutter plugin


I'm new to tensorflow, I created a simple tflite model from Teachable Machine and it worked great in flutter app with tflite_flutter plugin.

Then I had to change the model with a pretrained .h5 model. I converted .h5 model to .tflite model but it crashes.

Converted pretrained model's input shape is [1, 16, 64, 64, 3](16 frame,64x64 image, 3 color) and output shape is [1, 12]. My test model's input shape is [1, 224, 224, 3] and output shape is [1, 3].

I created a .h5 model with input shape [1, 224, 224, 3] and converted it to tflite, it worked. Seems like conversion does the job and the problem may be the shape of the model. I couldn't figure out how to do it.

Here is the code that I used for conversion.

from keras.models import load_model
model = load_model("/content/model.h5")

TF_LITE_MODEL_FILE_NAME = "model.tflite"
tf_lite_converter = tf.lite.TFLiteConverter.from_keras_model(model)
tf_lite_converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS]
tf_lite_converter._experimental_lower_tensor_list_ops = False
tflite_model = tf_lite_converter.convert()
tflite_model_name = TF_LITE_MODEL_FILE_NAME
open(tflite_model_name, "wb").write(tflite_model)

# Convert the model.
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS]
converter._experimental_lower_tensor_list_ops = False
tflite_model = converter.convert()

Solution

  • I used convolution layers and lstm layers in training. Some operations in those layers don't have TensorFlow Lite equivalents and convertion from .h5 to .tflite is not possible without TensorFlow Lite and TensorFlow operator compatibility.