在创建`TFRecord`文件之前调整JPG的大小?

时间:2018-01-10 03:11:58

标签: tensorflow tf-slim tfrecord

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

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

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

2 个答案:

答案 0 :(得分:0)

不,这种方法没有问题,但是如果您在性能方面说话,那么从重新设置的TFRecords的创建中您将看不到任何(显着的)性能提升。 当然它会消耗更少的磁盘空间。

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

答案 1 :(得分:0)

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

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

  

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

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

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

总结一些优点:

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

你还有其他步骤。

在你的情况下,20x 28MB应该很容易适应内存。