Декодирование результатов прогнозирования, сгенерированных предварительно обученной моделью, в удобочитаемые метки - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь использовать предварительно обученную модель обнаружения объектов из модели зоопарка Tensorflow .В основном я выбрал faster_rcnn_inception_resnet_v2_atrous_oidv4, обученный на наборе данных Open Images.

Вот мой код:

import tensorflow as tf

# restore the deep model
sess=tf.Session()
#First let's load meta graph and restore weights
saver = tf.train.import_meta_graph('pretrained/faster_rcnn_inception_resnet_v2_atrous_oid_v4_2018_12_12/model.ckpt.meta')
saver.restore(sess, tf.train.latest_checkpoint('pretrained/faster_rcnn_inception_resnet_v2_atrous_oid_v4_2018_12_12/'))

# Now, let's access and create placeholders variables and
# create feed-dict to feed new data
graph = tf.get_default_graph()
X = graph.get_tensor_by_name('image_tensor:0')
feed_dict ={X: image_raw_feature}

#Now, access the op that we want to run. 
num_detections = graph.get_tensor_by_name('num_detections:0')
detection_scores = graph.get_tensor_by_name('detection_scores:0')
detection_boxes = graph.get_tensor_by_name('detection_boxes:0')

x1, x2, x3 = sess.run(
    [num_detections, detection_scores, detection_boxes],
    feed_dict
)

Выходные данные x1, x2, x3 имеют формы 4, [4, 100] и [4, 100, 4].Проблема в том, что я не знаю, как декодировать результат в удобочитаемые ярлыки.Я предполагаю, что общее количество категорий объектов равно 100, как указано в x2?Но он кажется очень маленьким по сравнению с тем, что описано в наборе данных Открытые изображения .

Как можно декодировать выходные данные на метки?

1 Ответ

1 голос
/ 07 апреля 2019

Как описано в fast_rcnn_meta_arch.py ​​, выходные тензоры должны иметь следующие формы:

detection_boxes: [batch, max_detection, 4]
detection_scores: [batch, max_detections]
detection_classes: [batch, max_detections]
num_detections: [batch]

Здесь bacth = 4, max_detections = 100 и содержат все обнаруженияс различными показателями достоверности, поэтому вам может потребоваться выбрать пороговое значение для фильтрации обнаружений с низкими показателями достоверности. Кроме того, detection_boxes содержит кодировки блоков в порядке ymin, xmin, ymax, xmax и в нормализованных координатах.чтобы получить форму изображения, чтобы получить абсолютные координаты.

Например, скажем, вы хотите, чтобы все обнаружения были с score > 0.5:

final_boxes = []
for i in range(int(num_detections)):
    final_boxes.append(detection_boxes[i, detection_scores[i]>0.5, ])

Это даст вам обнаружения с показателем достоверности выше, чем0,5.

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