Não é possível carregar imagens de um intervalo do Google Cloud Storage no TensorFlow ou Keras

Aug 17 2020

Eu tenho um intervalo no Google Cloud Storage que contém imagens para um treinamento de modelo do TensorFlow. Estou usando tensorflow_cloudpara carregar as imagens armazenadas no intervalo chamado stereo-traine o URL completo para o diretório com imagens é:

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

Mas, usando este caminho na tf.keras.preprocessing.image_dataset_from_directoryfunção, recebo o erro no log do Google Cloud Console:

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

Como consertar isto?

Código:

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)


Mesmo quando uso o seguinte, não funciona:


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_fileem vez da função keras, recebo o mesmo erro. Como consertar isto?

Respostas

1 mac13k Aug 17 2020 at 10:03

Se você estiver usando Linux ou OSX, pode usar o Google Cloud Storage FUSE, que permitirá montar seu bucket localmente e usá-lo como qualquer outro sistema de arquivos. Siga o guia de instalação e monte o balde em algum lugar do sistema, ou seja:

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

Então, você deve ser capaz de usar os caminhos do ponto de montagem em seu código e carregar o conteúdo do balde no Keras.