tfliteの仕様についての質問です。  
※バージョンはtensorflow-gpu 2.2.0を使用、実験的に軽量なCNNモデルを使用

tfliteでモデルを16bitに変換して推論する際、入力画像の型をfloat32型に変換した場合は  
推論できるのですが、入力画像をfloat16型などの他の型に変換した場合、以下のエラーが発生してしまいます。  
ValueError: Cannot set tensor: Got value of type FLOAT16 but expected type
FLOAT32 for input 0, name: input_1

そこで、以下の質問です。  
①入力及び出力がflaot32型以外の型で処理することは可能か。  
①が可能であれば、tfliteで入力及び出力の型を設定する実装方法を教えて頂きたいです。

以下、コードです。

```

    import os
    import numpy as np
    from PIL import Image
    Image.MAX_IMAGE_PIXELS = None
    from PIL import ImageFile
    ImageFile.LOAD_TRUNCATED_IMAGES = True
    import tensorflow as tf
    from tensorflow.keras.layers import *
    from tensorflow.keras.models import Model
    
    def MyModel(input_shape, n_labels):
        kernel = 3
        inputs = Input(shape=input_shape)
    
        x = Conv2D(32, (kernel, kernel), padding="same")(inputs)
        x = Conv2D(n_labels, (1, 1), padding="valid")(x)
        x = Reshape((input_shape[0] * input_shape[1], n_labels), input_shape=(input_shape[0], input_shape[1], n_labels),)(x)
        
        return Model(inputs=inputs, outputs=x)
    
    image = Image.open('./XXXXX.tif')
    img = image.resize((13000, 13000))
    input_img = np.array(img, np.float16)
    input_img = input_img.reshape(1, input_img.shape[0], input_img.shape[0], 3)
    
    model = MyModel(input_shape=(img.size[0],img.size[0], 3), n_labels=12)
    
    converter = tf.lite.TFLiteConverter.from_keras_model(model)
    converter.optimizations = [tf.lite.Optimize.DEFAULT]
    converter.target_spec.supported_types = [tf.float16]
    tflite_fp16_model = converter.convert()
    with open("model_fp16.tflite", "wb") as f:
        f.write(tflite_fp16_model)
    
    # TFLiteモデルの読み込み
    interpreter = tf.lite.Interpreter(model_path="model_fp16.tflite")
    interpreter.allocate_tensors()
    
    input_details = interpreter.get_input_details()
    output_details = interpreter.get_output_details()
    
    input_shape = input_details[0]['shape']
    interpreter.set_tensor(input_details[0]['index'], input_img)
    interpreter.invoke()
    out = interpreter.get_tensor(output_details[0]['index'])
    print(input_img.shape)
    print(out)
    
```
CC BY-SA 4.0
2022-09-22T04:22:50.677
91229
2022-09-22T04:22:50.677
54474
question
tensorflow
tfliteの入力の型変換について