Как исправить: на Android вывод TensorFlow Lite намного медленнее, чем стандартный вывод TensorFlow - PullRequest
0 голосов
/ 18 мая 2019

Я разработал и обучил сверточную нейронную сеть с TensorFlow и Keras.Теперь я хочу развернуть эту модель на устройстве Android, где она мне нужна для приложения реального времени.

Я нашел два способа развернуть модель Keras на Android:

  1. Остановите график в виде файла .pb (например, «model.pb»), а затем используйте «TensorFlowInferenceInterface» на устройстве Android.
  2. Преобразуйте замороженный график в модель .tflite (например, «model.tflite '), а затем используйте интерпретатор TesorFlow Lite на устройстве Android.

Оба подхода работают на устройстве Android и дают ожидаемые результаты.Тем не менее, к моему большому удивлению, вывод с интерпретатором TensorFlow Lite занимает как минимум вдвое больше времени, чем вывод с TensorFlowInterface (конечно, на том же устройстве).Я проверил это на разных устройствах, и результаты одинаковы во всех случаях.

Для создания модели tflite я использую следующий код:

tflite_convert --graph_def_file=" + frozen_graph_name + "
--output_file=" + TFLite_file_name + " --inference_type=FLOAT 
--input_type=FLOAT --input_shape=1,768,64,1 
--input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE 
--input_arrays=input_1 --output_arrays=conv2d_10/Sigmoid" \ 

В качестве альтернативы я попробовал следующий код Python

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_keras_model_file('keras_model.h5')        
tflite_model = converter.convert()
open(TFLite_file_name, "wb").write('model.tflite')

В обоих случаях результат былто же самое - вывод tflite был намного медленнее, чем вывод TensorFlowInterface на всех устройствах Android.Добавление флага оптимизации «OPTIMIZE_FOR_LATENCY» увеличило время вывода tflite в два раза.

Я проверил Квантование TensorFlow Lite не может улучшить задержку вывода , Почему TensorFlow Lite медленнее, чемTensorFlow на рабочем столе? и Вывод объекта Tensorflow медленный на CPU , но не получил удовлетворительных ответов.

Согласно всем документам, я обнаружил, что TFLite должен работать намного быстрееУстройства Android.Итак, что я могу сделать, чтобы ускорить мой вывод TFLite на Android?На моем ПК TFLite действительно быстрее, что еще более удивительно.

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 21 мая 2019

Возможно, вы захотите профилировать вашу модель с помощью инструмента TFLite Benchmark , который дает вам среднее время вывода и даже задержки на уровне операции.

Если наблюдаемая вами задержка значительно больше, чемКак показывает инструмент тестирования, в вашем коде вывода может быть что-то неэффективное.Если нет, то некоторые операции могут стать узким местом, и вы можете подать заявку на Github.

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