【问题标题】:Build a dataset for TensorFlow为 TensorFlow 构建数据集
【发布时间】:2020-01-17 10:41:04
【问题描述】:

我有大量代表车辆的 JPG。我想为 TensorFlow 创建一个具有分类的数据集,以便每个车辆图像都描述侧面、角度或车顶,即我想创建九个图像子集(前、后、驾驶员侧、驾驶员前角、驾驶员后角、乘客侧、乘客前角、乘客后角、车顶)。目前,每个 JPG 的文件名都描述了所需的点。

如何将这个集合变成 TensorFlow 可以轻松操作的数据集?另外,我应该运行一个裁剪 JPG 以仅提取车辆部分的程序吗?我如何使用 TensorFlow 做到这一点?

对于未提供此问题的详细信息和示例,我提前道歉,但我真的不知道如何才能获得此问题的切入点。我所遵循的教程都假设已经创建了一个可以使用的数据集。

【问题讨论】:

  • 如果我理解正确的话,您每辆车都有 9 张图像,并且想一次根据所有 9 张图像做出一些预测?
  • 并非如此。我需要的是一个模型,该模型可以根据我想通过上面解释的分类构建的知识来识别未来提交的图像的车辆侧面/角度。如果不清楚,请告诉我。
  • 我想我明白了。所以你要放一张图片,让网络告诉你它属于这9个类别中的哪一个:[前、后、驾驶员侧、驾驶员前角、驾驶员后角、乘客侧、乘客前角、乘客后角,屋顶]?
  • 你能给我举几个文件名的例子吗?
  • 所有图像的大小都一样吗? (相同的像素数)

标签: tensorflow tensorflow-datasets


【解决方案1】:

好的,我将尽我所能回答这个问题,但是生成和预处理用于 ML 算法的数据很费力而且通常很昂贵(因此重复使用众所周知的数据集来测试算法设计)。

首先要解决几个直截了当的问题:

should I run a procedure which crop the JPG to extract only the vehicle portion?

没有。这是没有必要的。神经网络将图像中的相关信息从不相关的信息中分类,拥有多样化的图像集将有助于构建一个健壮的分类器。此外,您以后可能会通过调整图像大小使自己的生活变得更加困难(有关更多信息,请参阅下面的第 1. 点)。

How could I do that using TensorFlow?

你不会的。 Tensorflow 旨在构建和测试 ML 模型,并且没有用于预处理数据的工具。 (也许 TensorFlow Extended 可以,但这不是必需的)

现在是关于如何从所述文件创建数据集的粗略指南:

1)需要做的第一件事就是将您的 .jpg 图像加载到 python 中并将它们全部调整为相同的大小。神经网络在每个训练示例中都需要相同数量的输入(在这种情况下为像素),因此具有不同大小的图像将不起作用。

  • 有一个很好的答案详细说明了如何在堆栈溢出here 上使用 python 图像库 (PIL) 加载图像。
  • 然后可以使用 tensorflow 可以使用的 data = np.asarray(image) 将 PIL 图像实例(上例中的列表 loadedImages 的元素)转换为 numpy 数组。
  • 除了为您的数据构建一组 numpy 数组之外,您还需要为该数据创建第二个 numpy 标签数组。对此进行编码的典型方法是作为一个长度与图像数量相同的 numpy 数组,每个点的整数值表示该图像所属的类(9 个类为 0-8)。您可以手动输入这些,但这将是劳动密集型的,我建议使用 python 字符串内置find 方法来定位文件名中的关键字以自动确定它们的类。这可以在

    for image in imagesList:
    

    在上面的链接中循环,image 应该是一个包含图像文件名的字符串。

    • 正如我上面提到的,调整图像大小是必要的,以确保它们都相同。您可以使用 numpy 执行此操作,使用 indexing 选择每个图像数组的子部分,或者在转换为 numpy 之前使用 PIL 的 resize 函数。这里没有正确的答案,并且已经使用了许多方法来调整图像的大小,从填充到拉伸到裁剪。

那么这里的最终结果应该是 2 个 numpy 数组。具有形状[w,h,3,n] 的图像数据之一,其中w= 图像宽度,h= 图像高度,3 = 三个 RGB 层(提供的图像是彩色的)和n= 您拥有的图像数量。与这些图像关联的第二个标签,形状为[n,],其中长度为n 数组的每个元素都是0-8 之间的整数,指定其类别。

此时最好使用numpy.save() 以这种格式保存数据集,这样您就不必再次执行此过程。

2) 一旦你有了这种格式的图像,tensorflow 就会有一个名为tf.Dataset 的类,你可以在其中加载上述图像和标签数据,并允许你打乱和采样数据从中。

我希望这对您有所帮助,但很抱歉没有快速解决此问题的解决方案(至少我不知道)。祝你好运。

【讨论】:

  • 感谢您的详细回答,非常感谢。我设法创建了一个包含 100 个目录的样本,每个目录都包含九个视角中的九个车辆图片。我想问你几个问题。 1、是否可以将每次迭代的结果作为元组返回(图像numpy数组和标签numpy数组)? 2. 我怎样才能汇总结果。合并每个元组可以吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 2019-08-09
  • 2018-02-24
  • 1970-01-01
  • 2022-11-26
相关资源
最近更新 更多