如何使用 tensorflow 数据集访问图像

Posted

技术标签:

【中文标题】如何使用 tensorflow 数据集访问图像【英文标题】:How to access images using tensorflow dataset 【发布时间】:2021-12-14 09:06:43 【问题描述】:

最近我从this page下载了CelebA数据集。现在我想使用 tensforflow_dataset 包中的 tfds.load 函数访问它。

我的 zip 文件名为 celeb_a 放在文件夹 C:/Users/name

要从 python 访问它,我使用了代码:

import tensorflow_datasets as tfds

ds = tfds.load("celeb_a", data_dir=r'C:\Users\name', split='train', download=False)

导致错误:

AssertionError: Dataset celeb_a: could not find data in C:\Users\name. Please make sure to call dataset_builder.download_and_prepare(), or pass download=True to tfds.load() before trying to access the tf.data.Dataset object. 

我也试过用:

builder = tfds.image.CelebA(data_dir="C:/Users/name")

在调用tfds.load 之前,输出完全相同。

使用 python 下载 CelebA 数据集非常复杂,因为很容易超过每日配额 - 这就是我从官方页面下载它的原因,现在我想手动将它加载到 python。你能帮我做吗?

【问题讨论】:

data_dir 期望数据已经解压缩(并根据download_and_prepare 在数据集定义中所做的准备)。您必须自己重做 zip 文件上的准备步骤,并将结果放在 C:/Users/name 中,以便 tfds.load 工作。 我提取了 zip 文件,所以现在我有一个文件夹,其中包含名为 celeb_a 的 CelebA 数据集。我使用了代码builder.download_and_prepare(download_dir=r"C:/Users/name"),但出现错误:Failed to create a directory: C/Users/name/celeb_a\celeb_a\0.3.0.incompleteOFHXNF; No such file or directory。你知道为什么吗? 哦..我想我明白了。所以download_and_prepare 下载数据集并准备它。但是,因为我没有下载它,所以我必须自己“准备”它。对吗? 确实如此。我正在检查是否有办法告诉 TFDS“请使用此存档而不是重新下载所有内容”,但我找不到任何内容 另外,关于“使用 python 下载 CelebA 数据集非常复杂,因为很容易超过每日配额”:您只需下载(并准备)数据集一次,下次你使用它时,它会重用已经准备好的数据,所以配额应该不是问题。 【参考方案1】:

如果你愿意,你可以使用tf.keras.utils.get_file

import tensorflow as tf
import os 

_URL = _URL = 'https://docs.google.com/uc?export=download&id=0B7EVK8r0v71pTUZsaXdaSnZBZzg'
data_dir = tf.keras.utils.get_file('img_align_celeba.zip', origin=_URL, extract=True, archive_format='zip')
image_path = os.path.join(os.path.dirname(data_dir), 'img_align_celeba')

img_gen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)

ds = tf.data.Dataset.from_generator(
    lambda: img_gen.flow_from_directory(data),
    output_types=(tf.float32, tf.float32))

【讨论】:

嗨,一起来!非常感谢您的回答!你知道为什么我在运行你的代码时会出现这个错误吗? TypeError: from_generator() missing 1 required positional argument: 'output_types' 更新了答案。 _URL 仍然需要调整,但我希望你明白。使用不同的网址可能会有所帮助,因为 Google 云端硬盘有点复杂

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

如何使用tensorflow为每个类获取具有相同数量图像的验证集?

如何使用 Tensorflow 2.0 数据集在训练时执行 10 次裁剪图像增强

如何验证 TensorFlow 数据集中的图像? [复制]

如何在 Tensorflow 数据集中扩充数据?

DenseNet实战:tensorflow2.X版本,DenseNet121图像分类任务(小数据集)

如何在 Tensorflow 中为预取数据集绘制混淆矩阵