Неподдерживаемый оператор TensorFlow: деквантовать - PullRequest
0 голосов
/ 03 мая 2018

Использование Tensorflow 1.6.0

преобразование retrained_graph.pb квантованной модели мобильной сети в tf-lite

toco --input_format=TENSORFLOW_GRAPHDEF   --input_file=/home/sudheer_sure/r_mobil
enet/tf_files/retrained_graph.pb   --output_format=TFLITE   --output_file=/home/sudheer_sure/r_mobilenet/tf_files/mobilenet_v1_1.0_224_quantized.lite   --inference_type=QUANTI
ZED_UINT8   --inference_input_type=QUANTIZED_UINT8   --input_arrays=input   --output_arrays=final_result   --input_shapes=1,224,224,3  --mean_values=128   --std_values=128 --d
efault_ranges_min=0 --default_ranges_max=6

получая следующую ошибку:

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

Может кто-нибудь, пожалуйста, помогите мне

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Цель квантованного .tflite - сохранить все в 8-битном формате. Если мы конвертируем fp32 pb в tflite 8bit, используя tfliteConverter / TOCO, то слои Dequantize не будут введены (в отличие от инструмента «Преобразование графика», в котором был доступен захват динамического диапазона).

Кроме того, 8-битная модель tflite должна содержать минимальные / максимальные диапазоны на уровень для активаций (будущая поддержка на канал для весов).

  1. Эти диапазоны используются для преобразования int32 из свертки обратно в 8 бит.
  2. Эти диапазоны должны быть зафиксированы через слои fakeQuant, которые должны быть введены в график при повторной подготовке / тонкой настройке.
  3. Если эти диапазоны недоступны, вы можете использовать фиктивную квантизацию, но точность упадет, потому что для каждого слоя установлены одинаковые диапазоны.

Это официальный способ генерации полностью квантованного 8-битного tflite. Конечно, инструмент tflite находится в стадии разработки, и некоторые операции не поддерживаются.

Используя унаследованный путь для 8 бит (инструмент Преобразование графика), у нас была возможность ввести операции печати на графике, захватить диапазоны с помощью набора калибровочных данных и зафиксировать диапазоны (мин / макс) в модели 8bit.pb. Переобучение не было необходимости.

К сожалению, этот вид «квантования после поезда» не поддерживается в tflite.

0 голосов
/ 22 июня 2018

Я также столкнулся с той же проблемой при попытке преобразовать файл protobuf (pb) (после оптимизации / квантования с помощью инструмента graph_transforms) в tflite с помощью инструмента toco.

Возврат >> квантование / округление с использованием graph_transforms >> toco [Не работает]

Но это работает для меня, когда я использую исходный файл pb с переподготовкой в ​​качестве ввода toco.

Retrain >> toco [работа]

работает следующая команда:

bazel-bin/tensorflow/contrib/lite/toco/toco --input_file=~/tf_files/retrained_graph_mobileNet_v2_100_224_card.pb --output_file=~/tf_files/retrained_graph_mobileNet_v2_100_224_q_card.tflite --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --inference_type=QUANTIZED_UINT8 --input_shape=1,224,224,3 --input_array='Placeholder' --output_array='final_result' --mean_value=128 --std_value=128 --default_ranges_min=0 --default_ranges_max=6

Какую модель вы используете Inception / mobilener? Убедитесь, что input_array и output_array такие же, как на графике pb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...