Tensorflow:将tf.parse_example用于jpeg批次

时间:2016-11-15 12:42:10

标签: tensorflow

我只是偶然发现了这个问题: TensorFlow - Read all examples from a TFRecords at once?

第一个答案建议使用tf.parse_example而不是解析单个示例,因为这似乎更快。但是提供的代码并不完整,我不知道如何使用它。如果我批处理然后使用parse_example,我将获得一批功能。这意味着我需要解压缩该批处理以解码jpegs?答案的代码是:

reader = tf.TFRecordReader()
 _, serialized_example = reader.read(filename_queue)
 features = tf.parse_single_example(serialized_example, features={
      image/center': tf.VarLenFeature(tf.string),
  })
 image = features['image/center']
 image_decoded = tf.image.decode_jpeg(image.values[0], channels=3)
 return image_decoded

建议切换到:

batch = tf.train.batch([serialized_example], num_examples, capacity=num_examples)
parsed_examples = tf.parse_example(batch, feature_spec)

但是我现在如何解码那些parsed_examples?

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。我采用的方式是使用TensorFlow的higher order operatorstf.map_fn具体:

batch = tf.train.batch([serialized_example], num_examples, capacity=num_examples)

parsed_examples = tf.parse_example(batch, 
    features={
        'image_jpg': tf.FixedLenFeature([], tf.string),
    })

raw_bytes_batch = parsed_examples['image_jpg']

def decode(raw_bytes):
    return tf.image.decode_jpeg(raw_bytes, channels=3)

image_decoded = tf.map_fn(decode, raw_bytes_batch, dtype=tf.uint8,
                          back_prop=False, parallel_iterations=10)
# image_decoded.set_shape([None, ..., ..., 3])

这应该在JPEG上并行运行decode函数。