Невозможно правильно преобразовать модель tf.keras в квантованный формат для кораллового TPU - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь преобразовать модель tf.keras на основе mobilenetv2 с транспонированной сверткой с использованием последней tf-nighlty . Вот код конверсии

#saved_model_dir='/content/ksaved'  # tried from saved model also
#converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)

converter = tf.lite.TFLiteConverter.from_keras_model(reshape_model)
converter.experimental_new_converter=True
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8

converter.representative_dataset = representative_dataset_gen

tflite_quant_modell = converter.convert()
open("/content/model_quant.tflite", "wb").write(tflite_quant_modell)

Конвертация прошла успешно (в Google Colab); но он имеет операторов квантования и деквантования на концах (как видно с использованием netron). Все операторы, кажется, поддерживаются. Репрезентативный набор данных изображения в формате float32 в генераторе, а модель имеет 4-канальный вход float32 по умолчанию Похоже, нам нужен UINT8 вход и выход внутри модели для кораллового TPU . Как мы можем правильно выполнить это преобразование?

Ссылка: -

  1. Полное целочисленное квантование весов и активаций

  2. Как квантовать входы и выходы оптимизированной модели tflite

  3. Компилятор TPU Coral Edge не может преобразовать модель tflite: Модель не квантована

Я пытался использовать 'tf.compat.v1.lite.TFLiteConverter.from_keras_model_file' вместо версии v2. Я получил ошибку: " Квантование еще не поддерживается для op: TRANSPOSE_CONV"при попытке квантовать модель в последней версии tf 1.15 (с использованием репрезентативного набора данных) и" Внутренняя ошибка компилятора. Прерывание!"из компилятора кораллового ТПУ с использованием квантованного tf2.0 tflite

Модель Tflite @ https://github.com/tensorflow/tensorflow/issues/31368

enter image description here

Кажется, что работает до последний конституционный блок (1x7x7x160 ) Ошибка компилятора (Aborting) не дает никакой информации о возможном причина и все типы сверточных слоев, кажется, поддерживаются в соответствии с документами кораллов.

Coral do c: https://coral.ai/docs/edgetpu/models-intro/#quantization

1 Ответ

1 голос
/ 18 февраля 2020

Здесь - пример фиктивной модели квантования модели keras. Обратите внимание, что я использую строгий tf1.15 для примера, потому что tf2.0 устарел:

converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8

с API from_keras_model. Я думаю, что самое запутанное в этом то, что вы все еще можете назвать это, но ничего не происходит. Это означает, что модель все еще будет принимать входные данные с плавающей точкой. Я заметил, что вы используете tf2.0, потому что from_keras_model это API-интерфейс tf2.0. Коралл все еще предлагает , используя tf1.15 для конвертации модели. Я предлагаю понизить тензор потока или, может быть, даже просто использовать это (при сохранении tf2.0, оно может работать или не работать):

tf.compat.v1.lite.TFLiteConverter.from_keras_model_file

Подробнее об этом здесь .

...