Поддержка графического процессора Tensorflow Lite для детектора объектов - PullRequest
0 голосов
/ 29 января 2019

Я прочитал страницу https://www.tensorflow.org/lite/performance/gpu И мне было интересно, может ли кто-нибудь помочь мне разобраться, как настроить мои входные данные для "Обнаружения объектов SSD MobileNet".Вы получаете только файл: «mobile_ssd_v2_float_coco.tflite»

Я пробовал 320x320 * 3 * 4, потому что, если я попробовал «старое» разрешение изображения 300x300, я получил бы ошибку, сказав, что размеры массивов несовпадают, и новый размер соответствует 320x320.

Но теперь, когда я вызываю run (input, output), метод никогда не возвращает ... никаких ошибок или чего-либо еще: (

Кто-нибудь есть какие-либо советыпотому что сейчас я действительно хватаюсь за соломинку.

Заранее спасибо.

1 Ответ

0 голосов
/ 10 марта 2019

Вы можете проверить спецификации некоторых моделей, выполнив эти команды в python Как преобразовать выходные данные отinterter.run в java Печать input_details приводит к:

[{'name': 'normalized_input_image_tensor', 'index': 306, 'shape': array([  1, 320, 320,   3], dtype=int32), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0)}]

форме массива [1, 320, 320, 3], поэтому вход должен быть изображением 320x320.Детали вывода:

[{'name': 'raw_outputs/box_encodings', 'index': 307, 'shape': array([   1, 2034,    4], dtype=int32), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0)}, {'name': 'raw_outputs/class_predictions', 'index': 308, 'shape': array([   1, 2034,   91], dtype=int32), 'dtype': <class 'numpy.float32'>, 'quantization': (0.0, 0)}]

У нас есть 2 выхода со следующей формой: [1, 2034, 4] и [1, 2034, 91]. Поэтому подготовьте 2 массива с точным размером, например, в java android

private float[][][] out1;
private float[][][] out2;
out1 = new float[1][2034][4];
out2 = new float[1][2034][91];

затем добавьте их на пример карты java:

private Map<Integer, Object> output_map = new TreeMap<>();
output_map.put(0, out1);
output_map.put(1, out2);

и запустите с:

tflite.runForMultipleInputsOutputs(input_data, output_map);

tflite - интерпретатор, input_data - преобразованное изображение

У вас будут данные в массивах.Я предполагаю, что в out1 будут ограничивающие прямоугольники, а в out2 классы / оценки?Вам нужно провести еще несколько тестов.

Пример кода https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/java/demo/app/src/main/java/com/example/android/tflitecamerademo Конечно, вам нужно внести некоторые изменения, чтобы он работал с моделью обнаружения объектов.

...