【问题标题】:Building a tf.data.Dataset object with images as features and .csv files as labels构建一个 tf.data.Dataset 对象,其中图像作为特征,.csv 文件作为标签
【发布时间】:2020-10-12 10:24:52
【问题描述】:

我正在从事一个深度学习项目,试图自动检测给定图像的人的关节,但我一直在尝试以正确格式将数据提供给我的神经网络。我的特征 (x) 是非常大的图像 (2000x900),我的标签 (y) 是 .csv 文件,其中有四列,每列 15 行:第一列包含字符串(关节名称),其他三列包含整数(每行每列一个整数)。 .csv 文件如下所示:

Left_knee, vis, x, y

Right_knee, vis, x, y

...(这里的x和y代表图像坐标,不是特征和标签!vis为0或1,表示关节是否可见)

每个 .csv 文件对应一个特定的图像,并且 .csv 文件和对应的图像名称相同但路径不同。现在,我想创建一个 tf.data.Dataset 对象,其中特征是图像,标签是从 .csv 文件构建的 Python 字典。例如,对应于图像 x(i) 的单个标签 y(i) 需要如下所示: {'Left_knee': [vis, x, y], 'Right_knee': [vis, x, y] , ...}。

我构建这样一个数据集的策略是将图像和标签加载到单独的 tf.data.Dataset 对象中,然后将它们融合在一起。为了加载图像,我编写了这个非常简单的代码(也许效率低下/错误?):

imgs_path = pathlib.Path('path/to/images')
list_imgs = tf.data.Dataset.list_files(str(imgs_path/'*'))

def imgs_to_dataset(file_path):
    return tf.io.read_file(file_path)

imgs_dataset = list_imgs.map(imgs_to_dataset)

说实话,我对 TensorFlow(和一般编程!)太陌生了,无法以任何方式对其进行测试以发现潜在问题,但它至少不会给我任何错误。

现在,我的问题是如何将 .csv 文件加载到 tf.data.Dataset 对象中,然后将其与 imgs_dataset 融合,以便将正确的标签转到每个图像。我知道我必须使用 tf.data.experimental.make_csv_dataset 之类的东西,但我不太确定如何设置它,以便我的 y 采用我想要的格式。有没有办法做到这一点,还是我走错了路?我应该澄清一下,我对使用 tf.data.Dataset 对象的想法没有任何看法,但据我所知,这似乎是一种非常方便(如果你可以设置的话!)的方式来将数据提供给 tf .keras 模型通过 .fit()。另外,我希望标签以特定方式(即作为字典)构造,因为我的网络损失将需要访问标签的不同字段(例如,对于给定的图像和给定的图像,损失会更低关节,关节的vis参数为0)。但也许有更有效的方法来构建我的标签以实现这一目标?

任何帮助和建议将不胜感激! 提前致谢。

【问题讨论】:

    标签: csv tensorflow dataset tf.data.dataset


    【解决方案1】:

    我认为tf.data.Dataset 是一个好方法。 您不需要创建两个数据集并将它们融合在一起,您可以首先使用例如加载数据集。 from_tensor_slceslist_filesfrom_generator,然后继续应用地图功能,如果需要,这些功能可以对您的图像进行后处理并加载一个后处理您的标签,即将它们从 pd.DataFrame 转换为 dict。然后,您的 map 函数会将图像元组作为张量返回,并将其标签作为 dicts。在 map 之后,您还可以应用 shuffle 和 batching。

    来自docs的示例:

    dataset = Dataset.range(5)
    # `map_func` takes a single argument of type `tf.Tensor` with the same
    # shape and dtype.
    result = dataset.map(lambda x: x + 1) 
    

    map 的结构很大程度上取决于文件的结构和命名。您可能希望将 lambda 函数替换为您自己的自定义函数,

    【讨论】:

      猜你喜欢
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多