Descargar, procesar previamente y subir el conjunto de datos de ImageNet
En este tema, se describe cómo descargar, procesar con anterioridad y subir el conjunto de datos de ImageNet para 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 el entrenamiento de un modelo puede tardar bastante tiempo. 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 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 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:
- 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.
Descargue el conjunto de datos al disco local o a la instancia de VM.
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, necesitas alrededor de 300 GB de espacio disponible en el destino de descarga.
La asignación de disco predeterminada para una VM TPU es de 100 GB. Dado que la descarga a tu VM de TPU requiere 300 GB, si vas a descargar a tu instancia de VM de TPU, tendrás que agregar un disco persistente y 200 GB de espacio adicional para completar la descarga. En una VM de TPU, puedes verificar el almacenamiento disponible con el comando df -ha
.
Cuando agregues un disco persistente, asegúrate de hacer lo siguiente:
- Configura Cuando se borre la instancia en Borrar disco a fin de 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.
Crea y exporta un directorio de inicio para el conjunto de datos ImageNet.
Crea un directorio, por ejemplo,
imagenet
en el directorio principal de tu destino de descarga (máquina local o VM de TPU). En este directorio, crea dos subdirectorios:train
yvalidation
. Exporta 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. 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 desafío de reconocimiento visual a gran escala de ImageNet 2012 (ILSVRC2012).
Descarga el conjunto de datos ImageNet
En el sitio de descarga de LSRVC 2012, ve a la sección Imágenes de la página y haz clic con el botón derecho en “Imágenes de entrenamiento (tareas 1 y 2)”. Es la URL para descargar la mayor parte del conjunto de entrenamiento. Guarda la URL.
Haz clic con el botón derecho en “Training images (Task 3)” a fin de obtener la URL para el 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 ImageNet en tu máquina local, debes copiar los directorios en tu máquina local al directorio
$IMAGENET_HOME
correspondiente en tu instancia de VM. La copia del conjunto de datos ImageNet del host local a tu instancia de VM toma alrededor de 13 horas.Antes de copiar el conjunto de datos de ImageNet en tu VM, debes identificar el nombre de tu instancia de VM. Para ello, ejecuta el siguiente comando de
gcloud describe
y ubica el nombre de tu instancia de VM en el resultado.gcloud compute tpus tpu-vm describe tpu-name --zone=zone
Esto genera un resultado que contiene una línea que incluye el nombre de tu instancia de VM (un ejemplo de este se muestra en negrita a continuación):
tpuVmSelflink: https://www.googleapis.com/compute/v1/projects/project-name/zones/zone/instances/t1v-n-2b9b54cd-w-0
Usa el siguiente comando para copiar los archivos de ~/imagenet en tu máquina local a
$IMAGENET_HOME
en tu VM.gcloud compute scp --recurse $IMAGENET_HOME username@vm-instance-name:~/imagenet
Desde $IMAGENET_HOME, usa
wget
para descargar los archivos de entrenamiento y validación mediante las URLs guardadas.El archivo “Imágenes de entrenamiento (tarea 1 y 2)” es el gran conjunto de entrenamiento. Son 138 GB y, si descargas en tu VM con Cloud Shell, la descarga tarda aproximadamente 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 http://image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train.tar
Este comando 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
con el siguiente comando. La extracción toma entre 1 y 3 horas.tar xf $IMAGENET_HOME/ILSVRC2012_img_train.tar -C $IMAGENET_HOME/traintar xf ILSVRC2012_img_train.tar
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 haberlos extraído para liberar espacio en el disco.
El archivo “Imágenes de entrenamiento (tarea 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.
Cuando descargas este archivo, se extraen 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
Cuando descargue el archivo “Imágenes de validación (todas las tareas)”, es posible que se desconecte Cloud Shell. Puedes usar
nohup
o la pantalla para evitar que Cloud Shell se desconecte.wget http://www.image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_val.tar
Esta descarga toma unos 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 en el directorio$IMAGENET_HOME/validation
en 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_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 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
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
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
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
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
S{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}
.