使用Google ML引擎和Google存储存储大量图像进行培训的最佳做法

时间:2017-11-09 21:20:13

标签: tensorflow google-cloud-storage google-cloud-ml

我正在使用Google ML引擎和Google存储在TensorFlow中训练SSD模型。在TF的object detection example中,他们将所有图像放入一个大的TFRecord文件中。然而,在这个方案中,如果想通过选择所有图像的子集来组装不同的训练集,则给定的图像将被存储多次,对于图像所属的每个训练集一次。

另一种方法是将每个图像存储为单个文件,并使用URL的平面列表来指示各种数据集中图像的成员资格。但是,根据我的经验,Google Storage并未针对读取大量小文件进行优化,从而导致培训吞吐量较低。

我想看看是否有其他方法可以避免多次保存每个图像,同时实现良好的吞吐量。

2 个答案:

答案 0 :(得分:0)

GCS上的小文件确实会影响吞吐量。

一些想法:

  1. 使用many reading threads构建输入管道以保持管道已满。 (链接到newer API
  2. 启动时将文件复制到本地磁盘。
  3. 使用TF图中的构造来过滤掉文件。
  4. 没有。 1应该让你相当远。

答案 1 :(得分:0)

由于拥有大量文件会降低培训吞吐量,我要做的是:

  • 将图像放入大型tfrecord中。记录将被设置为其中一个字段是子集密钥。
  • 使用新的Dataset API我只使用适当的解析函数加载所需的数据集。

假设图像被适当地混洗,您选择的子集足够大并且使用了相当多的读取线程,因为管道不应该耗尽数据。

另一种方法是将tfrecords分成更小的子集,但不是每个图像的文件。无论你走到哪里,你都会遇到一些需要解决的问题,这是一个选择哪个选项可能出现问题的案例。