【问题标题】:make tensorflow dataset from huge number of images(*.jpg) and labels(*.mat)从大量图像(*.jpg)和标签(*.mat)制作张量流数据集
【发布时间】:2019-03-28 22:05:30
【问题描述】:

我有大量带有标签 (.mat) 文件的图像(不能使用 tf.data.Dataset.from_tensor_slices()),我想使用 tf.data API 来制作张量流数据集。

正如我在文档中所读到的,我可以将tf.data.TextLineDataset 用于大量数据(我必须有一个包含所有图像地址的 txt 文件,并将 txt 文件的路径作为tf.data.TextLineDataset 参数发送) . 然后,我可以使用map方法读取txt文件(tf.read_file)解码jpg图像(tf.image.decode_jpeg)并对图像进行一些基本的转换。

但是,我不能在map 方法的任何部分使用scipy.io.loadmat,因为我没有指示mat 文件路径的字符串。我只有tf.Tensor

在这种情况下,我认为读取所有图像并从中制作 TFRecord 效率并不高,因为我基本上每件事都会做两次。一次,读取全图制作TFRecord,再次读取TFRecord制作tensorflow数据集。

知道如何解决这个问题吗?

这是我的代码:

dataset = tf.data.TextLineDataset(txt_file).map(read_img_and_mat)

然后:

def read_img_and_mat(path):
    image_string = tf.read_file(path)
    image_decoded = tf.image.decode_jpeg(image_string, channels=3)
    label = ... # get label from mat file
    return image_decoded, label

【问题讨论】:

  • 所以你的问题是不知道你自己的mat文件的路径?它们与带有一些恒定字符串替换的图像不一样吗?您是在问如何在 TensorFlow 中操作字符串?
  • @buzjwa mat 文件的路径是已知的,实际上我可以通过将 '.mat' 替换为 '.jpg' 来获得它。我的问题是如何在方法中打开 mat 文件并提取我需要的信息。看来我在read_img_and_mat 方法中没有指示图像路径的字符串。

标签: python tensorflow mat-file


【解决方案1】:

我找到了使用tf.data.from_generator 的方法 我发现的技巧是制作两个单独的数据集(一个用于 mat 文件,一个用于 jpg 文件),然后使用 tf.data.Dataset.zip

将它们组合起来

这是它的工作原理:

mat_dataset = tf.data.Dataset.from_generator(read_mat_file, tf.int64)

def read_mat_file():
    while True:
        with open('mat_addresses.txt', 'r') as input_:
            for line in input_:
                # open file and extract info from it as np.array
                yield tuple(label)  # why tuple? https://github.com/tensorflow/tensorflow/issues/13101

为了获得下一批,只需要做:

iter = mat_dataset.make_one_shot_iterator()
sess.run(iter.get_next())

但是,可以将img_datasetmat_dataset 结合起来,如下所示:

img_dataset = tf.data.TextLineDataset('img_addresses.txt').map(read_img)

def read_img(path):
    image_string = tf.read_file(path)
    image_decoded = tf.image.decode_jpeg(image_string, channels=3)
    return image_decoded

dataset = tf.data.Dataset.zip((mat_dataset, img_dataset))

现在,像提到的那样获得下一批。

PS。与feed_dict相比,我不知道代码的效率如何

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-27
    • 2017-08-16
    • 2021-10-29
    • 1970-01-01
    • 2018-09-29
    • 2020-08-16
    • 2018-08-04
    • 1970-01-01
    相关资源
    最近更新 更多