Fazer o download, pré-processar e fazer upload do conjunto de dados do ImageNet

Este documento descreve como baixar, pré-processar e fazer upload do ImageNet para usar com a arquitetura de VM do Cloud TPU.

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 para testar o modelo, reduzindo os requisitos de armazenamento e tempo usando o banco de dados completo do ImageNet.

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

O conjunto de dados do 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, 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 Flickr e de outros mecanismos de pesquisa, rotulados com a presença ou ausência de 1.000 categorias de objetos. As mil categorias de objetos contêm nós internos e nós de folha do ImageNet, mas não se sobrepõem uns aos outros. 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 identificadores.

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 uma máquina 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 o download .
  4. Faça o download do conjunto de dados para o disco local ou instância de VM.

  5. Execute o script de pré-processamento e upload.

Verificar requisitos de espaço

Para fazer o download do conjunto de dados na máquina local ou em uma instância de VM, precisará de cerca de 300 GB de espaço disponível no destino do download.

A alocação de disco padrão para uma VM da TPU é de 100 GB. Como o download do A VM da TPU requer 300 GB. Se você fizer o download para a instância da VM da TPU, precisará adicionar um disco permanente e com 200 GB de espaço extra para concluir o download. Em uma VM da TPU, é possível verificar o armazenamento disponível com o comando df -ha.

Ao adicionar um disco permanente, certifique-se de:

  • Defina Ao excluir uma instância como Excluir disco para garantir que o disco seja excluído 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 instância de VM, configure a estrutura de diretórios para armazenar os dados transferidos por download.

  1. Crie um diretório, por exemplo, imagenet, no diretório principal em ao destino do download (máquina local ou VM da TPU).

    mkdir imagenet
    
  2. Nesse diretório, crie dois subdiretórios: train e validation.

    mkdir imagenet/train
    mkdir imagenet/validation
    
  3. Exporte o diretório imagenet 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. Não é possível fazer o download conjunto de dados até que o ImageNet confirme seu registro e envie 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 sua inscrição for confirmada, você pode fazer o download do conjunto de dados. Os tutoriais do Cloud TPU que usam o ImageNet use as imagens do serviço de reconhecimento visual em grande escala do ImageNet Desafio de 2012 (ILSVRC2012).

Fazer o download do conjunto de dados do ImageNet

  1. Do LSRVC 2012 download site, acesse a seção de imagens na página e clique com o botão direito do mouse em "Imagens de treinamento 2)". O URL para fazer o download da maior parte do conjunto de treinamento. Salve o URL.

    Clique com o botão direito do mouse em "Imagens de treinamento (tarefa 3)" para conferir 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 conseguir o URL conjunto de dados de validação. Salve o URL.

    Se você fizer o download dos arquivos do ImageNet para sua máquina local, será preciso copiar dos diretórios na máquina local para o $IMAGENET_HOME na instância de VM. Como copiar o conjunto de dados ImageNet do host local à instância de VM leva aproximadamente 13 horas.

    Antes de copiar o conjunto de dados do ImageNet para sua VM da TPU, é preciso identificar nome da instância de VM da TPU. Para fazer isso, conecte-se à VM da TPU usando SSH. O nome da instância de VM é mostrado no prompt de comando após o comando @ símbolo.

    Use o seguinte comando para copiar os arquivos em ~/imagenet na sua máquina virtual para $IMAGENET_HOME na VM.

    gcloud compute scp --recurse $IMAGENET_HOME username@vm-instance-name:~/imagenet
  2. Em $IMAGENET_HOME, faça o download de "Imagens de treinamento (tarefa 1 e 2)" arquivos usando o URL salvo.

    O arquivo de "imagens de treinamento (tarefa 1 e 2)" é o grande conjunto de treinamento. É 138 GB, e se você estiver fazendo o download para sua VM da TPU usando o Cloud Shell, o download levará aproximadamente 40 horas. Se o Cloud Shell perder a à VM, anexe nohup ao comando ou use tela.

    cd $IMAGENET_HOME \
    nohup wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar

    Substitua o URL pelo URL que você salvou em "Imagens de treinamento (tarefa" 1 e 2)", porque o URL pode ter mudado.

  3. Extraia os diretórios de treinamento individuais no $IMAGENET_HOME/train usando o comando a seguir. A extração leva de 1 a 3. do horário de funcionamento local.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_train.tar -C $IMAGENET_HOME/train

    Extraia os arquivos .tar de treinamento individuais localizados na $IMAGENET_HOME/train, conforme mostrado no script a seguir:

    cd `$IMAGENET_HOME/train`
    
    for f in *.tar; do
     d=`basename $f .tar`
     mkdir $d
     tar xf $f -C $d
    done

    Exclua os arquivos .tar depois de extraí-los para liberar espaço em disco.

  4. Em $IMAGENET_HOME, faça o download de "Imagens de treinamento (Tarefa 3)". arquivos usando o URL salvo.

    A opção "Imagens de treinamento (Tarefa 3)" tem 728 MB e leva apenas alguns minutos para download, para que você não precise tomar precauções para não perder o uma conexão com o Cloud Shell.

    wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train_t3.tar

    Substitua o URL pelo URL que você salvou em "Imagens de treinamento (tarefa" 3)", porque o URL pode ter mudado.

  5. Extraia os diretórios de treinamento individuais no $IMAGENET_HOME/train usando o comando a seguir.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_train_t3.tar -C $IMAGENET_HOME/train

    Extraia os arquivos .tar de treinamento individuais localizados na $IMAGENET_HOME/train, conforme mostrado no script a seguir:

    cd `$IMAGENET_HOME/train`
    
    for f in *.tar; do
     d=`basename $f .tar`
     mkdir $d
     tar xf $f -C $d
    done

    Exclua os arquivos .tar depois de extraí-los para liberar espaço em disco.

  6. Em $IMAGENET_HOME, faça o download dos arquivos "Imagens de validação (todas as tarefas)" usando o URL salvo.

    Ao fazer o download de "Imagens de validação (todas as tarefas)" , seu arquivo O Cloud Shell pode se desconectar. Você pode usar nohup ou screen para evitar a desconexão do Cloud Shell.

    wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar

    Substitua o URL pelo URL que você salvou anteriormente em "Imagens de validação" (todas as tarefas), porque o URL pode ter mudado.

    Esse download leva cerca de 30 minutos.

  7. Extraia os arquivos de validação individuais no $IMAGENET_HOME/validation. usando o comando a seguir.

    tar xf $IMAGENET_HOME/ILSVRC2012_img_val.tar -C $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 instância da VM. Essa operação de cópia leva cerca de 30 minutos.

  8. Faça o download do arquivo de rótulos.

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

    Se você fez o download do arquivo de rótulos para a máquina local, é necessário copiá-lo ao diretório $IMAGENET_HOME na máquina local para $IMAGENET_HOME na instância de VM. Essa operação de cópia leva alguns segundos.

    Os nomes dos subdiretórios de treinamento (por exemplo, n03062245) são códigos do WordNet (wnid). a API ImageNet mostra o mapeamento de IDs do WordNet para os rótulos de validação associados no o arquivo synset_labels.txt. Uma sintaxe neste contexto é uma um grande grupo 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 upload do conjunto de dados para a VM ou máquina local, especifique um diretório para armazenar o conjunto de dados:

    (vm)$ export DATA_DIR=$IMAGENET_HOME/dataset-directory
  4. Instale as bibliotecas a seguir na sua máquina ou em um ambiente virtual:

    pip3 install google-cloud-storage
    pip3 install tensorflow
    
  5. 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=$STORAGE_BUCKET  \
      --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
${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}.