使用 TensorFlow 的数据集 API 的图像摘要

Posted

技术标签:

【中文标题】使用 TensorFlow 的数据集 API 的图像摘要【英文标题】:Image summaries with TensorFlow's Dataset API 【发布时间】:2018-04-30 22:05:17 【问题描述】:

我正在使用TensorFlow's Dataset API 来加载和预处理图像。我想将预处理图像的摘要添加到 Tensorboard。

推荐的方法是什么?

到目前为止,我的代码如下所示:

def get_data():
  dataset = FixedLengthRecordDataset(...)
  dataset = dataset.map(dataset_parser, ...)
  if is_training:
    dataset = dataset.map(preprocess_for_train, ...)
  # Do shuffling, batching...
  return dataset

def preprocess_for_train(image, label):
  # Do preprocessing...
  image = tf.image.random_flip_left_right(image)
  # Add summary
  tf.summary.image('preprocessed_image', tf.expand_dims(image, 0))
  return image, label

preprocess_for_train 内,我的图像列在SUMMARIES 集合中,但在返回外部函数时,它不再是图形的一部分。我认为这是因为map 使用了不同的线程,因此引用了tf.Graph 的不同实例。

由于这不起作用,我还有哪些其他选项可以在 Tensorboard 中显示我的图像?

【问题讨论】:

【参考方案1】:

我发现了一个技巧,可以使用我的迭代器的输出将预处理的图像添加到 Tensorboard:

train_dataset = get_data()
iterator = Iterator.from_structure(train_dataset.output_types, train_dataset.output_shapes)
# Batch consists of [image, label]
next_batch = iterator.get_next()
tf.summary.image('preprocessed_image', next_batch[0])

但是,这将在运行 summary_op 时第二次调用 next_batch。它有助于仅调试图像预处理,但它不是真正训练的解决方案。此外,只能观察到完全预处理的图像,而不是中间预处理阶段。

【讨论】:

以上是关于使用 TensorFlow 的数据集 API 的图像摘要的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Tensorflow 数据集 API 与训练和验证集一起使用

tensorflow 的数据集 API 返回的大小不是恒定的

TensorFlow 数据集 API:缓存

python 使用tensorflow数据集api读取磁盘上的图像

python 数据集输入fn使用Tensorflow 1.4 API。

Tensorflow 数据集 API 中的过采样功能