В настоящее время я работаю над сверхразрешением одного изображения, и мне удалось заморозить существующий файл контрольной точки и преобразовать его в tenorflow lite. Однако при выполнении логического вывода с использованием файла .tflite время, необходимое для повышения дискретизации одного изображения, как минимум в 4 раза больше, чем при восстановлении модели с использованием файла .ckpt.
Вывод с использованием файла .ckpt выполняется с помощью session.run (), в то время как вывод с использованием файла .tflite выполняется с помощью интерпретатора.invoke (). Обе операции выполнялись на виртуальной машине Ubuntu 18, работающей на обычном ПК.
Чтобы узнать больше об этой проблеме, я запустил top
в отдельном терминале, чтобы увидеть коэффициент использования ЦП при выполнении любой из операций. Уровень использования достигает 270% с файлом .ckpt, но остается примерно на уровне 100% с файлом .tflite.
interpreter.set_tensor(input_details[0]['index'], input_image_reshaped)
interpreter.set_tensor(input_details[1]['index'], input_bicubic_image_reshaped)
start = time.time()
interpreter.invoke()
end = time.time()
vs
y = self.sess.run(self.y_, feed_dict={self.x: image.reshape(1, image.shape[0], image.shape[1], ch), self.x2: bicubic_image.reshape(1, self.scale * image.shape[0], self.scale * image.shape[1], ch), self.dropout: 1.0, self.is_training: 0})
Одна гипотеза состоит в том, что tensorflow lite не настроен для многопоточности, а другая - что tenorflow lite оптимизирован для процессоров ARM (а не для процессоров Intel, на которых работает мой компьютер), и поэтому он медленнее. Однако я не могу сказать наверняка и не знаю, как отследить корень проблемы - надеюсь, кто-то будет более осведомлен об этом?