Como fazer o download, o pré-processamento e o upload do conjunto de dados do ImageNet

Neste tópico, você verá como fazer o download, o pré-processamento e o upload do conjunto de dados do ImageNet para usar com a Cloud TPU. Os modelos de machine learning que usam o conjunto de dados ImageNet incluem:

  • ResNet
  • AmoebaNet
  • EfficientNet
  • MNASNet
O ImageNet é um banco de dados de imagens. As imagens do banco de dados são organizadas hierarquicamente, com cada nó da hierarquia representado por centenas e milhares de imagens.

O tamanho do banco de dados do ImageNet significa que o treinamento de um modelo pode levar um tempo considerável. Uma alternativa é usar uma versão de demonstração do conjunto de dados, chamada de fake_imagenet. Essa versão de demonstração permite testar o modelo e, ao mesmo tempo, reduzir os requisitos de armazenamento e tempo normalmente associados ao uso do banco de dados completo do ImageNet.

Como pré-processar todo o conjunto de dados do ImageNet

O conjunto de dados ImageNet consiste em três partes, dados de treinamento, dados de validação e rótulos de imagem.

Os dados de treinamento contêm 1.000 categorias e 1,2 milhão de imagens, empacotadas para facilitar o download. Os dados de validação e teste não estão contidos nos dados de treinamento do ImageNet (cópias foram removidas).

Os dados de validação e teste consistem em 150.000 fotografias, coletadas do flickr e de outros mecanismos de pesquisa, rotulados com a presença ou ausência de 1.000 categorias de objetos. As 1.000 categorias de objetos contêm nós internos e nós de folha do ImageNet, mas não se sobrepõem. Um subconjunto aleatório de 50.000 das imagens com rótulos foi lançado como dados de validação junto com uma lista das 1.000 categorias. As imagens restantes são usadas para avaliação e foram liberadas sem rótulos.

Etapas para pré-processar todo o conjunto de dados do ImageNet

Há cinco etapas para preparar o conjunto de dados completo do ImageNet para uso por um modelo de machine learning:

  1. Verifique se você tem espaço no destino do download.
  2. Configure os diretórios de destino.
  3. Cadastre-se no site do ImageNet e solicite permissão de download.
  4. Faça o download do conjunto de dados para o disco local ou para a VM do Compute Engine.

  5. Execute o pré-processamento e faça upload do script.

Verificar requisitos de espaço

Independentemente de fazer o download do conjunto de dados para sua máquina local ou para uma VM do Compute Engine, você precisa de cerca de 300 GB de espaço disponível no destino de download. Em uma VM, é possível verificar o armazenamento disponível com o comando df -ha.

É possível aumentar o tamanho do disco da VM usando um dos seguintes métodos:

  • Especifique a sinalização --disk-size-gb na linha de comando ctpu up com o tamanho, em GB, que você quer alocar.
  • Siga o guia do Compute Engine para adicionar um disco à VM.
    • Defina Ao excluir uma instância como Excluir disco para garantir que o disco seja removido quando você excluir a VM.
    • Anote o caminho do novo disco. Por exemplo, /mnt/disks/mnt-dir.

Configurar os diretórios de destino

Na máquina local ou na VM do Compute Engine, configure a estrutura de diretórios para armazenar os dados transferidos por download.

  • Crie e exporte um diretório inicial para o conjunto de dados do ImageNet.

    Crie um diretório, por exemplo, imagenet no diretório principal da máquina ou VM local. Nesse diretório, crie dois subdiretórios: train e validation. Exporte o diretório inicial como IMAGENET_HOME:

    export IMAGENET_HOME=~/imagenet
    

Cadastrar e solicitar permissão para fazer o download do conjunto de dados

  • Cadastre-se no site do Imagenet. Só será possível fazer o download do conjunto de dados depois que o ImageNet confirmar o registro e enviar um e-mail de confirmação. Se você não receber o e-mail de confirmação em alguns dias, entre em contato com o suporte do ImageNet para saber por que seu registro não foi confirmado. Depois que seu registro for confirmado, acesse o site de download (em inglês).

Fazer o download do conjunto de dados do ImageNet

  1. No site de download, acesse a seção "Imagens" da página e clique com o botão direito do mouse em "Imagens de treinamento (Tarefa 1 e 2)". Isso fornecerá o URL necessário para fazer o download da maior parte do conjunto de treinamento. Salve o URL.

    Clique com o botão direito em "Imagens de treinamento (tarefa 3)" para ver o URL do segundo conjunto de treinamento. Salve o URL.

    Clique com o botão direito do mouse em "Imagens de validação (todas as tarefas)" para ver o URL do conjunto de dados de validação. Salve o URL.

    Se você fizer o download dos arquivos do ImageNet para a máquina local, após a conclusão do download, copie os diretórios na máquina local para o diretório $IMAGENET_HOME correspondente na VM do Compute Engine. A cópia do conjunto de dados do ImageNet do host local para sua VM leva aproximadamente 13 horas.

    Por exemplo, o comando a seguir copia todos os arquivos em $IMAGENET_HOME na máquina local para a VM que exibe o prompt do shell username@vm-name:

    gcloud compute scp --recurse $IMAGENET_HOME username@vm-name:~/imagenet
    
  2. Em $IMAGENET_HOME, use wget para fazer o download dos arquivos de treinamento e validação usando os URLs salvos.

    O arquivo de "imagens de treinamento (tarefa 1 e 2)" é o grande conjunto de treinamento. Ele tem 138 GB. Se você estiver fazendo o download em uma VM do Compute Engine usando o Cloud Shell, o tempo estimado para fazer o download será de aproximadamente 40 horas. Nesse arquivo particularmente grande, é possível preceder nohup ao comando ou usar screen para evitar que a saída de download seja desconectada se o Cloud Shell for desconectado.

    cd $IMAGENET_HOME \
    nohup wget http://image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train.tar
    

    Isso faz o download de um arquivo tar grande: ILSVRC2012_img_train.tar.

    Na $IMAGENET_HOME na VM, extraia os diretórios de treinamento individuais no diretório $IMAGENET_HOME/train usando o comando a seguir. A extração leva de 1 a 3 horas.

    tar xf ILSVRC2012_img_train.tar
    

    O arquivo "Imagens de treinamento (Tarefa 3)" tem 728 MB e leva apenas alguns minutos para fazer o download. Assim, você não precisa tomar cuidado com a perda da conexão do Cloud Shell.

    Quando você faz o download desse arquivo, ele extrai os diretórios de treinamento individuais para o diretório $IMAGENET_HOME/train atual.

    wget http://www.image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train_t3.tar
    

    O arquivo "Imagens de validação (todas as tarefas)" é de 6 GB. Portanto, convém usar nohup ou screen para evitar que a saída de download seja desconectada se o Cloud Shell for desconectado.

    wget http://www.image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_val.tar
    

    Esse download leva cerca de 30 minutos. Quando você faz o download desse arquivo, ele extrai os diretórios de validação individuais para o diretório $IMAGENET_HOME/validation.

    Se você tiver feito o download dos arquivos de validação para a máquina local, copie o diretório $IMAGENET_HOME/validation na máquina local para o diretório $IMAGENET_HOME/validation na VM do Compute Engine. Essa operação de cópia leva cerca de 30 minutos.

    Faça o download do arquivo de rótulos. Isso leva apenas alguns segundos.

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

    Se você fez o download do arquivo de rótulos na máquina local, precisa copiá-lo para o diretório $IMAGENET_HOME na máquina local para $IMAGENET_HOME na VM do Compute Engine. Essa operação de cópia leva alguns segundos.

    Os nomes dos subdiretórios de treinamento (por exemplo, n03062245) são "IDs do WordNet" (wnid). A API ImageNet (em inglês) mostra o mapeamento de IDs do WordNet para seus rótulos de validação associados no arquivo synset_labels.txt. Uma sincronia nesse contexto é um grupo visualmente semelhante de imagens.

Processar o conjunto de dados ImageNet e, opcionalmente, fazer upload para o Cloud Storage

  1. No GitHub, faça o download do script imagenet_to_gcs.py:

    wget https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/imagenet_to_gcs.py
    
  2. Se você estiver fazendo upload do conjunto de dados para o Cloud Storage, especifique o local do intervalo de armazenamento para fazer upload do conjunto de dados do ImageNet:

    export STORAGE_BUCKET=gs://bucket-name
    
  3. Se você estiver fazendo o upload do conjunto de dados para o Cloud Storage, especifique um diretório de dados do bucket de armazenamento para armazenar o conjunto de dados:

    (vm)$ export DATA_DIR=$STORAGE_BUCKET/dataset-directory
    
  4. Execute o script para pré-processar o conjunto de dados brutos como TFRecords e faça o upload dele no Cloud Storage usando o seguinte comando:

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

O script gera um conjunto de diretórios (para treinamento e validação) do formulário:

${DATA_DIR}/train-00000-of-01024
${DATA_DIR}/train-00001-of-01024
 ...
${DATA_DIR}/train-01023-of-01024

e

${DATA_DIR}/validation-00000-of-00128
S{DATA_DIR}/validation-00001-of-00128
 ...
${DATA_DIR}/validation-00127-of-00128

Depois que os dados forem enviados para seu bucket do Cloud, execute seu modelo e defina --data_dir=${DATA_DIR}.