Fazer o download, o pré-processamento e o upload do conjunto de dados do ImageNet
Neste tópico, descrevemos como fazer o download, o pré-processamento e o upload do conjunto de dados do ImageNet para usar com a arquitetura de VM do Cloud TPU.
O ImageNet é um banco de dados de imagens. As imagens no banco de dados são organizadas em uma hierarquia, com cada nó da hierarquia representado por centenas e milhares de imagens.O tamanho do banco de dados do ImageNet significa que pode levar um tempo considerável para treinar um modelo. 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 associados ao uso do 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, 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 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 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 um modelo de machine learning:
- Verifique se você tem espaço no destino do download.
- Configure os diretórios de destino.
- Cadastre-se no site do ImageNet e solicite permissão de download.
Faça o download do conjunto de dados para o disco local ou a instância de VM.
Execute o pré-processamento e faça upload do script.
Verificar requisitos de espaço
Se você fizer o download do conjunto de dados para sua máquina local ou para uma instância de VM, precisará de aproximadamente 300 GB de espaço disponível no destino de download.
A alocação de disco padrão para uma VM de TPU é de 100 GB. Como o download para sua VM de TPU requer 300 GB, se você for fazer o download para sua instância de VM de TPU, será necessário adicionar um disco permanente e com 200 GB de espaço adicional 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:
- 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 do diretório 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 seu diretório inicial no destino de download (máquina local ou VM da TPU). Nesse diretório, crie dois subdiretórios:train
evalidation
. 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 de confirmar o registro, é possível fazer o download do conjunto de dados. Os tutoriais do Cloud TPU que usam o conjunto de dados ImageNet usam as imagens do ImageNet Large Scale Visual Recognition Challenge 2012 (ILSVRC2012).
Fazer o download do conjunto de dados do ImageNet
No site de download do LSRVC 2012, vá para a seção "Imagens" da página e clique com o botão direito do mouse em "Imagens de treinamento (tarefas 1 e 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 ver o URL do segundo conjunto de treinamentos. 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 ImageNet para a máquina local, será necessário copiar os diretórios na máquina local para o diretório
$IMAGENET_HOME
correspondente na instância de VM. A cópia do conjunto de dados do ImageNet do host local para a instância de VM leva aproximadamente 13 horas.Antes de copiar o conjunto de dados do ImageNet para sua VM, você precisa identificar o nome da instância de VM. Para fazer isso, execute o seguinte comando
gcloud describe
e localize o nome da instância de VM na saída.gcloud compute tpus tpu-vm describe tpu-name --zone=zone
Isso gera uma saída que contém uma linha que inclui o nome da instância de VM. Veja abaixo um exemplo desse nome:
tpuVmSelflink: https://www.googleapis.com/compute/v1/projects/project-name/zones/zone/instances/t1v-n-2b9b54cd-w-0
Use o comando a seguir para copiar os arquivos em ~/imagenet na máquina local para
$IMAGENET_HOME
na VM.gcloud compute scp --recurse $IMAGENET_HOME username@vm-instance-name:~/imagenet
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 e, se você estiver fazendo o download para a VM usando o Cloud Shell, o download levará aproximadamente 40 horas. Se o Cloud Shell perder a conexão com a VM, será possível preceder
nohup
ao comando ou usar screen.cd `$IMAGENET_HOME` \ nohup wget http://image-net.org/challenges/LSVRC/2012/dd31405981ef5f776aa17412e1f0c112/ILSVRC2012_img_train.tar
Este comando faz o download de um arquivo tar grande: ILSVRC2012_img_train.tar.
Em
$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 uma a três horas.tar xf $IMAGENET_HOME/ILSVRC2012_img_train.tar -C $IMAGENET_HOME/traintar xf ILSVRC2012_img_train.tar
Extraia os arquivos tar de treinamento individuais localizados no diretório
$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.
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
Ao fazer o download do arquivo "Imagens de validação (todas as tarefas)", o Cloud Shell pode ser desconectado. Use
nohup
ou screen para evitar que o Cloud Shell se desconecte.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ê fez o download dos arquivos de validação na máquina local, será necessário copiar o diretório
$IMAGENET_HOME/validation
na máquina local para o diretório$IMAGENET_HOME/validation
na instância de VM. Essa operação de cópia leva cerca de 30 minutos.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 na máquina local, copie-o para o 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 (em inglês) mostra o mapeamento de IDs do WordNet para seus rótulos de validação associados no arquivo
synset_labels.txt
. Um synset nesse contexto é um grupo de imagens visualmente semelhantes.
Processar o conjunto de dados ImageNet e, opcionalmente, fazer upload para o Cloud Storage
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
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
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
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
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}
.