Tensorflow Lite - ValueError: Невозможно установить тензор: несоответствие размеров - PullRequest
0 голосов
/ 25 августа 2018

Возможно, это будет глупый вопрос, но я новичок в машинном обучении и Tensorflow. Я пытаюсь запустить API обнаружения объектов на Raspberry Pi, используя Tensorflow Lite . Я пытаюсь изменить свой код с помощью этого примера

https://github.com/freedomtan/tensorflow/blob/deeplab_tflite_python/tensorflow/contrib/lite/examples/python/object_detection.py

Этот фрагмент кода обнаружит объект по изображению. Но вместо изображения я хочу обнаружить объект в режиме реального времени через камеру Пи. Я попытался изменить этот код, чтобы прочитать ввод с камеры вместо изображения. Вот мой кусок кода -

import numpy as np
from tensorflow.contrib.lite.python import interpreter as interpreter_wrapper
import cv2

cap = cv2.VideoCapture(0)
ret, image_np = cap.read()

PATH_TO_MODEL = "ssd_mobilenet_v1_coco.tflite"

interpreter = tf.contrib.lite.Interpreter(model_path=PATH_TO_MODEL)
interpreter.allocate_tensors()

input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

while True:
  # NxHxWxC, H:1, W:2
  height = input_details[0]['shape'][1]
  width = input_details[0]['shape'][2]
  ret, image_np = cap.read()

  image_np_expanded = np.expand_dims(image_np, axis=0)
  #if floating_model:
  image_np_expanded = (np.float32(image_np_expanded) - input_mean) / input_std

  #HERE I AM GETTING ERROR
  interpreter.set_tensor(input_details[0]['index'], image_np_expanded)

  if cv2.waitKey(25) & 0xFF == ord('q'):
    cv2.destroyAllWindows()
    break

но я получаю эту ошибку -

Traceback (most recent call last):
  File "New_object_detection.py", line 257, in <module>
    interpreter.set_tensor(input_details[0]['index'], image_np_expanded)
  File "/home/saurabh/.local/lib/python3.6/site-packages/tensorflow/contrib/lite/python/interpreter.py", line 151, in set_tensor
    self._interpreter.SetTensor(tensor_index, value)
  File "/home/saurabh/.local/lib/python3.6/site-packages/tensorflow/contrib/lite/python/interpreter_wrapper/tensorflow_wrap_interpreter_wrapper.py", line 133, in SetTensor
    return _tensorflow_wrap_interpreter_wrapper.InterpreterWrapper_SetTensor(self, i, value)
ValueError: Cannot set tensor: Dimension mismatch

Может кто-нибудь сказать мне, как исправить эту ошибку или предложить учебник для того же?

1 Ответ

0 голосов
/ 02 ноября 2018

Многие модели машинного обучения на основе изображений обучаются с использованием входных данных фиксированного размера.Исходное изображение может иметь разные размеры, но его размер будет изменен до фиксированного размера (например, 224x224x3).

Следовательно, необходимо изменить размер изображения перед подачей входных данных в модель.Это может хорошо работать, потому что тот факт, что данные обучения также изменяются в размерах.

Как уже отмечалось в комментарии выше, cv.resize может сделать свое дело.

...