Почему время выполнения квантованной модели Uint8 TF-lite медленнее, чем у версии F32? - PullRequest
1 голос
/ 16 июня 2020

Я использую TF1.12 для преобразования простой модели mnist с двумя слоями conv2d в TF-lite.

F32:

`*tflite_convert --output_file model_lite/conv_net_f32.tflite \
 --graph_def_file frozen_graphs/conv_net.pb  \
 --input_arrays "input" \
 --input_shapes "1,784" \
 --output_arrays output \
 --output_format TFLITE*`

UINT8:
 tflite_convert --output_file model_lite/conv_net_uint8.tflite \
 --graph_def_file frozen_graphs/conv_net.pb  \
 --input_arrays "input" \
 --input_shapes "1,784" \
 --output_arrays output \
 --output_format TFLITE \
 --mean_values 0\
 --std_dev_values 255\
 --default_ranges_min 0 \
 --default_ranges_max 255 \
 --inference_type QUANTIZED_UINT8 \
 --inference_input_type QUANTIZED_UINT8*

Однако я обнаружил, что время выполнения квантованной версии uint8 медленнее, чем f32.

Результаты:

Results:

Для меня это не имеет смысла

Кто-нибудь знает причину?

Спасибо за любой вклад!

1 Ответ

1 голос
/ 17 июня 2020

Я думаю, вам следует попробовать преобразование с помощью следующей команды:

 tflite_convert --output_file model_lite/conv_net_uint8.tflite \
 --graph_def_file frozen_graphs/conv_net.pb  \
 --input_arrays "input" \
 --input_shapes "1,784" \
 --output_arrays output \
 --output_format TFLITE \
 --mean_values 128\
 --std_dev_values 127
 --default_ranges_min 0 \
 --default_ranges_max 1 \
 --inference_type QUANTIZED_UINT8 \
 --inference_input_type QUANTIZED_UINT8*

default_ranges_min и default_ranges_max соответствуют максимальным и минимальным значениям вашей сети, как в диапазоне ваших функций активации. Если вы используете активацию, например relu6, вам следует изменить default_ranges_max на 6.

См. this Stack Overflow question для получения информации о mean_values и std_dev_values. Они зависят от данных вашей тренировки.

...