Можно ли настроить TFLite для возврата модели с квантованием смещения в int8?

Я работаю с Keras / Tensorflow над разработкой ANN, которая будет развернута на MCU начального уровня. Для этого я квантовал исходную ИНС, используя механизм квантования после обучения, предлагаемый Tensorflow Lite. Если веса действительно квантованы в int8, смещения были преобразованы из float в int32. Учитывая, что я пытаюсь реализовать эту ИНС в CMSIS-NN, это проблема, поскольку они поддерживают только данные int8 и int16.

Можно ли настроить TF Lite для квантования смещений до int8? Ниже следует код, который я выполняю:

def quantizeToInt8(representativeDataset):
    # Cast the dataset to float32
    data = tf.cast(representativeDataset, tf.float32)
    data = tf.data.Dataset.from_tensor_slices((data)).batch(1)

    # Generator function that returns one data point per iteration
    def representativeDatasetGen():
        for inputValue in data:
            yield[inputValue]
    
    # ANN quantization
    model = tf.keras.models.load_model("C:/Users/miguel/Documents/Universidade/PhD/Code_Samples/TensorFlow/originalModel.h5")

    converter = tf.lite.TFLiteConverter.from_keras_model(model)
    converter.optimizations = [tf.lite.Optimize.DEFAULT]
    converter.representative_dataset = representativeDatasetGen
    converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
    converter.target_spec.supported_types = [tf.int8]
    converter.inference_type = tf.int8
    converter.inference_input_type = tf.int8  # or tf.uint8
    converter.inference_output_type = tf.int8  # or tf.uint8
    tflite_quant_model = converter.convert()

    return tflite_quant_model

person Miguel Costa    schedule 07.08.2020    source источник
comment
Настроить TFLite для этого невозможно. Смещения намеренно заложены в 32, иначе точность квантования не будет хорошей. Чтобы это работало, вам нужно было бы добавить новую операцию или настраиваемую операцию, а затем все вместе придумать настраиваемый инструмент квантования. Есть ли у вас другой обходной путь, например: другой MCU?   -  person Meghna Natraj    schedule 10.08.2020


Ответы (1)


Из комментариев

Невозможно настроить TFLite для этого. Biases намеренно int32 в противном случае точность квантования была бы плохой. Чтобы это сработало, вам нужно будет добавить новую операцию или пользовательскую операцию, а затем все вместе придумать собственный инструмент квантования (перефразировано из Meghna Natraj).

person Community    schedule 22.10.2020