Descarga, procesamiento previo y carga del conjunto de datos de ImageNet

En este tema, se describe cómo descargar, procesar de forma previa y subir el conjunto de datos de ImageNet que se usará con Cloud TPU. Los modelos de aprendizaje automático que usan el conjunto de datos de ImageNet incluyen las siguientes redes:

  • ResNet
  • AmoebaNet
  • EfficientNet
  • MNASNet
ImageNet es una base de datos de imágenes. Las imágenes de la base de datos están organizadas de forma jerárquica, y cientos y miles de imágenes representan a cada nodo.

El tamaño de la base de datos de ImageNet significa que puede tardar bastante en entrenar un modelo. Una alternativa es usar una versión de demostración del conjunto de datos, denominada fake_imagenet. Esta versión de demostración te permite probar el modelo, a la vez que reduce los requisitos de almacenamiento y tiempo asociados con el uso de la base de datos completa de ImageNet.

Procesa de forma previa el conjunto de datos completo de ImageNet

El conjunto de datos de ImageNet consta de tres partes, datos de entrenamiento, datos de validación y etiquetas de imágenes.

Los datos de entrenamiento contienen 1,000 categorías y 1.2 millones de imágenes, empaquetadas para facilitar la descarga. Los datos de validación y prueba no se encuentran en los datos de entrenamiento de ImageNet (se quitaron los duplicados).

Los datos de validación y prueba constan de 150,000 fotografías, recopiladas de Flickr y otros motores de búsqueda, etiquetadas con la presencia o ausencia de 1,000 categorías de objetos. Las 1,000 categorías de objetos contienen nodos internos y nodos de hoja de ImageNet, pero no se superponen entre sí. Se lanzó un subconjunto aleatorio de 50,000 imágenes con etiquetas como datos de validación junto con una lista de las 1,000 categorías. Las imágenes restantes se usan para la evaluación y se lanzaron sin etiquetas.

Pasos para procesar previamente el conjunto de datos ImageNet completo

Hay cinco pasos a fin de preparar el conjunto de datos ImageNet completo para que lo use un modelo de aprendizaje automático:

  1. Verifica que tengas espacio en el destino de descarga.
  2. Configura los directorios de destino.
  3. Regístrate en el sitio de ImageNet y solicita permiso de descarga.
  4. Descarga el conjunto de datos en el disco local o en la VM de Compute Engine.

  5. Ejecuta la secuencia de comandos de procesamiento previo y carga.

Verifica los requisitos de espacio

Si descargas el conjunto de datos en tu máquina local o en una VM de Compute Engine, necesitarás alrededor de 300 GB de espacio disponible en el destino de descarga. En una VM, puedes verificar el almacenamiento disponible con el comando df -ha.

Puedes aumentar el tamaño del disco de VM mediante uno de los siguientes métodos:

  • Especifica la marca --disk-size en la línea de comandos de gcloud compute con el tamaño, en GB, que desees asignar.
  • Si sigues la guía de Compute Engine para agregar un disco a la VM
    • Configura Cuando se borra la instancia en Borrar disco a fin de garantizar que se quite el disco cuando eliminas la VM.
    • Anota la ruta de acceso al disco nuevo. Por ejemplo: /mnt/disks/mnt-dir.

Configura los directorios de destino

En tu máquina local o VM de Compute Engine, configura la estructura de directorios para almacenar los datos descargados.

  • Crea y exporta un directorio de inicio para el conjunto de datos ImageNet.

    Crea un directorio, por ejemplo, imagenet en tu directorio principal en la máquina local o VM. En este directorio, crea dos subdirectorios: train y validation. Exporte el directorio principal como IMAGENET_HOME:

    export IMAGENET_HOME=~/imagenet
    

Regístrate y solicita permiso para descargar el conjunto de datos

  • Regístrate en el sitio web de Imagenet. No puedes descargar el conjunto de datos hasta que ImageNet confirme tu registro y te envíe un correo electrónico de confirmación. Si no recibes el correo electrónico de confirmación en un par de días, comunícate con el equipo de asistencia de ImageNet para ver por qué no se confirmó tu registro. Cuando se confirme el registro, puedes descargar el conjunto de datos. En los instructivos de Cloud TPU que usan el conjunto de datos de ImageNet, se usan las imágenes de ImageNet Large Scale Visual Challenge 2012 (ILSVRC2012).

Descarga el conjunto de datos ImageNet

  1. En el sitio de descarga de LSRVC 2012, ve a la sección Imágenes en la página y haz clic con el botón derecho en “Imágenes de entrenamiento (Tareas 1 y 2)”. Esto te brindará la URL necesaria para descargar la parte más grande del conjunto de entrenamiento. Guarda la URL.

    Haz clic con el botón derecho en "Imágenes de entrenamiento (Tarea 3)" para obtener la URL del segundo conjunto de entrenamiento. Guarda la URL.

    Haz clic derecho en “Validation images (all tasks)” para obtener la URL del conjunto de datos de validación. Guarda la URL.

    Si descargas los archivos de ImageNet en tu máquina local, después de que se complete la descarga, debes copiar los directorios en tu máquina local en el directorio $IMAGENET_HOME correspondiente en tu VM de Compute Engine. Copiar el conjunto de datos de ImageNet del host local a tu VM toma alrededor de 13 horas.

    Por ejemplo, el siguiente comando copia todos los archivos de $IMAGENET_HOME en tu máquina local a tu VM que muestra el mensaje de shell username@vm-name:

    gcloud compute scp --recurse $IMAGENET_HOME username@vm-name:~/imagenet
    
  2. Desde $IMAGENET_HOME, usa wget para descargar los archivos de entrenamiento y validación con las URL guardadas.

    El archivo “Imágenes de entrenamiento (tarea 1 y 2)” es el gran conjunto de entrenamiento. Se trata de 138 GB y, si descargas el archivo a una VM de Compute Engine mediante Cloud Shell, la descarga demora alrededor de 40 horas. Para este archivo particularmente grande, puedes anteponer nohup al comando o usar screen a fin de evitar que la descarga salga si la Cloud Shell se desconecta.

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

    Así se descarga un archivo tar grande: ILSVRC2012_img_train.tar.

    Desde $IMAGENET_HOME en la VM, extrae los directorios de entrenamiento individuales en el directorio $IMAGENET_HOME/train mediante el siguiente comando. La extracción lleva entre 1 y 3 horas.

    tar xf ILSVRC2012_img_train.tar
    

    El archivo “Imágenes de entrenamiento (Tarea 3)” es de 728 MB y solo tarda unos minutos en descargarse, por lo que no es necesario que tomes precauciones para no perder la conexión a Cloud Shell.

    Cuando descargas este archivo, extrae los directorios de entrenamiento individuales en el directorio $IMAGENET_HOME/train existente.

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

    El archivo “Imágenes de validación (todas las tareas)” es de 6 GB, por lo que te recomendamos usar nohup o pantalla para evitar la salida de descarga si se desconecta Cloud Shell.

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

    Esta descarga tardará alrededor de 30 minutos. Cuando descargas este archivo, se extraen los directorios de validación individuales en el directorio $IMAGENET_HOME/validation.

    Si descargaste los archivos de validación en tu máquina local, debes copiar el directorio $IMAGENET_HOME/validation en tu máquina local al directorio $IMAGENET_HOME/validation en la VM de Compute Engine. Esta operación de copia tarda unos 30 minutos.

    Descargue el archivo de etiquetas. Este proceso solo tardará unos segundos.

    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 descargaste el archivo de etiquetas en tu máquina local, debes copiarlo al directorio $IMAGENET_HOME en tu máquina local a $IMAGENET_HOME en tu VM de Compute Engine. Esta operación de copia tarda unos segundos en completarse.

    Los nombres de los subdirectorios de entrenamiento (por ejemplo, n03062245) son “ID de WordNet” (wnid). La API de ImageNet muestra la asignación de los ID de WordNet a las etiquetas de validación asociadas en el archivo synset_labels.txt. Un synset en este contexto es un grupo de imágenes visualmente similares.

Procesa el conjunto de datos de Imagenet y, de manera opcional, súbelo a Cloud Storage

  1. Descarga la secuencia de comandos de imagenet_to_gcs.py desde GitHub:

    wget https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/imagenet_to_gcs.py
    
  2. Si subes el conjunto de datos a Cloud Storage, especifica la ubicación del bucket de almacenamiento para subir el conjunto de datos de ImageNet:

    export STORAGE_BUCKET=gs://bucket-name
    
  3. Si subes el conjunto de datos a tu máquina local o VM, especifica un directorio de datos para contener el conjunto de datos:

    (vm)$ export DATA_DIR=$IMAGENET_HOME/dataset-directory
    
  4. Ejecuta la secuencia de comandos para preprocesar el conjunto de datos sin procesar como TFRecords y subirlo a Cloud Storage mediante el siguiente comando:

     python3 imagenet_to_gcs.py \
      --project=$PROJECT \
      --gcs_output_path=$DATA_DIR  \
      --raw_data_dir=$IMAGENET_HOME \
      --local_scratch_dir=$IMAGENET_HOME/tf_records
    

La secuencia de comandos genera un conjunto de directorios (tanto para entrenamiento como validación) con el siguiente formato:

${DATA_DIR}/train-00000-of-01024
${DATA_DIR}/train-00001-of-01024
 ...
${DATA_DIR}/train-01023-of-01024

y

${DATA_DIR}/validation-00000-of-00128
S{DATA_DIR}/validation-00001-of-00128
 ...
${DATA_DIR}/validation-00127-of-00128

Después de que los datos se suban al bucket de Cloud, ejecuta el modelo y configura --data_dir=${DATA_DIR}.