3
votes

Deep learning sur Google Colab: le chargement d'un grand jeu de données image est très long, comment accélérer le processus?

Je travaille sur un modèle de Deep Learning utilisant Keras et pour accélérer le calcul, j'aimerais utiliser le GPU disponible sur google colab.

Mes fichiers image sont déjà chargés sur mon lecteur google. J'ai 24'000 images pour l'entraînement sur 4'000 pour tester mon modèle.

Cependant, lorsque je charge mes images dans un tableau, cela prend très longtemps (presque 2h) Ce n'est donc pas très pratique de le faire à chaque fois que j'utilise Google Colab Notebook.

Sauriez-vous comment accélérer le processus? Voici mon code actuel:

TRAIN_DIR  = "Training_set/X"
TRAIN_DIR_Y = "Training_set/Y"
IMG_SIZE = 128

def parse_img_data(path):
    X_train = []
    index_train = []
    img_ind = []
    for img in tqdm(os.listdir(path)):
        img_ind.append(int(img.split('.')[0])-1)
        path = os.path.join(TRAIN_DIR,img)
        img = cv2.imread(path,cv2.IMREAD_COLOR)
        img = cv2.resize(img, (IMG_SIZE,IMG_SIZE))
        X_train.append(np.array(img))
    return np.array(img_ind), np.array(X_train)

ind_train, X_train = parse_img_data(TRAIN_DIR)

Je vous serais très reconnaissant de bien vouloir m'aider.

Xavier


1 commentaires

Devez-vous vraiment tous les lire en mémoire? Vous ne pouvez pas utiliser un générateur? Il n'est pas étonnant que vous deviez attendre si longtemps car votre code lit toutes les images en mémoire. Normalement, dans le deep learning, on travaillerait avec des lots et ne chargerait que X nombre d'images à la fois.


4 Réponses :


0
votes

Vous pouvez essayer de monter votre dossier Google Drive (vous pouvez trouver l'extrait de code dans le menu Exemples) et utiliser ImageDataGenerator avec flow_from_directory () . Consultez la documentation ici


0 commentaires

0
votes

J'ai essayé, et pour les curieux, il ne m'a pas été possible d'utiliser le flux à partir du répertoire avec un dossier dans Google Drive. L'environnement de fichier collab ne lit pas le chemin et génère une erreur «Le dossier n'existe pas». J'ai essayé de résoudre le problème et la pile de recherche, des questions similaires ont été publiées ici collaboration Google et ici Google Colab ne peut pas accéder au contenu Drive , sans solution efficace et pour une raison quelconque , de nombreux votes négatifs à ceux qui demandent.

La seule solution que je trouve pour lire 20 000 images dans google colab est de les télécharger puis de les traiter, ce qui me fait perdre deux heures tristes à le faire. Cela a du sens, Google identifie les éléments à l'intérieur du lecteur avec des identifiants, le flux du répertoire nécessite qu'il soit identifié à la fois dans l'ensemble de données et les classes avec des chemins absolus de dossier, n'étant pas compatible avec la méthode d'identification de Google Drive. Une alternative pourrait être d'utiliser un environnement cloud Google à la place, je suppose, et de payer. Nous en obtenons beaucoup gratuitement. Ceci est ma compréhension novice de la situation, veuillez me corriger si vous avez tort.

edit1: J'ai pu utiliser flow from directory sur google collab, google identifie également les choses avec path, le problème est que si vous utilisez os.getcwd (), cela ne fonctionne pas correctement, si vous utilisez-le, cela vous donnera que le répertoire de travail actuel est "/ content", alors qu'en vérité est "/ content / drive / My Drive / foldersinsideyourdrive /...../ folderthathasyourcollabnotebook /. Si vous changez dans le traingenerator le chemin ainsi qu'il inclut ce paramètre, et ignore os, cela fonctionne. Cependant, j'ai eu des problèmes avec le ram même en utilisant le flux à partir du répertoire, ne pas pouvoir entraîner mon cnn de toute façon, cela pourrait être quelque chose qui m'est arrivé. p >

Assurez-vous d'exécuter

from google.colab import drive
drive.mount('/content/drive/')

pour que le notebook reconnaisse les chemins


2 commentaires

Je pense que c'est plus un commentaire.


oui, mais je n'ai pas assez de points pour le faire sur les réponses des autres, donc je pense que ce serait mieux que de ne pas faire de commentaire du tout.



3
votes

Je ne sais pas si vous résolvez le problème. J'avais le même problème. Après avoir utilisé os.listdir dans le dossier de données particulier avant d'exécuter CNN et de travailler.

print(os.listdir("./drive/My Drive/Colab Notebooks/dataset"))


0 commentaires

1
votes

de numpy import savez_compressed trainX, trainy = parse_img_data ('/ content / drive / My Drive / Training_set /') savez_compressed ('dataset.npz', trainX, train)

pour la première fois, vous pouvez charger et enregistrer les données, puis les utiliser encore et encore

importer numpy comme np data = np.load ('/ content / lecteur / Mon lecteur / dataset.npz') trainX, trainy = données ['arr_0'], données ['arr_1']


0 commentaires