TensorFlowまたはKerasのGoogleCloudStorageバケットから画像を読み込めません

Aug 17 2020

Google Cloud Storageに、TensorFlowモデルトレーニング用の画像を含むバケットがあります。とtensorflow_cloud呼ばれるバケットに保存されている画像を読み込むために使用しています。画像stereo-trainを含むディレクトリへの完全なURLは次のとおりです。

gs://stereo-train/data_scene_flow/training/dat

しかし、tf.keras.preprocessing.image_dataset_from_directory関数でこのパスを使用すると、Google CloudConsoleのログにエラーが表示されます。

FileNotFoundError: [Errno 2] No such file or directory: 'gs://stereo-train/data_scene_flow/training/dat'

これを修正する方法は?

コード:

GCP_BUCKET = "stereo-train"

kitti_dir = os.path.join("gs://", GCP_BUCKET, "data_scene_flow")
kitti_training_dir = os.path.join(kitti_dir, "training", "dat")

ds = tf.keras.preprocessing.image_dataset_from_directory(kitti_training_dir, image_size=(375,1242), batch_size=batch_size, shuffle=False, label_mode=None)


以下を使用しても機能しません。


filenames = np.sort(np.asarray(os.listdir(kitti_train))).tolist()
# Make a Dataset of image tensors by reading and decoding the files.
ds = list(map(lambda x: tf.io.decode_image(tf.io.read_file(kitti_train + x)), filenames))

tf.io.read_filekeras関数の代わりに、同じエラーが発生します。これを修正する方法は?

回答

1 mac13k Aug 17 2020 at 10:03

LinuxまたはOSXを使用している場合は、Google Cloud Storage FUSEを使用できます。これにより、バケットをローカルにマウントして、他のファイルシステムと同じように使用できます。インストールガイドに従って、バケットをシステムのどこかにマウントします。

mkdir /mnt/buckets
gcsfuse gs://stereo-train /mnt/buckets

次に、コードでマウントポイントからのパスを使用し、Kerasのバケットからコンテンツをロードできるようになります。