Descarga, procesa de forma previa 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 para usarlo 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, a la vez que reduce los requisitos de almacenamiento y de 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 imagen.
Los datos de entrenamiento contienen 1,000 categorías y 1.2 millones de imágenes empaquetadas para descargar. 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 de prueba constan de 150,000 fotos, recopiladas de Flickr y otros motores de búsqueda, etiquetadas 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 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 de forma previa el conjunto de datos completo de ImageNet
Hay cinco pasos para preparar el conjunto de datos completo de ImageNet con el objetivo de que lo use un modelo de aprendizaje automático:
- Verifica que tengas espacio en el destino de descarga.
- Configura los directorios de destino.
- Regístrate en el sitio de ImageNet y solicita el permiso de descarga.
Descarga el conjunto de datos en el disco local o en la instancia de VM.
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 instancia de VM, necesitarás unos 300 GiB de espacio disponible en el destino de descarga.
La asignación de disco predeterminada para una VM de TPU es de 100 GiB. Dado que la descarga en tu
VM de TPU requiere 300 GiB, si vas a descargar en tu instancia de VM de TPU,
deberás agregar un volumen de almacenamiento en bloque duradero
con 200 GiB de espacio adicional para completar el proceso. En una VM de TPU,
puedes verificar el almacenamiento disponible con el comando df -ha. Para obtener más información
sobre cómo cambiar el tamaño de los discos conectados, consulta Modifica los parámetros de configuración de un volumen de
Google Cloud Hyperdisk y Aumenta el tamaño del
volumen de un Persistent Disk.
Cuando agregues almacenamiento en bloque duradero, asegúrate de anotar el directorio en el
que activaste el disco. Por ejemplo: /mnt/disks/mnt-dir.
Configura los directorios de destino
En tu máquina local o instancia de VM, configura la estructura de directorios para almacenar los datos descargados.
Cambia al directorio en el que deseas descargar los datos. Si usas un disco persistente, reemplaza DATASET_ROOT_DIR por el directorio en el que se activó el disco, por ejemplo,
/mnt/disks/mnt-dir:cd DATASET_ROOT_DIR
Crea un directorio, por ejemplo,
imagenet, en el destino de descarga (máquina local o VM de TPU).mkdir imagenetEn este directorio, crea dos subdirectorios:
trainyvalidation.mkdir imagenet/train mkdir imagenet/validationExporta el directorio
imagenetcomoIMAGENET_HOME.export IMAGENET_HOME=DATASET_ROOT_DIR/imagenet sudo chown ${USER} ${IMAGENET_HOME}
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. Una vez que se confirme el registro, puedes descargar el conjunto de datos. Los instructivos de Cloud TPU que usan el conjunto de datos de ImageNet utilizan las imágenes del ImageNet Large Scale Visual Recognition Challenge 2012 (ILSVRC2012).
Descarga el conjunto de datos de ImageNet
Desde el sitio de descarga de LSRVC 2012, ve a la sección "Images" de la página y haz clic con el botón derecho en "Training images (Task 1 & 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 "Training images (Task 3)" para obtener la URL del segundo conjunto de entrenamiento. Guarda la URL.
Haz clic con el botón 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, deberás copiar los directorios en tu máquina local al directorio
$IMAGENET_HOMEcorrespondiente de tu instancia de VM. Copiar el conjunto de datos de ImageNet de un host local a tu instancia de VM lleva aproximadamente 13 horas.Antes de copiar el conjunto de datos de ImageNet en tu VM de TPU, debes identificar el nombre de tu instancia de VM de TPU. Para ello, conéctate a ella 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 de ~/imagenet en tu máquina local a
$IMAGENET_HOMEen tu VM.gcloud compute scp --recurse $IMAGENET_HOME username@vm-instance-name:~/imagenet
Desde
$IMAGENET_HOME, descarga los archivos "Training images (Task 1 & 2)" con la URL guardada.El archivo "Training images (Task 1 & 2)" es el conjunto de entrenamiento grande. Es de 138 GiB y, si se descarga en tu VM de TPU con Cloud Shell, el proceso demora aproximadamente 40 horas. Si Cloud Shell pierde la conexión con la VM, puedes anteponer
nohupal 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 antes para "Training images (Task 1 & 2)", ya que es posible que haya cambiado.
Extrae los directorios de entrenamiento individuales en el directorio
$IMAGENET_HOME/traincon el siguiente comando. La extracción toma 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 el directorio
$IMAGENET_HOME/train, como se muestra en la siguiente secuencia de comandos:cd $IMAGENET_HOME/train
for f in *.tar; do d=
basename $f .tarmkdir $d tar xf $f -C $d doneBorra los archivos tar después de extraerlos para liberar espacio en el disco.
Desde
$IMAGENET_HOME, descarga los archivos "Training images (Task 3)" con la URL guardada.El archivo "Training images (Task 3)" es de 728 MB, así que solo toma unos minutos en descargarse, por lo que no necesitas tomar precauciones por si pierdes la conexión de Cloud Shell.
wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train_t3.tarReemplaza la URL por la que guardaste antes para "Training images (Task 3)", ya que es posible que haya cambiado.
Extrae los directorios de entrenamiento individuales en el directorio
$IMAGENET_HOME/traincon 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 el directorio
$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.
Desde
$IMAGENET_HOME, descarga los archivos de "Validation images (all tasks)" con la URL guardada.Es posible que Cloud Shell se desconecte cuando descargues el archivo "Validation images (all tasks)". Puedes usar
nohupo screen para evitar que Cloud Shell se desconecte.wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tarReemplaza la URL por la que guardaste antes para "Validation images (all tasks)" ya que es posible que haya cambiado.
Esta descarga toma unos 30 minutos.
Extrae los archivos de validación individuales en el directorio
$IMAGENET_HOME/validationcon 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/validationde esta en el directorio$IMAGENET_HOME/validationde tu instancia de VM. Esta operación de copia demora alrededor de 30 minutos.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 en el directorio
$IMAGENET_HOMEde tu máquina local en$IMAGENET_HOMEde tu instancia de VM. Esta operación de copia demora unos segundos.Los nombres de los subdirectorios de entrenamiento (por ejemplo, n03062245) son "WordNet IDs" (wnid). La API de ImageNet muestra la asignación de IDs 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
Descarga la secuencia de comandos
imagenet_to_gcs.pydesde GitHub:wget https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/imagenet_to_gcs.pySi subes el conjunto de datos a Cloud Storage, haz lo siguiente:
Usa un bucket existente o crea uno nuevo siguiendo las instrucciones en Crea buckets.
Especifica la ubicación del bucket de almacenamiento para subir el conjunto de datos de ImageNet:
export STORAGE_BUCKET=gs://bucket-name
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
Instala las siguientes bibliotecas en tu máquina o en un entorno virtual:
pip3 install google-cloud-storage pip3 install tensorflowEjecuta la secuencia de comandos para procesar de forma previa 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, tanto para entrenamiento como para validación, similar a 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}.