【问题标题】:How to verify the actual data in Tensorflow slim dataset如何验证 Tensorflow slim 数据集中的实际数据
【发布时间】:2017-04-22 10:25:37
【问题描述】:

我已将我的数据编码到 tfrecord 文件中。对于每个图像,我用它对多个带有多个标签的边界框进行编码。现在,我想验证我的数据是否已被 Tensorflow/slim 数据集类型正确解码。我写了以下测试:

def test2(sess):
  labels_to_class = read_label_file(label_fname)
  reader = tf.TFRecordReader
  keys_to_features = {
    'image/encoded': tf.FixedLenFeature(
      (), tf.string, default_value=''),
    'image/format': tf.FixedLenFeature((), tf.string, default_value='jpg'),
    'image/object/labels': tf.VarLenFeature(dtype=tf.int64),
    'image/object/truns': tf.VarLenFeature(dtype=tf.int64),
    'image/object/occluds': tf.VarLenFeature(dtype=tf.int64),
    'image/object/bbox/xmin': tf.VarLenFeature(dtype=tf.int64),
    'image/object/bbox/xmax': tf.VarLenFeature(dtype=tf.int64),
    'image/object/bbox/ymin': tf.VarLenFeature(dtype=tf.int64),
    'image/object/bbox/ymax': tf.VarLenFeature(dtype=tf.int64),
  }
  items_to_handlers = {
    'image': slim.tfexample_decoder.Image('image/encoded', 'image/format'),
    'object/label': slim.tfexample_decoder.Tensor('image/object/labels'),
    'object/truncated': slim.tfexample_decoder.Tensor('image/object/truns'),
    'object/occluded': slim.tfexample_decoder.Tensor('image/object/occluds'),
    'object/bbox': slim.tfexample_decoder.BoundingBox(
        ['ymin', 'xmin', 'ymax', 'xmax'], 'image/object/bbox/'),
  }

  decoder = slim.tfexample_decoder.TFExampleDecoder(
    keys_to_features, items_to_handlers)

  dataset = slim.dataset.Dataset(
    data_sources=filename_queue,
    reader=reader,
    decoder=decoder,
    num_samples=sample_num,
    items_to_descriptions=_ITEMS_TO_DESCRIPTIONS,
    num_classes=_NUM_CLASSES,
    labels_to_names=labels_to_class)

  provider = slim.dataset_data_provider.DatasetDataProvider(dataset)

  keys = provider._items_to_tensors.keys()

  print(provider._num_samples)
  for item in provider._items_to_tensors:
    print(item, provider._items_to_tensors[item])

  [image, label] = provider.get(['image', 'object/label'])

  print('AAA')

  sess.run([image, label])

  print('BBB')

当我运行上面的代码时,它显示:

6
image Tensor("case/If_2/Merge:0", shape=(?, ?, 3), dtype=uint8)
object/label Tensor("SparseToDense:0", shape=(?,), dtype=int64)
object/occluded Tensor("SparseToDense_1:0", shape=(?,), dtype=int64)
record_key Tensor("parallel_read/common_queue_Dequeue:0", dtype=string)
object/bbox Tensor("transpose:0", shape=(?, 4), dtype=int64)
object/truncated Tensor("SparseToDense_2:0", shape=(?,), dtype=int64)
AAA

然后程序永远停止在那里,而不提供任何错误消息。 该程序显示了正确的示例编号 (6) 和我编码的张量的正确类型,但我仍然想检查张量中的值。 无论如何我可以检查他们的价值观吗?

感谢您的帮助。

-----------------更新--------

我添加的代码是:

tf.train.start_queue_runners()

print('Start verification process..')

for i in range(provider._num_samples):
  [image, labelList, truncList, occList,
       boxList] = provider.get([
         'image', 'object/label', 'object/truncated',
         'object/occluded', 'object/bbox'])
  enc_image = tf.image.encode_jpeg(image)
  img, labels, truns, occluds, boxes = sess.run(
      [enc_image, labelList, truncList, occList, boxList])

  f = tf.gfile.FastGFile('out_%.2d.jpg' % i, 'wb')
  f.write(img)
  f.close()

  for j in range(labels.shape[0]):
    print('label=%d (%s), truc=%d, occluded=%d at [%d, %d, %d, %d]' % (
        labels[j], labels_to_class[labels[j]], truns[j], 
        occluds[j], boxes[j][0], boxes[j][1],
        boxes[j][2],  boxes[j][3]))

【问题讨论】:

    标签: tensorflow dataset


    【解决方案1】:

    您可能需要为要评估的图像和标签启动队列运行器。

    【讨论】:

    • 你能给我举个例子吗?我在网上搜索过,但没有任何工作。谢谢。
    • 在调用任何 session.run 之前添加 tf.train.start_queue_runners()
    • 感谢您的建议,这有助于验证数据。但是,有一个问题。当我运行我的测试程序时,图像读取顺序每次都是随机的,并且可能有重复。例如,当我对 6 条记录进行验证时,一次加载的图像数据来自项目 0、1、1、2、1、5,另一次是来自 1、2、3、4、0、1。这可能是什么原因?有没有办法限制一条记录只能读取一次?谢谢。
    • 将 shuffle=False 传递给数据集提供者以消除随机化
    • 感谢您的帮助。现在效果很好。我看到之前的 shuffling=True 在 epoch=None 下,表明我需要无限轮次的迭代才能使所有项目同时采样。当我设置纪元数时,所有项目都将在同一时间进行采样。
    猜你喜欢
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2016-09-02
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多