Télécharger, prétraiter et importer l'ensemble de données ImageNet
Ce document explique comment télécharger, prétraiter et importer l'ensemble de données ImageNet à utiliser avec l'architecture de VM Cloud TPU.
ImageNet est une base de données d'images. Les images de la base de données sont organisées hiérarchiquement. Chaque nœud de cette hiérarchie est représenté par des centaines de milliers d'images.Le temps nécessaire pour entraîner un modèle peut être très long en raison de la taille de la base de données ImageNet. Vous pouvez également utiliser une version de démonstration de l'ensemble de données, appelée fake_imagenet. Cette version de démonstration vous permet de tester le modèle, tout en réduisant les exigences de stockage et de temps généralement associées à l'utilisation de la base de données ImageNet complète.
Prétraiter l'intégralité de l'ensemble de données ImageNet
L'ensemble de données ImageNet se compose de trois parties : des données d'entraînement, des données de validation et des libellés d'image.
Les données d'entraînement contiennent 1 000 catégories et 1,2 million d'images, empaquetées pour faciliter le téléchargement. Les données de validation et de test ne sont pas contenues dans les données d'entraînement ImageNet (les doublons ont été supprimés).
Les données de validation et de test se composent de 150 000 photographies recueillies par Flickr et d'autres moteurs de recherche, libellées manuellement avec 1 000 catégories d'objets, qui sont présentes ou pas. Les 1 000 catégories d'objets contiennent à la fois des nœuds internes et des nœuds feuilles d'ImageNet, mais qui ne se chevauchent pas. Un sous-ensemble aléatoire de 50 000 mages avec libellés a été publié en tant que données de validation, accompagné d'une liste des 1 000 catégories. Les images restantes servent à l'évaluation et ont été publiées sans libellés.
Procédure de prétraitement de l'ensemble de données complet ImageNet
Pour préparer l'intégralité de l'ensemble de données ImageNet à utiliser par un modèle de machine learning, suivez les cinq étapes de la procédure:
- Vérifiez que vous disposez d'un espace suffisant sur la cible de téléchargement.
- Configurez les répertoires cibles.
- Inscrivez-vous sur le site ImageNet et demandez l'autorisation de téléchargement.
Téléchargez l'ensemble de données sur le disque local ou l'instance de VM.
Vérifier l'espace nécessaire
Que vous téléchargiez l'ensemble de données sur votre ordinateur local ou sur une instance de VM, vous devez disposer d'environ 300 Go d'espace disponible sur la cible de téléchargement.
L'allocation de disque par défaut pour une VM TPU est de 100 Go. Étant donné que le téléchargement sur votre VM TPU nécessite 300 Go, si vous souhaitez effectuer un téléchargement sur votre instance de VM TPU, vous devrez ajouter un disque persistant avec 200 Go d'espace supplémentaire pour effectuer le téléchargement. Sur une VM TPU, vous pouvez vérifier l'espace de stockage disponible à l'aide de la commande df -ha
.
Lorsque vous ajoutez un disque persistant, assurez-vous de:
- Dans le champ Lors de la suppression d'une instance, sélectionnez l'option Supprimer le disque pour vous assurer qu'il sera supprimé en même temps que la VM.
- Notez le chemin d'accès au nouveau disque. Exemple :
/mnt/disks/mnt-dir
.
Configurer les répertoires cibles
Sur votre ordinateur local ou votre instance de VM, configurez la structure de répertoires pour stocker les données téléchargées.
Créez un répertoire, par exemple,
imagenet
, dans votre répertoire de base sur la cible de téléchargement (ordinateur local ou VM TPU).mkdir imagenet
Dans ce répertoire, créez deux sous-répertoires:
train
etvalidation
.mkdir imagenet/train mkdir imagenet/validation
Exportez le répertoire
imagenet
en tant queIMAGENET_HOME
.export IMAGENET_HOME=~/imagenet
S'inscrire et demander l'autorisation de télécharger l'ensemble de données
Inscrivez-vous sur le site Web d'ImageNet. Vous ne pouvez pas télécharger l'ensemble de données tant que ImageNet n'a pas confirmé votre enregistrement et ne vous a pas envoyé d'e-mail de confirmation. Si vous n'avez pas reçu d'e-mail de confirmation dans les jours qui suivent, contactez l'assistance ImageNet pour savoir pourquoi votre enregistrement n'a pas été confirmé. Une fois votre enregistrement confirmé, vous pouvez télécharger l'ensemble de données. Les tutoriels Cloud TPU qui utilisent l'ensemble de données ImageNet exploitent les images de l'édition 2012 du concours ImageNet Large Scale Visual Recognition Challenge (ILSVRC2012).
Télécharger l'ensemble de données ImageNet
Sur le site de téléchargement LSRVC 2012, accédez à la section "Images" de la page et effectuez un clic droit sur "Images d'entraînement (Tâche 1 et 2)". URL permettant de télécharger la plus grande partie de l'ensemble d'entraînement. Enregistrez l'URL.
Effectuez un clic droit sur "Images d'entraînement (tâche 3)" pour obtenir l'URL du deuxième ensemble d'entraînement. Enregistrez l'URL.
Effectuez un clic droit sur "Images de validation (toutes les tâches)" pour obtenir l'URL de l'ensemble de données de validation. Enregistrez l'URL.
Si vous téléchargez les fichiers ImageNet sur votre ordinateur local, vous devez copier les répertoires de votre ordinateur local dans le répertoire
$IMAGENET_HOME
correspondant sur votre instance de VM. La copie de l'ensemble de données ImageNet de l'hôte local sur votre instance de VM prend environ 13 heures.Avant de copier l'ensemble de données ImageNet sur votre VM TPU, vous devez identifier le nom de votre instance de VM TPU. Pour ce faire, connectez-vous à votre VM TPU à l'aide de SSH. Le nom de l'instance de VM s'affiche dans l'invite de commande après le symbole
@
.Utilisez la commande suivante pour copier les fichiers situés sous ~/imagenet sur votre ordinateur local dans
$IMAGENET_HOME
sur votre VM.gcloud compute scp --recurse $IMAGENET_HOME username@vm-instance-name:~/imagenet
Dans
$IMAGENET_HOME
, téléchargez les fichiers "Images d'entraînement (Tâche 1 et 2)" à l'aide de l'URL enregistrée.Le fichier "Images d'entraînement (Tâche 1 et 2)" est l'ensemble d'entraînement volumineux. Sa taille est de 138 Go. Si vous le téléchargez sur votre VM TPU à l'aide de Cloud Shell, le téléchargement prend environ 40 heures. Si Cloud Shell perd sa connexion à la VM, vous pouvez ajouter
nohup
à la commande ou utiliser screen.cd $IMAGENET_HOME \ nohup wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar
Remplacez l'URL par celle que vous avez précédemment enregistrée pour "Images d'entraînement (tâche 1 et 2)", car elle a peut-être changé.
Extrayez les répertoires d'entraînement individuels dans le répertoire
$IMAGENET_HOME/train
à l'aide de la commande suivante. L'extraction prend entre 1 et 3 heures.tar xf $IMAGENET_HOME/ILSVRC2012_img_train.tar -C $IMAGENET_HOME/train
Extrayez les fichiers tar d'entraînement individuels situés dans le répertoire
$IMAGENET_HOME/train
, comme indiqué dans le script suivant:cd `$IMAGENET_HOME/train` for f in *.tar; do d=`basename $f .tar` mkdir $d tar xf $f -C $d done
Supprimez les fichiers TAR après les avoir extraits pour libérer de l'espace disque.
Dans
$IMAGENET_HOME
, téléchargez les fichiers "Images d'entraînement (Tâche 3)" à l'aide de l'URL enregistrée.La taille du fichier "Images d'entraînement (Tâche 3)" est de 728 Mo et son téléchargement ne prend que quelques minutes. Vous n'avez donc pas besoin de prendre des précautions contre une perte de connexion de Cloud Shell.
wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train_t3.tar
Remplacez l'URL par celle que vous avez précédemment enregistrée pour "Images d'entraînement (tâche 3)", car elle peut avoir changé.
Extrayez les répertoires d'entraînement individuels dans le répertoire
$IMAGENET_HOME/train
à l'aide de la commande suivante.tar xf $IMAGENET_HOME/ILSVRC2012_img_train_t3.tar -C $IMAGENET_HOME/train
Extrayez les fichiers tar d'entraînement individuels situés dans le répertoire
$IMAGENET_HOME/train
, comme indiqué dans le script suivant:cd `$IMAGENET_HOME/train` for f in *.tar; do d=`basename $f .tar` mkdir $d tar xf $f -C $d done
Supprimez les fichiers TAR après les avoir extraits pour libérer de l'espace disque.
Dans
$IMAGENET_HOME
, téléchargez les fichiers "Images de validation (toutes les tâches)" à l'aide de l'URL enregistrée.Lorsque vous téléchargez le fichier "Images de validation (toutes les tâches)", votre Cloud Shell peut se déconnecter. Vous pouvez utiliser
nohup
ou screen pour empêcher Cloud Shell de se déconnecter.wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar
Remplacez l'URL par celle que vous avez précédemment enregistrée pour "Images de validation (toutes les tâches)", car elle a peut-être changé.
Ce téléchargement prend environ 30 minutes.
Extrayez les fichiers de validation individuels dans le répertoire
$IMAGENET_HOME/validation
à l'aide de la commande suivante.tar xf $IMAGENET_HOME/ILSVRC2012_img_val.tar -C $IMAGENET_HOME/validation
Si vous avez téléchargé les fichiers de validation sur votre ordinateur local, vous devez copier le répertoire
$IMAGENET_HOME/validation
de votre ordinateur dans le répertoire$IMAGENET_HOME/validation
de votre instance de VM. Cette opération de copie prend environ 30 minutes.Téléchargez le fichier des libellés.
wget -O $IMAGENET_HOME/synset_labels.txt \ https://raw.githubusercontent.com/tensorflow/models/master/research/slim/datasets/imagenet_2012_validation_synset_labels.txt
Si vous avez téléchargé le fichier de libellés sur votre ordinateur local, vous devez le copier dans le répertoire
$IMAGENET_HOME
de votre machine locale vers le répertoire$IMAGENET_HOME
sur votre instance de VM. Cette opération de copie prend quelques secondes.Le nom des sous-répertoires d'entraînement (par exemple, n03062245) est un "ID WordNet" (wnid). L'API ImageNet affiche le mappage des identifiants WordNet sur les libellés de validation associés dans le fichier
synset_labels.txt
. Dans ce contexte, un "synset" est un groupe d'images qui se ressemblent.
Traiter l'ensemble de données ImageNet et, éventuellement, l'importer dans Cloud Storage
Téléchargez le script
imagenet_to_gcs.py
à partir de GitHub comme suit :wget https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/imagenet_to_gcs.py
Si vous importez l'ensemble de données dans Cloud Storage, spécifiez l'emplacement du bucket de stockage pour importer l'ensemble de données ImageNet :
export STORAGE_BUCKET=gs://bucket-name
Si vous importez l'ensemble de données sur votre ordinateur local ou votre VM, spécifiez un répertoire de données pour stocker l'ensemble de données :
(vm)$ export DATA_DIR=$IMAGENET_HOME/dataset-directory
Installez les bibliothèques suivantes sur votre machine ou dans un environnement virtuel:
pip3 install google-cloud-storage pip3 install tensorflow
Exécutez le script pour prétraiter l'ensemble de données brut en tant que TFRecords et importez-le dans Cloud Storage à l'aide de la commande suivante :
python3 imagenet_to_gcs.py \ --project=$PROJECT \ --gcs_output_path=$STORAGE_BUCKET \ --raw_data_dir=$IMAGENET_HOME \ --local_scratch_dir=$IMAGENET_HOME/tf_records
Le script génère un ensemble de répertoires (à la fois pour l'entraînement et la validation) au format suivant :
${DATA_DIR}/train-00000-of-01024
${DATA_DIR}/train-00001-of-01024
...
${DATA_DIR}/train-01023-of-01024
et
${DATA_DIR}/validation-00000-of-00128
${DATA_DIR}/validation-00001-of-00128
...
${DATA_DIR}/validation-00127-of-00128
Une fois les données importées dans votre bucket Cloud, exécutez votre modèle et définissez --data_dir=${DATA_DIR}
.