When converting the TensorFlow model below to a float-type TFLite model using:
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.inference_input_type = tf.float32
converter.inference_output_type = tf.float32
tflite_model = converter.convert()
everything works fine. However, when converting this TFLite model to a Hailo-8 model using:
chosen_hw_arch = "hailo8"
model_name = "hailo8_model"
# Parsing the model to Hailo format
runner = ClientRunner(hw_arch=chosen_hw_arch)
hn, npz = runner.translate_tf_model(tflite_model_path, model_name)
the output size changes.
Specifically, with an input of size [1, 1, 258, 91], the original model produces an output of [1, 1, 258, 91], but after converting to a Hailo-8 model, the output becomes [1, 1, 162, 91].
Here is the TensorFlow model code:
input_dim = 91
seq_len = 258
basic_frames = 2048
decoder_const = 6
output_units = 1024
dropout_p = 0.5
def NETtf(seq_len, input_dim, basic_frames, output_units, decoder_const, dropout_p):
input_layer = layers.Input(shape=(1, seq_len, input_dim))
x = layers.Conv2D(filters=basic_frames, kernel_size=(1, 7), strides=(1, 1), padding='valid', use_bias=True)(input_layer)
x = layers.ReLU()(x)
x = layers.MaxPooling2D(pool_size=(1, 3), strides=(1, 3), padding='valid')(x)
x = layers.Conv2D(filters=basic_frames, kernel_size=(1, 7), strides=(1, 1), padding='valid', use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.MaxPooling2D(pool_size=(1, 3), strides=(1, 3), padding='valid')(x)
x = layers.Conv2D(filters=basic_frames, kernel_size=(1, 3), strides=(1, 1), padding='valid', use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Conv2D(filters=basic_frames, kernel_size=(1, 3), strides=(1, 1), padding='valid', use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Conv2D(filters=basic_frames, kernel_size=(1, 3), strides=(1, 1), padding='valid', use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Conv2D(filters=basic_frames, kernel_size=(1, 3), strides=(1, 1), padding='valid', use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.MaxPooling2D(pool_size=(1, 3), strides=(1, 3), padding='valid')(x)
x = layers.Flatten()(x)
x = layers.Dense(output_units, use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Dropout(dropout_p)(x)
x = layers.Dense(output_units, use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Dropout(dropout_p)(x)
x = layers.Dense(output_units, use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Dropout(dropout_p)(x)
x = layers.Dense(decoder_const * basic_frames, use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Dropout(dropout_p)(x)
x = layers.Reshape((1, decoder_const, basic_frames))(x)
x = layers.Conv2DTranspose(filters=basic_frames, kernel_size=(1, 5), strides=(1, 3), padding='valid', use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Conv2DTranspose(filters=basic_frames, kernel_size=(1, 3), strides=(1, 1), padding='valid', use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Conv2DTranspose(filters=basic_frames, kernel_size=(1, 3), strides=(1, 1), padding='valid', use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Conv2DTranspose(filters=basic_frames, kernel_size=(1, 3), strides=(1, 1), padding='valid', use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Conv2DTranspose(filters=basic_frames, kernel_size=(1, 9), strides=(1, 3), padding='valid', use_bias=True)(x)
x = layers.ReLU()(x)
x = layers.Conv2DTranspose(filters=input_dim, kernel_size=(1, 9), strides=(1, 3), padding='valid', use_bias=True)(x)
model = Model(inputs=input_layer, outputs=x)
return model
What could be causing this issue, and how can I resolve it?