Télécharger, prétraiter et importer l'ensemble de données ImageNet

Cette rubrique explique comment télécharger, prétraiter et importer l'ensemble de données ImageNet à utiliser avec Cloud TPU. Les modèles de machine learning qui utilisent l'ensemble de données ImageNet sont les suivants :

  • ResNet
  • AmoebaNet
  • EfficientNet
  • MNASNet
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 étant 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 :

  1. Vérifiez que vous disposez d'un espace suffisant sur la cible de téléchargement.
  2. Configurez les répertoires cibles.
  3. Inscrivez-vous sur le site ImageNet et demandez l'autorisation de téléchargement.
  4. Téléchargez l'ensemble de données sur le disque local ou la VM Compute Engine.

  5. Exécutez le script de prétraitement et d'importation.

Vérifier l'espace nécessaire

Que vous téléchargiez sur votre ordinateur local ou sur une VM Compute Engine, vous devez disposer d'environ 300 Go d'espace libre sur la cible de téléchargement. Sur une VM, vous pouvez vérifier l'espace de stockage disponible à l'aide de la commande df -ha.

.

Vous pouvez augmenter la taille du disque de VM à l'aide de l'une des méthodes suivantes :

  • Spécifiez l'indicateur --disk-size-gb sur la ligne de commande ctpu up avec la taille, en Go, que vous souhaitez allouer.
  • Suivez le guide sur Compute Engine pour ajouter un disque à votre VM.
    • 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 Compute Engine, configurez la structure de répertoires pour stocker les données téléchargées.

  • Créez et exportez un répertoire d'accueil pour l'ensemble de données ImageNet.

    Créez un répertoire, par exemple, imagenet, dans le répertoire de base de votre ordinateur local ou de votre VM. Dans ce répertoire, créez deux sous-répertoires : train et validation. Exportez le répertoire d'accueil en tant que IMAGENET_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é, accédez au site de téléchargement.

Télécharger l'ensemble de données ImageNet

  1. Sur le site de téléchargement, accédez à la section "Images" de la page et effectuez un clic droit sur "Images d'entraînement (Tâche 1 et 2)". Vous obtenez l'URL nécessaire pour 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, une fois le téléchargement terminé, vous devez copier les répertoires de votre ordinateur local dans le répertoire $IMAGENET_HOME correspondant sur votre VM Compute Engine. La copie de l'ensemble de données ImageNet de l'hôte local sur votre VM prend environ 13 heures.

    Par exemple, la commande suivante copie tous les fichiers du répertoire $IMAGENET_HOME de votre ordinateur local sur votre VM qui affiche l'invite de l'interface système username@vm-name :

    gcloud compute scp --recurse $IMAGENET_HOME username@vm-name:~/imagenet
    
  2. Dans $IMAGENET_HOME, utilisez wget pour télécharger les fichiers d'entraînement et de validation à l'aide des URL enregistrées.

    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 une VM Compute Engine à l'aide de Cloud Shell, le temps de téléchargement estimé est d'environ 40 heures. Pour ce fichier particulièrement volumineux, vous pouvez ajouter nohup à la commande ou utiliser screen pour éviter l'interruption du téléchargement si Cloud Shell se déconnecte.

    cd $IMAGENET_HOME \
    nohup wget http://image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train.tar
    

    Un fichier tar volumineux est téléchargé : ILSVRC2012_img_train.tar.

    Depuis $IMAGENET_HOME sur la VM, 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 ILSVRC2012_img_train.tar
    

    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.

    Lorsque vous téléchargez ce fichier, le processus extrait les répertoires d'entraînement individuels dans le répertoire $IMAGENET_HOME/train existant.

    wget http://www.image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train_t3.tar
    

    Le fichier "Images de validation (toutes les tâches)" est de 6 Go. Vous pouvez donc utiliser nohup ou screen pour éviter une interruption du téléchargement si Cloud Shell se déconnecte.

    wget http://www.image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_val.tar
    

    Ce téléchargement prend environ 30 minutes. Lorsque vous téléchargez ce fichier, le processus extrait les répertoires de validation individuels dans le répertoire $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 VM Compute Engine. Cette opération de copie prend environ 30 minutes.

    Téléchargez le fichier des libellés. Cette opération ne prend que quelques secondes.

    wget -O $IMAGENET_HOME/synset_labels.txt \
    https://raw.githubusercontent.com/tensorflow/models/master/research/inception/inception/data/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 VM Compute Engine. 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

  1. 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
    
  2. 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
    
  3. Si vous importez l'ensemble de données dans Cloud Storage, spécifiez un répertoire de données de bucket de stockage pour stocker l'ensemble de données :

    (vm)$ export DATA_DIR=$STORAGE_BUCKET/dataset-directory
    
  4. 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=$DATA_DIR  \
      --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
S{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}.