Как AutoML Vision обрабатывает изображения размером менее 224x224 пикселей?

Я обучил AutoML Vision с образцами изображений 80x80x3. Обучение прошло успешно, и я скачал модель edge tflite. При реализации модели tflite в python, согласно этому руководству от tenorflow, я понял, что входной размер моделей tflite - 224x224x3.

У меня вопрос:

  • Как AutoML Vision обрабатывает изображения размером менее 224x224 во время обучения? Изменяет ли AutoML Vision размер изображений до 224x224 с интерполяцией?

Для лучшего прогнозирования я хотел бы обрабатывать новые изображения точно так же, как AutoML Vision обрабатывал изображения во время обучения.

При подаче в модель изображений 80x80 с входной формой (1, 80, 80, 3) я получаю исключение «Невозможно установить тензор: несоответствие размеров», см. Код ниже.

Подача изображений 224x224 работает без исключений. Однако я бы хотел использовать изображения с разрешением 80x80x3, которые я использовал для обучения. Или предварительно обработайте изображения размером 80x80x3, как они были во время обучения в AutoML Vision, например, изменив их размер до 224x224x3 или каким-либо образом AutoML Vision справился с этим.

test_sample.shape

Out: (80, 80, 3)

test_sample = test_sample.reshape(1, 80, 80, 3)

Out: (1, 80, 80, 3)    

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

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

print(interpreter.get_input_details())

Out: [{'name': 'image', 'index': 0, 'shape': array([  1, 224, 224,   3], dtype=int32), 'dtype': <class 'numpy.uint8'>, 'quantization': (0.007874015718698502, 128)}]

output_details = interpreter.get_output_details() 

# Test model on input data. 
input_data = np.array(test_sample, dtype=np.uint8) 
interpreter.set_tensor(input_details[0]['index'], input_data) 

interpreter.invoke() 


Out: ValueError: Cannot set tensor: Dimension mismatch 
ValueError                                Traceback (most recent call last)
in engine
----> 1 interpreter.set_tensor(input_details[0]['index'], input_data)

/home/cdsw/.local/lib/python3.6/site-packages/tensorflow/lite/python/interpreter.py in set_tensor(self, tensor_index, value)
   173       ValueError: If the interpreter could not set the tensor.
   174     """
--> 175     self._interpreter.SetTensor(tensor_index, value)
   176 
   177   def resize_tensor_input(self, input_index, tensor_size):

/home/cdsw/.local/lib/python3.6/site-packages/tensorflow/lite/python/interpreter_wrapper/tensorflow_wrap_interpreter_wrapper.py in SetTensor(self, i, value)
   134 
   135     def SetTensor(self, i, value):
--> 136         return _tensorflow_wrap_interpreter_wrapper.InterpreterWrapper_SetTensor(self, i, value)
   137 
   138     def GetTensor(self, i):

ValueError: Cannot set tensor: Dimension mismatch

person Toskavos    schedule 10.09.2019    source источник


Ответы (2)


Он изменяет размер изображения для вас. Я наблюдал это, используя netron для проверки моделей tflite и tensorflow. Найдите вход и проследите за выходом за декодером до операции изменения размера.

person shortcipher3    schedule 01.01.2020
comment
Может быть, мне стоит задать новый вопрос, но что, если размер ввода не квадратный? Я создал файл tflite из AutoML, а размер ввода - 224x224. Но мои входы имеют прямоугольную форму. Мысли о том, как к этому подойти? - person user402516; 18.02.2020

Я рекомендую вам использовать эту реализацию

Установить dtype

# check the type of the input tensor
floating_model = input_details[0]['dtype'] == np.float32

Измените размер изображения в соответствии с требуемой высотой и шириной модели.

height = input_details[0]['shape'][1]
width = input_details[0]['shape'][2]
img = Image.open(args.image).resize((width, height))

Установить входные данные

input_data = np.expand_dims(img, axis=0)

Вот полный пример https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/examples/python/label_image.py.

person Emmanuel Beltran    schedule 01.10.2019