Как импортировать интерпретатор tensorflow lite в Python?

Я разрабатываю встроенное приложение Tensorflow с использованием TF lite на Raspberry Pi 3b, работающего под управлением Raspbian Stretch. Я преобразовал график в формат плоского буфера (облегченный) и создал статическую библиотеку TFLite изначально на Pi. Все идет нормально. Но приложение - это Python, и, похоже, привязка к Python отсутствует. Руководство по разработке Tensorflow Lite (https://www.tensorflow.org/mobile/tflite/devguide) гласит: «Есть планы по привязке Python и демонстрационному приложению». Тем не менее, в / tensorflow / contrib / lite / python / интерпретатор_wrapper есть код оболочки, в котором есть все необходимые методы интерпретатора. Однако вызов этого из Python ускользает от меня.

Я создал оболочку SWIG, но на этапе сборки возникает множество ошибок. Нет файла readme.md, описывающего состояние интерпретатора_wrapper. Итак, мне интересно, сработала ли оболочка для других, и я должен продолжать, или она принципиально сломана, и мне следует поискать в другом месте (PyTorch)? Кто-нибудь нашел путь к привязкам TFLite Python для Pi3?


person bjuberchaub    schedule 18.06.2018    source источник


Ответы (2)


Мне удалось написать сценарии Python для классификации 1, обнаружение объектов (проверено с SSD MobilenetV {1,2}) 2 и семантическая сегментация изображения 3 на x86 под Ubuntu и на плате ARM64 под Debian.

  • Как создать привязку Python для кода TF Lite: Создайте pip с недавней основной веткой TensorFlow и установите ее (да, эти привязки были в TF 1.8. Однако я не знаю, почему они не установлены). См. 4, чтобы узнать, как создать и установить пакет pip TensorFlow.
person freedom    schedule 21.06.2018
comment
Я пробовал установить TF из ночных сборок на ci.tensorflow.org / view / Nightly / job / nightly-pi-python3 на Raspbian, но получаю сообщение об ошибке, что tensorlflow… не поддерживается на этой платформе. Учитывая, что тестирование RPi Google проводилось на 64-битной Ubuntu (github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/) и другие комментарии о том, что Tensorflow не работает на 32-разрядных целях (stackoverflow.com/questions/38646036/), я делаю вывод этот TF не работает на 32-битных целях. - person bjuberchaub; 02.07.2018
comment
Я не думаю, что это проблема 64-битного против 32-битного. Я предполагаю, что это что-то вроде Python 3.5, используемого в текущем Raspbian, и 3.4 пакета pip. Возможно, вы можете вместо этого попробовать ночной пакет Python 2.7 pip. - person freedom; 03.07.2018
comment
Вы правы насчет 64-битной. Кажется, что ссылки PyPi теперь обновлены, и я могу просто установить весь Tensorflow с помощью pip на обычный 32-битный RPi3. Задача решена. - person bjuberchaub; 07.07.2018
comment
@freedom Не могли бы вы предоставить образец кода для обнаружения объектов с использованием канала камеры вместо одного изображения? Я пытаюсь использовать его, но получаю ValueError: Невозможно установить тензор: Несоответствие размеров - person Saurabh Kachhia; 23.08.2018

Что касается использования интерпретатора TensorFlow Lite из Python, приведенный ниже пример скопирован из документация. Код доступен в master ветви TensorFlow GitHub..

Использование интерпретатора из файла модели

В следующем примере показано, как использовать интерпретатор Python TensorFlow Lite при наличии файла TensorFlow Lite FlatBuffer. В этом примере также показано, как выполнить вывод для случайных входных данных. Запустите help(tf.contrib.lite.Interpreter) в терминале Python, чтобы получить подробную документацию по интерпретатору.

import numpy as np
import tensorflow as tf

# Load TFLite model and allocate tensors.
interpreter = tf.contrib.lite.Interpreter(model_path="converted_model.tflite")
interpreter.allocate_tensors()

# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# Test model on random input data.
input_shape = input_details[0]['shape']
input_data = np.array(np.random.random_sample(input_shape), dtype=np.float32)
interpreter.set_tensor(input_details[0]['index'], input_data)

interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])
print(output_data)
person Nupur Garg    schedule 29.06.2018
comment
@Napu, Спасибо за ваш вклад. Проблема в том, что привязки Tensorflow не определены в Raspbian. Без этих привязок невозможно импортировать тензорный поток как tf. - person bjuberchaub; 02.07.2018
comment
Интерпретатор перешел из модуля contrib непосредственно в тензорный поток (tf.lite.Interpreter вместо tf.contrib.lite.Interpreter). Документация теперь находится по адресу github.com/ tenorflow / tensorflow / blob / master / tensorflow / lite / - person Morris Franken; 19.03.2019