Descarga, procesa previamente y sube el conjunto de datos de ImageNet

En este documento, se describe cómo descargar, procesar de forma previa y subir el conjunto de datos de ImageNet que se usará con la arquitectura de VM de Cloud TPU.

ImageNet es una base de datos de imágenes. Las imágenes de la base de datos están organizadas en forma jerárquica, y cada nodo está representado por cientos y miles de imágenes.

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 y, al mismo tiempo, reducir los requisitos de almacenamiento y tiempo asociados con la base de datos de ImageNet completa.

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 imagen.

Los datos de entrenamiento contienen 1,000 categorías y 1.2 millones de imágenes, todo esto empaquetado para que se pueda descargar con facilidad. Los datos de validación y de 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 fotos, recopiladas de Flickr y otros motores de búsqueda, etiquetados a mano 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 publicaron sin etiquetas.

Pasos para procesar previamente el conjunto de datos completo de ImageNet

Hay cinco pasos para preparar el conjunto de datos completo de ImageNet para que lo use una máquina 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 la descarga permiso.
  4. Descarga el conjunto de datos en el disco local o en la instancia de VM.

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

Verifica los requisitos de espacio

Ya sea que descargues el conjunto de datos en tu máquina local o en una instancia de VM, necesita alrededor de 300 GB de espacio disponible en el destino de descarga.

La asignación de disco predeterminada para una VM de TPU es de 100 GB. Dado que la descarga en tu VM de TPU requiere 300 GB, si vas a descargar en tu instancia de VM de TPU, deberás agregar un disco persistente con 200 GB de espacio adicional para completar la descarga. En una VM TPU, puedes verificar tu almacenamiento disponible con el comando df -ha.

Cuando agregues un disco persistente, asegúrate de hacer lo siguiente:

  • Configura Cuando se borra la instancia en Borrar disco para garantizar que se borre el disco cuando borres 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 instancia de VM, configura la estructura del directorio para almacenar los datos descargados.

  1. Crea un directorio, por ejemplo, imagenet, en el directorio principal de el destino de descarga (máquina local o VM de TPU).

    mkdir imagenet
    
  2. En este directorio, crea dos subdirectorios: train y validation.

    mkdir imagenet/train
    mkdir imagenet/validation
    
  3. Exporta el directorio imagenet 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 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 dentro de los comuníquese con el equipo de asistencia de ImageNet para saber por qué su no se ha confirmado el registro. Una vez que se confirme tu registro, descargar el conjunto de datos. Los instructivos de Cloud TPU que usan ImageNet conjunto de datos, usan las imágenes del reconocimiento visual a gran escala de ImageNet Desafío 2012 (ILSVRC2012).

Descarga el conjunto de datos ImageNet

  1. De la descarga de LSRVC 2012 sitio, ve a a la sección Imágenes de la página y haz clic con el botón derecho en “Imágenes de entrenamiento (Tarea 1 y 2)". Es la URL 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 con el botón derecho en “Imágenes de validación (todas las tareas)” 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, debes copiar los directorios de tu máquina local al archivo $IMAGENET_HOME correspondiente, en tu instancia de VM. Copia el conjunto de datos de ImageNet desde el host local a la instancia de VM tarda alrededor de 13 horas.

    Antes de copiar el conjunto de datos de ImageNet en tu VM de TPU, debes identificar la nombre de tu instancia de VM de TPU. Para hacerlo, conéctate a la VM de TPU con SSH. El nombre de la instancia de VM se muestra en el símbolo del sistema después del símbolo @.

    Usa el siguiente comando para copiar los archivos que se encuentran en ~/imagenet en la red local máquina virtual a $IMAGENET_HOME en tu VM.

    gcloud compute scp --recurse $IMAGENET_HOME username@vm-instance-name:~/imagenet
  2. Desde $IMAGENET_HOME, descarga los archivos “Imágenes de entrenamiento (tarea 1 y 2)” con la URL guardada.

    El archivo “Imágenes de entrenamiento (tarea 1 y 2)” es el gran conjunto de entrenamiento. Sí 138 GB. Si lo descargas a tu VM de TPU con Cloud Shell, la descarga tarda alrededor de 40 horas. Si Cloud Shell pierde la conexión con la VM, puedes anteponer nohup al comando o usar screen.

    cd $IMAGENET_HOME \
    nohup wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar

    Reemplaza la URL por la que guardaste anteriormente para “Imágenes de entrenamiento (Tarea 1 y 2)", ya que es posible que la URL haya cambiado.

  3. Extrae los directorios de entrenamiento individuales en $IMAGENET_HOME/train. con el siguiente comando. La extracción demora entre 1 y 3 horas.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_train.tar -C $IMAGENET_HOME/train

    Extrae los archivos tar de entrenamiento individuales ubicados en $IMAGENET_HOME/train, como se muestra en la siguiente secuencia de comandos:

    cd `$IMAGENET_HOME/train`
    
    for f in *.tar; do
     d=`basename $f .tar`
     mkdir $d
     tar xf $f -C $d
    done

    Borra los archivos tar después de extraerlos para liberar espacio en el disco.

  4. En $IMAGENET_HOME, descarga “Imágenes de entrenamiento (Tarea 3)” archivos con la URL guardada.

    La sección “Imágenes de entrenamiento (Tarea 3)” es de 728 MB y tarda solo unos minutos. para descargarlo, así que no necesitas precauciones para no perder conexión de Cloud Shell.

    wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train_t3.tar

    Reemplaza la URL por la que guardaste anteriormente para “Imágenes de entrenamiento (tarea 3)”, ya que es posible que haya cambiado.

  5. Extrae los directorios de entrenamiento individuales en $IMAGENET_HOME/train. con el siguiente comando.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_train_t3.tar -C $IMAGENET_HOME/train

    Extrae los archivos tar de entrenamiento individuales ubicados en $IMAGENET_HOME/train, como se muestra en la siguiente secuencia de comandos:

    cd `$IMAGENET_HOME/train`
    
    for f in *.tar; do
     d=`basename $f .tar`
     mkdir $d
     tar xf $f -C $d
    done

    Borra los archivos tar después de extraerlos para liberar espacio en el disco.

  6. En $IMAGENET_HOME, descarga la sección “Imágenes de validación (todas las tareas)” archivos mediante la URL guardada.

    Cuando descargues el artículo "Imágenes de validación (todas las tareas)" el archivo Es posible que se desconecte Cloud Shell. Puedes usar nohup o pantalla para evitar Cloud Shell no se desconecte.

    wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar

    Reemplaza la URL por la que guardaste anteriormente para “Imágenes de validación” (todas las tareas)", ya que es posible que la URL haya cambiado.

    Esta descarga toma unos 30 minutos.

  7. Extrae los archivos de validación individuales en $IMAGENET_HOME/validation con el siguiente comando.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_val.tar -C $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 en el directorio $IMAGENET_HOME/validation de tu instancia de VM. Esta operación de copia demora alrededor de 30 minutos.

  8. Descarga el archivo de etiquetas.

    wget -O $IMAGENET_HOME/synset_labels.txt \
    https://raw.githubusercontent.com/tensorflow/models/master/research/slim/datasets/imagenet_2012_validation_synset_labels.txt

    Si descargaste el archivo de etiquetas en tu máquina local, debes copiarlo. al directorio $IMAGENET_HOME de tu máquina local en $IMAGENET_HOME en tu instancia de VM. Esta operación de copia demora unos segundos.

    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 sus 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 almacenar el conjunto de datos:

    (vm)$ export DATA_DIR=$IMAGENET_HOME/dataset-directory
  4. Instala las siguientes bibliotecas en tu máquina o en un entorno virtual:

    pip3 install google-cloud-storage
    pip3 install tensorflow
    
  5. Ejecuta la secuencia de comandos para procesar previamente el conjunto de datos sin procesar como TFRecords y subirlo a Cloud Storage con el siguiente comando:

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

La secuencia de comandos genera un conjunto de directorios (para entrenamiento y validación), como los que se muestran a continuación:

${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
${DATA_DIR}/validation-00001-of-00128
...
${DATA_DIR}/validation-00127-of-00128

Una vez que los datos se hayan subido a tu bucket de Cloud, ejecuta tu modelo y configura --data_dir=${DATA_DIR}.