Демонстрация API-интерфейса обнаружения объектов Tensorflow 2.0 Аргумент int () должен быть строкой, байтовым объектом или числом, а не 'Tensor' - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь реализовать код из object_detection_tutorial.ipynb на моей локальной машине, чтобы изменить некоторые части и поиграть. Этот урок - большой беспорядок, и я очень стараюсь исправить любую проблему, с которой столкнулся, но для этого у меня не было никакой подсказки. Итак, вот и я.

Я использую Windows 10 и Visual Studio 2019 Professional. Любой пакет, связанный с Tensorflow, обновлен, и у меня без проблем работает другое приложение машинного обучения.

Я хотел бы отметить, что я преобразовал этот код из его исходного формата, который называется ipynb. (сохранить как .py)

Если вам нужна дополнительная информация, пожалуйста, спросите меня, потому что мне действительно нужно понять эту концепцию в рабочем коде.

num_detections = int (output_dict.pop ('num_detections)')) эта часть выдает ошибку:

Аргумент error int () должен быть строкой, байтовым объектом или числом, а не' Tensor '

def run_inference_for_single_image(model, image):
image = np.asarray(image)
# The input needs to be a tensor, convert it using `tf.convert_to_tensor`.
input_tensor = tf.convert_to_tensor(image)
# The model expects a batch of images, so add an axis with `tf.newaxis`.
input_tensor = input_tensor[tf.newaxis,...]

# Run inference
output_dict = model(input_tensor)

# All outputs are batches tensors.
# Convert to numpy arrays, and take index [0] to remove the batch dimension.
# We're only interested in the first num_detections.

num_detections = int(output_dict.pop('num_detections'))

output_dict = {key:value[0, :num_detections].numpy() 
               for key,value in output_dict.items()}
output_dict['num_detections'] = num_detections

# detection_classes should be ints.
output_dict['detection_classes'] = 
output_dict['detection_classes'].astype(np.int64)

# Handle models with masks:
if 'detection_masks' in output_dict:
  # Reframe the the bbox mask to the image size.
  detection_masks_reframed = utils_ops.reframe_box_masks_to_image_masks(
           output_dict['detection_masks'], output_dict['detection_boxes'],
           image.shape[0], image.shape[1])      
  detection_masks_reframed = tf.cast(detection_masks_reframed > 0.5,
                                   tf.uint8)
  output_dict['detection_masks_reframed'] = detection_masks_reframed.numpy()

return output_dict

Когда я печатаюя вижу несколько переменных, связанных с output_dict;

тензор ввода

Tensor("strided_slice:0", shape=(1, 636, 1024, 3), dtype=uint8)

модель (input_tensor)

{'detection_scores': 
< tf.Tensor 'StatefulPartitionedCall_1:2' shape=(?, 100) dtype=float32 >, 
'detection_classes': 
< tf.Tensor 'StatefulPartitionedCall_1:1' shape=(?, 100) dtype=float32 >, 
'num_detections': 
< tf.Tensor 'StatefulPartitionedCall_1:3' shape=(?,) dtype=float32 >, 
'detection_boxes': 
< tf.Tensor 'StatefulPartitionedCall_1:0' shape=(?, 100, 4) dtype=float32 >
}

output_dict

{'detection_scores': 
< tf.Tensor 'StatefulPartitionedCall:2' shape=(?, 100) dtype=float32 >, 
'detection_classes': 
< tf.Tensor 'StatefulPartitionedCall:1' shape=(?, 100) dtype=float32 >, 
'num_detections': 
< tf.Tensor 'StatefulPartitionedCall:3' shape=(?,) dtype=float32 >, 
'detection_boxes': 
< tf.Tensor 'StatefulPartitionedCall:0' shape=(?, 100, 4) dtype=float32 >
}

output_dict.pop

Tensor("StatefulPartitionedCall:3", shape=(?,), dtype=float32)

WARNING:tensorflow:Tensor._shape is private, use Tensor.shape instead. 
Tensor._shape will eventually be removed.

1 Ответ

1 голос
/ 04 ноября 2019

Ребята, я исправил проблему. Очевидно, у меня была проблема с моей установкой Tensorflow. Итак, я удалил все связанные установки и переустановил все.

Проблема должна быть связана с этим, потому что TF v2.0 уже имеет преобразование Tensor в int.

...