координаты ограничительной рамки в тензорном потоке - PullRequest
0 голосов
/ 05 февраля 2019

Мне нужны координаты предсказанной ограничивающей рамки из моделей тензорного потока.
Я использую сценарий обнаружения объекта из здесь .
После получения ответов на некоторые вопросы о стековом потоке я изменил последнийблок обнаружения как

for image_path in TEST_IMAGE_PATHS:
  image = Image.open(image_path)
  # the array based representation of the image will be used later in order to prepare the
  # result image with boxes and labels on it.
  image_np = load_image_into_numpy_array(image)
  # Expand dimensions since the model expects images to have shape: [1, None, None, 3]
  image_np_expanded = np.expand_dims(image_np, axis=0)
  # Actual detection.
  output_dict = run_inference_for_single_image(image_np, detection_graph)
  # Visualization of the results of a detection.
  width, height = image.size
  print(width,height)
  ymin = output_dict['detection_boxes'][5][0]*height
  xmin = output_dict['detection_boxes'][5][1]*width
  ymax = output_dict['detection_boxes'][5][2]*height
  xmax = output_dict['detection_boxes'][5][3]*width
  #print(output_dict['detection_boxes'][0])
  print (xmin,ymin)
  print (xmax,ymax)

Однако в output_dict ['detection_boxes'] есть 100 кортежей.
Существует 100 кортежей даже для тех изображений, для которых он не смог предсказать

Что яхот - это координаты всех ограничивающих рамок одного изображения.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

После строки expand_dims вы можете добавить эти коды.Переменная Filter_boxes даст ограничивающие прямоугольники, значения предсказания которых больше, чем 0,5.

  (boxes, scores, classes, num) = sess.run(
      [detection_boxes, detection_scores, detection_classes, num_detections],
      feed_dict={image_tensor: image_np_expanded})
  indexes = []
  import os
  for i in range (classes.size):
    if(classes[0][i] in range(1,91) and scores[0][i]>0.5):
        indexes.append(i)
  filtered_boxes = boxes[0][indexes, ...]
  filtered_scores = scores[0][indexes, ...]
  filtered_classes = classes[0][indexes, ...]
  filtered_classes = list(set(filtered_classes))
  filtered_classes = [int(i) for i in filtered_classes]
0 голосов
/ 06 февраля 2019

Если вы проверяете файл pipe.config используемой модели, вы можете увидеть, что в некоторых местах максимальное количество ящиков установлено на 100. Например, в файле конфигурации ssd_mobilenet_v1 , которая является моделью в демонстрационной записной книжке, вы можете увидеть ее под

post_processing {
  batch_non_max_suppression {
    ...
    max_detections_per_class: 100
    max_total_detections: 100
  }
}

Это также по умолчанию для считывателей ввода (для поезда и eval), и вы можете изменить их, но этоимеет отношение только к тому, что вы тренируетесь / оцениваете.Если вы хотите сделать вывод без переобучения модели, вы можете просто использовать предварительно обученную модель (опять же, такую ​​как ssd_mobilenet_v1) и экспортировать самостоятельно, используя аргумент --config_override, чтобы изменитьзначения, которые я упоминал выше в NMS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...