Converter um conjunto de dados de classificação de imagens para utilização com a Cloud TPU

Este tutorial descreve como usar o script de exemplo do conversor de dados de classificação de imagens para converter um conjunto de dados de classificação de imagens não processadas no formato TFRecord usado para preparar modelos de TPU do Google Cloud.

Os TFRecords tornam a leitura de ficheiros grandes do Cloud Storage mais eficiente do que a leitura de cada imagem como um ficheiro individual. Pode usar o TFRecord em qualquer lugar onde esteja a usar um pipeline tf.data.Dataset.

Consulte os seguintes documentos do TensorFlow para mais informações sobre a utilização do TFRecord:

Se usar a framework PyTorch ou JAX e não usar o Cloud Storage para o armazenamento do conjunto de dados, pode não obter a mesma vantagem dos TFRecords.

Vista geral das conversões

A pasta de classificação de imagens no repositório do conversor de dados no GitHub contém o script converter, image_classification_data.py e uma implementação de exemplo, simple_example.py, que pode copiar e modificar para fazer a sua própria conversão de dados.

O exemplo do conversor de dados de classificação de imagens define duas classes: ImageClassificationConfig e ImageClassificationBuilder. Estas aulas são definidas em tpu/tools/data_converter/image_classification_data.py.

ImageClassificationConfig é uma classe base abstrata. Subclasse ImageClassificationConfig para definir a configuração necessária para instanciar um ImageClassificationBuilder.

O ImageClassificationBuilder é um criador de conjuntos de dados do TensorFlow para conjuntos de dados de classificação de imagens. É uma subclasse de tdfs.core.GeneratorBasedBuilder. Extrai exemplos de dados do seu conjunto de dados e converte-os em TFRecords. Os TFRecords são escritos num caminho especificado pelo parâmetro data_dir para o método __init__ de ImageClassificationBuilder.

Em simple_example.py, a classe SimpleDatasetConfig é uma subclasse de ImageClassificationConfig, que implementa propriedades que definem os modos suportados, o número de classes de imagens e um gerador de exemplos que produz um dicionário com dados de imagens e uma classe de imagens para cada exemplo no conjunto de dados.

A função main() cria um conjunto de dados de dados de imagens gerados aleatoriamente e instancia um objeto SimpleDatasetConfig que especifica o número de classes e o caminho para o conjunto de dados no disco. Em seguida, main() instancia um objeto ImageClassificationBuilder, transmitindo a instância SimpleDatasetConfig. Por fim, main() liga a download_and_prepare(). Quando este método é chamado, a instância ImageClassificationBuilder usa o gerador de exemplos de dados implementado por SimpleDatasetConfig para carregar cada exemplo e guardá-los numa série de ficheiros TFRecord.

Para uma explicação mais detalhada, consulte o Bloco de notas do conversor de classificação.

Modificar o exemplo de conversão de dados para carregar o conjunto de dados

Para converter o seu conjunto de dados no formato TFRecord, crie uma subclasse da classe ImageClassificationConfig que defina as seguintes propriedades:

  • num_labels: devolve o número de classes de imagens
  • supported_modes: devolve uma lista de modos suportados pelo seu conjunto de dados (por exemplo: test, train e validate)
  • text_label_map: devolve um dicionário que modela o mapeamento entre uma etiqueta de classe de texto e uma etiqueta de classe de número inteiro (SimpleDatasetConfig não usa esta propriedade, porque não requer um mapeamento)
  • download_path: o caminho a partir do qual transferir o conjunto de dados (SimpleDatasetConfig não usa esta propriedade, o example_generator carrega os dados do disco)

Implemente a função do gerador example_generator. Este método tem de gerar um dicionário que contenha os dados da imagem e o nome da classe da imagem para cada exemplo. ImageClassificationBuilder usa a função example_generator() para obter cada exemplo e escreve-os no disco no formato TFRecord.

Executar o exemplo de conversão de dados

  1. Crie um contentor do Cloud Storage com o seguinte comando:

    gcloud storage buckets create gs://bucket-name --project=your-project-id --location=us-central2
  2. Inicie uma Cloud TPU através do 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

    Descrições das flags de comando

    • zone: a zona onde planeia criar o seu Cloud TPU.
    • accelerator-type: o tipo de acelerador especifica a versão e o tamanho da Cloud TPU que quer criar. Para mais informações sobre os tipos de aceleradores suportados para cada versão da TPU, consulte o artigo Versões da TPU.
    • version: a versão do software do Cloud TPU.
  3. Estabeleça ligação à TPU através de SSH:

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

    Quando se liga à TPU, o comando da shell muda de username@projectname para