Проблемы с чтением tfrecord с помощью tensorflow

Теперь моя проблема заключается в чтении tfrecords. Например, предположим, что у меня есть два изображения, и каждое поле имеет свою ограничительную рамку для включения объектов.


    image1    bbox1:xmin1,ymin1,xmax1,ymax1
    image2    bbox2:xmin2,ymin2,xmax2,ymax2

Данные были успешно записаны в файл tfrecord, теперь моя задача — прочитать его.

И когда я загружаю его, я обнаруживаю, что данные не совпадают. Например, это может быть

`image1   bbox2:xmin2,ymin2,xmax2,ymax2`

Я пытаюсь нарисовать его с помощью opencv2 и нахожу эту проблему.

Мой код для чтения tfrecord выглядит следующим образом:



    image, gbboxes= tf.train.batch(
            [image, gbboxes],
            batch_size=config.batch_size,
            num_threads=1,
            capacity=50)

        batch_queue = slim.prefetch_queue.prefetch_queue(
            [image, gbboxes],
            capacity=50)

        image, gbboxes = batch_queue.dequeue()

        with tf.Session() as sess:
            coord = tf.train.Coordinator()
            threads = tf.train.start_queue_runners(sess=sess, coord=coord)
            init_op = tf.global_variables_initializer()
            sess.run(init_op)
            # 0 index to extreact first image of batch
            image = sess.run(image[0, :, :, :])
            gbboxe = sess.run(gbboxes[0, :])

            [ymin, xmin, ymax, xmax] = gbboxe*config.image_width
            image = np.asarray(image, np.uint8)
            cv2.rectangle(image, (int(xmin), int(ymin)), (int(xmax), int(ymax)), (0, 255, 0), 1)
            cv2.imshow("test", image)
            cv2.waitKey()      
            coord.request_stop()
            coord.join(threads)



person Frank Mouzrt    schedule 08.11.2017    source источник


Ответы (1)


Ваши данные в порядке, вы получаете несоответствие, потому что делаете это:

image = sess.run(image[0, :, :, :])
gbboxe = sess.run(gbboxes[0, :])

Каждый раз, когда вы вызываете sess.run(), граф оценивается на новом входе, и любой тензор, который вы передаете в аргументах, вычисляется, и его значение возвращается. Если вы хотите, чтобы изображение и bbox были из одного и того же образца, запустите

image, gbboxe = sess.run([image[0, :, :, :], gbboxes[0, :]])
person GPhilo    schedule 08.11.2017