1

我正在构建一个模型来使用tf.slim它来运行 AVA 数据集——32GB 大小,大约 256K JPG 图像。针对全分辨率图像,我创建了 20 个 TFRecord用于训练的分片文件,每个文件大小为1.54 GB.

在训练期间,我的预处理步骤将(256,256,3)在提取随机裁剪的(224,224,3). 如果我在创建文件之前调整 JPG 图像TFRecord的大小,文件大小会缩小到28 MB.

除了额外的时间,如果我在创建 JPG 文件之前调整其大小,我的方法是否还有其他问题TFRecords

4

2 回答 2

1

对于大型数据集,这似乎是一种明智的方法。

来自 TensorFlow 文档:https ://www.tensorflow.org/performance/performance_guide

读取大量小文件会显着影响 I/O 性能。获得最大 I/O 吞吐量的一种方法是将输入数据预处理为更大的 (~100MB) TFRecord 文件。对于较小的数据集(200MB-1GB),最好的方法通常是将整个数据集加载到内存中。下载并转换为 TFRecord 格式的文档包括用于创建 TFRecord 的信息和脚本,该脚本将 CIFAR-10 数据集转换为 TFRecord。

这是否会提高训练性能(如速度)可能取决于您的设置。特别是对于带有 GPU 的本地设置(请参阅 Matan Hugi 的回答)。(我自己没有做过任何性能测试)

预处理只需要发生一次,如有必要,您可以在云中运行它。当您的 GPU 变得更快时,它更有可能成为瓶颈,例如,您通过 Google 的 ML 引擎使用更强大的 GPU 运行它(除非您自己可以使用更快的 GPU)或 I/O 变得更慢(例如涉及网络)。

总结一些优点:

  • 预处理只进行一次
  • 预处理可以在云端运行
  • 减少瓶颈(如果有的话)

不过,您还有额外的步骤。

在您的情况下,20x 28MB 应该很容易放入内存中。

于 2018-01-10T10:31:14.407 回答
-1

不,这种方法没有问题,但是如果您从性能方面讲,您不会看到创建调整大小的 TFRecords 带来的任何(显着)性能改进。当然它会消耗更少的磁盘空间。

如果我可以推荐 - 如果你有一个像样的存储设备(不一定是 SSD)并且你正确管理你的数据输入管道(预取足够的下一个数据样本),TFRecords 不会提供比处理单个图像的性能改进文件,并减少头痛和开销。

于 2018-01-10T08:12:34.210 回答