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
4 Réponses :
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
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
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.
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"))
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']
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.