我正在构建一个与tf.slim
一起使用的模型,该模型将针对AVA数据集运行 - 大小为32GB,用于大约256K JPG图像。针对全分辨率图像,我创建了20个用于训练的分片TFRecord
文件,每个文件的大小为1.54 GB
。
在训练期间,我的预处理步骤会将每个图像的大小调整为(256,256,3)
,然后再提取(224,224,3)
的随机裁剪。如果我在创建TFRecord
文件之前调整JPG图像的大小,则文件大小会缩小为28 MB
。
除了额外的时间,如果我在创建TFRecords
之前调整JPG文件的大小,我的方法还有其他问题吗?
答案 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应该很容易适应内存。