Tensorflow Lite - ValueError: Cannot set tensor: Dimension mismatch

Viewed 7841

This is probably going to be a stupid question but I am new to machine learning and Tensorflow. I am trying to run object detection API on Raspberry Pi using Tensorflow Lite. I am trying to modify my code with the help of this example

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

This piece of code will detect object from a image. But instead of a image I want to detect object on real time through Pi camera. I tried to modified this code to read input from camera instead of image. Here is my piece of code -

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

but I am getting this error -

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

Can anyone please tell me how to fix this error or suggest a tutorial for the same?

1 Answers

Many image-based machine learning models are trained with fixed-sized inputs. The original image may come with different dimensions, but get resized to a fixed size (e.g. 224x224x3).

Therefore, you need to resize the image before feeding the input to the model. It may work well because the fact that the training data are also resized from various sizes.

As the comment above already pointed out, cv.resize can do the trick.

Related