TensorFlow 2.0 TFLite Квантованный экспорт с весами UINT8

#python #tensorflow #tensorflow2.0 #convolution #quantization

#питон #тензорный поток #тензорный поток 2,0 #свертка #квантование

Вопрос:

В предыдущей версии TensorFlow, которую я использовал (1.9), я смог квантовать свою сеть с помощью весов UINT8, сохраненных на входных данных операции Conv2D. Теперь, когда TensorFlow 2.0 использует модель Keras, квантование после обучения дает мне веса INT8, при этом, по-видимому, нет опции для неподписанных весов. Разве невозможно управлять знаком весов в слоях Conv с помощью TF 2.0?

 import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
def representative_dataset_gen():
  for _ in range(num_calibration_steps):
    # Get sample input data as a numpy array in a method of your choosing.
    yield [input]
converter.representative_dataset = representative_dataset_gen
# there is no such tf.lite.OpsSet.TFLITE_BUILTINS_UINT8
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8  # or tf.int8 ( note this has zero effect on the tensors produced for Conv2D operations -- all of which include signed int8 unless you were to output the model as float16/32 )
converter.inference_output_type = tf.uint8  # or tf.int8
tflite_quant_model = converter.convert()
 

Ответ №1:

Самая последняя версия TensorFlow (2.5) использует более надежную схему квантования в сверточных сетях, где каждая глубина фильтра соответствует различным уровням квантования. На текущий момент нет способа использовать предыдущий метод.

Комментарии:

1. Привет, у меня аналогичная потребность в квантовании моей модели до UINT8, можете ли вы поделиться, как это сделать в tensorflow 1.9? Большое спасибо!

2. Означает ли это, что квантование UINT8 не поддерживается TF 2.x?

3. @ai2ys Из того, что я могу сказать, да. Подписанные методы int8 — это путь вперед, и я могу сообщить, что это определенно повышает производительность в его текущей реализации, если это поможет.

4. @Kalen Я специально прошу поддержки uint8 из-за аппаратного обеспечения, поддерживающего только операции uint8. Я надеялся использовать TF для задачи квантования вместо инструмента поставщика.

5. @ai2ys Насколько я могу понять, скрипты tf2x, участвующие в экспорте, имели нулевую функциональность при предоставлении ему uint8 в качестве параметров. Я перепробовал все доступные на тот момент перестановки, но безрезультатно. Я бы рекомендовал использовать более раннюю версию.