Convierte un conjunto de datos de clasificación de imágenes para usarlo con Cloud TPU

En este instructivo, se describe cómo usar la secuencia de comandos del ejemplo del convertidor de datos de clasificación de imágenes para convertir un conjunto de datos de clasificación de imágenes sin procesar al formato TFRecord que se usa para entrenar modelos de Cloud TPU.

Los registros TFRecord hacen que la lectura de archivos grandes desde Cloud Storage sea más eficiente que la lectura de cada imagen como un archivo individual. Puedes usar TFRecord en cualquier lugar en el que uses una canalización de tf.data.Dataset.

Consulta los siguientes documentos de TensorFlow para obtener más información sobre el uso de TFRecord:

Si usas el framework de PyTorch o JAX, y no usas Cloud Storage para el almacenamiento de tu conjunto de datos, es posible que no obtengas la misma ventaja de los TFRecords.

Descripción general de las conversiones

La carpeta de clasificación de imágenes dentro del repositorio del convertidor de datos en GitHub contiene la secuencia de comandos converter, image_classification_data.py y una implementación de ejemplo, simple_example.py, que puedes copiar y modificar para hacer tu propia conversión de datos.

El ejemplo del convertidor de datos de clasificación de imágenes define dos clases, ImageClassificationConfig y ImageClassificationBuilder. Estas clases se definen en tpu/tools/data_converter/image_classification_data.py.

ImageClassificationConfig es una clase base abstracta. Creas una subclase de ImageClassificationConfig para definir los parámetros de configuración necesarios para crear una instancia de ImageClassificationBuilder.

ImageClassificationBuilder es un compilador de conjuntos de datos de TensorFlow para conjuntos de datos de clasificación de imágenes. Es una subclase de tdfs.core.GeneratorBasedBuilder. Recupera ejemplos de datos de tu conjunto de datos y los convierte en TFRecords. Los TFRecords se escriben en una ruta de acceso especificada por el parámetro data_dir del método __init__ de ImageClassificationBuilder.

En simple_example.py, SimpleDatasetConfig subclasifica a ImageClassificationConfig, implementando propiedades que definen los modos admitidos, la cantidad de clases de imagen y un generador de ejemplos que produce un diccionario que contiene datos de imagen y una clase de imagen para cada ejemplo del conjunto de datos.

La función main() crea un conjunto de datos de imágenes generados de forma aleatoria y crea una instancia de un objeto SimpleDatasetConfig que especifica la cantidad de clases y la ruta de acceso al conjunto de datos en el disco. A continuación, main() crea una instancia de un objeto ImageClassificationBuilder y le pasa la instancia de SimpleDatasetConfig. Por último, main() llama a download_and_prepare(). Cuando se llama a este método, la instancia de ImageClassificationBuilder usa el generador de ejemplos de datos implementado por SimpleDatasetConfig para cargar cada ejemplo y los guarda en una serie de archivos TFRecord.

Para obtener una explicación más detallada, consulta Notebook del convertidor de clasificación.

Modifica el ejemplo de conversión de datos para cargar tu conjunto de datos

Para convertir tu conjunto de datos al formato TFRecord, crea una subclase de la clase ImageClassificationConfig que defina las siguientes propiedades:

  • num_labels: Devuelve la cantidad de clases de imágenes
  • supported_modes: Devuelve una lista de modos compatibles con tu conjunto de datos (por ejemplo, probar, entrenar y validar)
  • text_label_map: Devuelve un diccionario que modela la asignación de una etiqueta de clase de texto a una de clase de número entero (SimpleDatasetConfig no usa esta propiedad porque no requiere una asignación)
  • download_path: la ruta de acceso desde la que se descarga tu conjunto de datos (SimpleDatasetConfig no usa esta propiedad, ya que example_generator carga los datos desde el disco)

Implementa la función del generador example_generator. Este método debe producir un diccionario que contenga los datos de la imagen y el nombre de la clase de imagen para cada ejemplo. ImageClassificationBuilder usa la función example_generator() para recuperar cada ejemplo y escribirlos en el disco en formato TFRecord.

Ejecuta el ejemplo de conversión de datos

  1. Crea un bucket de Cloud Storage con el siguiente comando:

    gcloud storage buckets create gs://bucket-name --project=your-project-id --location=us-central2
  2. Inicia una Cloud TPU con el comando gcloud.

    $ gcloud compute tpus tpu-vm create tpu-name \
        --zone=us-central2-b \
        --accelerator-type=v4-8 \
        --version=tpu-vm-tf-2.17.1-pjrt

    Descripciones de las marcas de comandos

    zone
    Es la zona en la que deseas crear tu Cloud TPU.
    accelerator-type
    El tipo de acelerador especifica la versión y el tamaño de la Cloud TPU que deseas crear. Para obtener más información sobre los tipos de aceleradores compatibles con cada versión de TPU, consulta Versiones de TPU.
    version
    Es la versión de software de la Cloud TPU.
  3. Conéctate a la TPU con SSH:

    $ gcloud compute tpus tpu-vm ssh tpu-name --zone=us-central2-b

    Cuando te conectes a la TPU, el prompt de la shell cambiará de username@projectname a username@vm-name.

  4. Instala los paquetes obligatorios.

    (vm)$ pip3 install opencv-python-headless pillow
    (vm)$ pip3 install tensorflow-datasets
  5. Crea las siguientes variables de entorno que usa la secuencia de comandos.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    (vm)$ export CONVERTED_DIR=$HOME/tfrecords
    (vm)$ export GENERATED_DATA=$HOME/data
    (vm