首页 > 解决方案 > 存储在 Google Cloud 上的巨大 TF 记录文件

问题描述

我正在尝试修改 tensorflow 项目,使其与 TPU 兼容。

为此,我从网站上解释的代码开始。

这里下载 COCO 数据集,首先使用 InceptionV3 模型提取其特征。我想修改这段代码,使其支持 TPU。

为此,我根据链接添加了 TPU 的强制代码。

在 TPU 策略范围内,我使用 keras 库创建了 InceptionV3 模型,并根据现有代码加载了带有 ImageNet 权重的模型。

现在,由于 TPU 需要将数据存储在 Google Cloud 存储中,因此我在链接的帮助下使用 tf.Example 创建了一个 tf 记录文件。

现在,我尝试以多种方式创建此文件,以便它拥有 TPU 将通过 TFRecordDataset 找到的数据。

起初我直接将图像数据和图像路径添加到文件并将其上传到 GCP 存储桶,但在读取这些数据时,我意识到这个图像数据没有用,因为它不包含它需要的形状/大小信息,我有存储前未将其调整到所需尺寸。这个文件大小变成了 2.5GB,这没关系。然后我认为让我们只将图像路径保留在云端,所以我创建了另一个只有图像路径的 tf 记录文件,然后我认为这可能不是优化代码,因为 TPU 将不得不单独打开图像将其调整为 299,299 然后馈送进行建模,如果我通过 TFRecordDataset 中的 .map() 函数获得图像数据会更好,所以我再次尝试,这次使用链接,将 R、G 和 B 以及图像路径存储在 tf 记录文件中。

但是,现在我看到 tf 记录文件的大小异常大,大约 40-45GB,最终我停止了执行,因为我的内存在 Google Colab TPU 上被填满。

COCO 数据集的原始大小并没有那么大。它几乎像 13GB.. 并且仅使用前 30,000 条记录创建数据集。所以 40GB 看起来很奇怪。

我可以知道这种特征存储方式有什么问题吗?有没有更好的方法将图像数据存储在 TF 记录文件中,然后通过 TFRecordDataset 提取。

标签: tensorflowgoogle-cloud-platformgoogle-colaboratorytpugoogle-cloud-tpu

解决方案


我认为作为 T​​FRecords 处理的 COCO 数据集在 GCS 上应该在 24-25 GB 左右。请注意,TFRecord 并不是一种压缩形式,它们将数据表示为 protobuf,因此可以将其最佳加载到 TensorFlow 程序中。

如果您参考:https ://cloud.google.com/tpu/docs/coco-setup(可以在此处找到相应的脚本)将COCO(或子集)转换为TFRecords,您可能会获得更大的成功。

此外,我们在这里使用针对 GPU/TPU 优化的 TF2/Keras 实现了 COCO 检测模型,您可能会发现这对优化输入管道很有用。示例教程可以在这里找到。谢谢!


推荐阅读