Não é possível carregar imagens de um intervalo do Google Cloud Storage no TensorFlow ou Keras
Eu tenho um intervalo no Google Cloud Storage que contém imagens para um treinamento de modelo do TensorFlow. Estou usando tensorflow_cloud
para carregar as imagens armazenadas no intervalo chamado stereo-train
e 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_directory
funçã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_file
em vez da função keras, recebo o mesmo erro. Como consertar isto?
Respostas
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.