Transfira, pré-processe e carregue o conjunto de dados ImageNet
Este documento descreve como transferir, pré-processar e carregar o conjunto de dados ImageNet para utilização com a arquitetura de VM da TPU do Google Cloud.
O ImageNet é uma base de dados de imagens. As imagens na base de dados estão organizadas numa hierarquia, com cada nó da hierarquia representado por centenas e milhares de imagens.O tamanho da base de dados ImageNet significa que pode demorar um período considerável a preparar um modelo. Em alternativa, pode usar uma versão de demonstração do conjunto de dados, denominada fake_imagenet. Esta versão de demonstração permite-lhe testar o modelo, ao mesmo tempo que reduz os requisitos de armazenamento e tempo associados à utilização da base de dados ImageNet completa.
Pré-processar o conjunto de dados ImageNet completo
O conjunto de dados ImageNet consiste em três partes: dados de preparação, dados de validação e etiquetas de imagens.
Os dados de preparação contêm 1000 categorias e 1,2 milhões de imagens, incluídas num pacote para transferência. Os dados de validação e teste não estão contidos nos dados de preparação do ImageNet (foram removidos os duplicados).
Os dados de validação e teste consistem em 150 000 fotografias, recolhidas do Flickr e de outros motores de pesquisa, etiquetadas manualmente com a presença ou a ausência de 1000 categorias de objetos. As 1000 categorias de objetos contêm nós internos e nós finais do ImageNet, mas não se sobrepõem. Foi lançado um subconjunto aleatório de 50 000 das imagens com etiquetas como dados de validação,juntamente com uma lista das 1000 categorias. As imagens restantes são usadas para avaliação e foram lançadas sem etiquetas.
Passos para pré-processar o conjunto de dados ImageNet completo
Existem cinco passos para preparar o conjunto de dados completo do ImageNet para utilização por um modelo de aprendizagem automática:
- Verifique se tem espaço no destino de transferência.
- Configure os diretórios de destino.
- Registe-se no site do ImageNet e peça autorização para transferir conteúdo.
Transfira o conjunto de dados para o disco local ou a instância de VM.
Valide os requisitos de espaço
Quer transfira o conjunto de dados para o seu computador local ou para uma instância de VM, precisa de cerca de 300 GiB de espaço disponível no destino de transferência.
A atribuição de disco predefinida para uma VM da TPU é de 100 GiB. Uma vez que a transferência para a VM da TPU requer 300 GiB, se for transferir para a instância da VM da TPU, tem de adicionar um volume de armazenamento de blocos durável com 200 GiB de espaço adicional para concluir a transferência. Numa VM da TPU, pode verificar o armazenamento disponível com o comando df -ha
. Para mais informações
acerca da alteração do tamanho dos discos anexados, consulte os artigos Modifique as definições de um volume
do Google Cloud Hyperdisk e Aumente o tamanho de um volume
do Persistent Disk.
Quando adicionar armazenamento de blocos duradouro, certifique-se de que anota o diretório onde montou o disco. Por exemplo: /mnt/disks/mnt-dir
.
Configure os diretórios de destino
Na sua máquina local ou instância de VM, configure a estrutura de diretórios para armazenar os dados transferidos.
Altere para um diretório onde quer transferir os dados. Se estiver a usar um disco persistente, substitua DATASET_ROOT_DIR pelo diretório onde o disco está montado, por exemplo,
/mnt/disks/mnt-dir
:cd DATASET_ROOT_DIR
Crie um diretório, por exemplo,
imagenet
, no destino de transferência (máquina local ou VM da TPU).mkdir imagenet
Neste diretório, crie dois subdiretórios:
train
evalidation
.mkdir imagenet/train mkdir imagenet/validation
Exporte o diretório
imagenet
comoIMAGENET_HOME
.export IMAGENET_HOME=DATASET_ROOT_DIR/imagenet sudo chown ${USER} ${IMAGENET_HOME}
Registe-se e peça autorização para transferir o conjunto de dados
Registe-se no Website do Imagenet. Não pode transferir o conjunto de dados até que o ImageNet confirme o seu registo e lhe envie um email de confirmação. Se não receber o email de confirmação no prazo de alguns dias, contacte o apoio técnico do ImageNet para saber por que motivo o seu registo não foi confirmado. Assim que o registo for confirmado, pode transferir o 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).
Transfira o conjunto de dados ImageNet
No site de transferência do LSRVC 2012, aceda à secção de imagens na página e clique com o botão direito do rato em "Training images (Task 1 & 2)" (Imagens de preparação [tarefas 1 e 2]). O URL para transferir a maior parte do conjunto de dados de treino. Guarde o URL.
Clique com o botão direito do rato em "Imagens de preparação (tarefa 3)" para obter o URL do segundo conjunto de preparação. Guarde o URL.
Clique com o botão direito do rato em "Validation images (all tasks)" para obter o URL do conjunto de dados de validação. Guarde o URL.
Se transferir os ficheiros ImageNet para a sua máquina local, tem de copiar os diretórios na sua máquina local para o diretório
$IMAGENET_HOME
correspondente na instância de VM. A cópia do conjunto de dados ImageNet do anfitrião local para a instância de VM demora aproximadamente 13 horas.Antes de copiar o conjunto de dados ImageNet para a sua VM de TPU, tem de identificar o nome da instância da VM de TPU. Para isso, estabeleça ligação à VM da TPU através do SSH. O nome da instância de VM é apresentado na linha de comandos após o símbolo
@
.Use o seguinte comando para copiar os ficheiros em ~/imagenet na sua máquina local para
$IMAGENET_HOME
na sua VM.gcloud compute scp --recurse $IMAGENET_HOME username@vm-instance-name:~/imagenet
Em
$IMAGENET_HOME
, transfira os ficheiros "Training images (Task 1 & 2)" através do URL guardado.O ficheiro "Training images (Task 1 & 2)" é o conjunto de dados de treino grande. Tem 138 GiB e, se estiver a transferir para a sua VM de TPU através do Cloud Shell, a transferência demora aproximadamente 40 horas. Se o Cloud Shell perder a ligação à VM, pode adicionar
nohup
ao comando ou usar o screen.cd $IMAGENET_HOME nohup wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train.tar
Substitua o URL pelo URL que guardou anteriormente para "Imagens de preparação (tarefa 1 e 2)", uma vez que o URL pode ter sido alterado.
Extraia os diretórios de preparação individuais para o diretório
$IMAGENET_HOME/train
com o seguinte comando. A extração demora entre 1 e 3 horas.tar xf $IMAGENET_HOME/ILSVRC2012_img_train.tar -C $IMAGENET_HOME/train
Extraia os ficheiros TAR de preparação individuais localizados no diretório
$IMAGENET_HOME/train
, conforme mostrado no seguinte script:cd $IMAGENET_HOME/train
for f in *.tar; do d=
basename $f .tar
mkdir $d tar xf $f -C $d doneElimine os ficheiros TAR depois de os extrair para libertar espaço no disco.
A partir de
$IMAGENET_HOME
, transfira os ficheiros "Training images (Task 3)" através do URL guardado.O ficheiro "Training images (Task 3)" tem 728 MB e demora apenas alguns minutos a transferir, pelo que não precisa de tomar precauções contra a perda da ligação do Cloud Shell.
wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_train_t3.tar
Substitua o URL pelo URL que guardou anteriormente para "Imagens de preparação (Tarefa 3)", uma vez que o URL pode ter sido alterado.
Extraia os diretórios de preparação individuais para o diretório
$IMAGENET_HOME/train
com o seguinte comando.tar xf $IMAGENET_HOME/ILSVRC2012_img_train_t3.tar -C $IMAGENET_HOME/train
Extraia os ficheiros TAR de preparação individuais localizados no diretório
$IMAGENET_HOME/train
, conforme mostrado no seguinte script:cd ${IMAGENET_HOME}/train for f in *.tar; do d=`basename $f .tar` mkdir $d tar xf $f -C $d done
Elimine os ficheiros TAR depois de os extrair para libertar espaço no disco.
Em
$IMAGENET_HOME
, transfira os ficheiros "Imagens de validação (todas as tarefas)" através do URL guardado.Quando transfere o ficheiro "Validation images (all tasks)" (Imagens de validação [todas as tarefas]), o Cloud Shell pode ser desligado. Pode usar o
nohup
ou o ecrã para evitar que o Cloud Shell se desligue.wget https://image-net.org/data/ILSVRC/2012/ILSVRC2012_img_val.tar
Substitua o URL pelo URL que guardou anteriormente para "Imagens de validação (todas as tarefas)", uma vez que o URL pode ter sido alterado.
Esta transferência demora cerca de 30 minutos.
Extraia os ficheiros de validação individuais para o diretório
$IMAGENET_HOME/validation
através do seguinte comando.tar xf $IMAGENET_HOME/ILSVRC2012_img_val.tar -C $IMAGENET_HOME/validation
Se transferiu os ficheiros de validação para a sua máquina local, tem de copiar o diretório
$IMAGENET_HOME/validation
na sua máquina local para o diretório$IMAGENET_HOME/validation
na sua instância de VM. Esta operação de cópia demora cerca de 30 minutos.Transfira o ficheiro de etiquetas.
wget -O $IMAGENET_HOME/synset_labels.txt \ https://raw.githubusercontent.com/tensorflow/models/master/research/slim/datasets/imagenet_2012_validation_synset_labels.txt
Se transferiu o ficheiro de etiquetas para a sua máquina local, tem de o copiar para o diretório
$IMAGENET_HOME
na sua máquina local para$IMAGENET_HOME
na instância de VM. Esta operação de cópia demora alguns segundos.Os nomes das subdiretorias de preparação (por exemplo, n03062245) são "IDs do WordNet" (wnid). A API ImageNet mostra o mapeamento dos IDs do WordNet para as respetivas etiquetas de validação associadas no ficheiro
synset_labels.txt
. Neste contexto, um conjunto de sinónimos é um grupo de imagens visualmente semelhantes.
Processar o conjunto de dados ImageNet e, opcionalmente, carregá-lo para o Cloud Storage
Transfira o script
imagenet_to_gcs.py
do GitHub:wget https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/imagenet_to_gcs.py
Se estiver a carregar o conjunto de dados para o Cloud Storage:
Use um contentor existente ou crie um novo seguindo as instruções em Criar contentores.
Especifique a localização do contentor de armazenamento para carregar o conjunto de dados ImageNet:
export STORAGE_BUCKET=gs://bucket-name
Se estiver a carregar o conjunto de dados para a sua máquina local ou VM, especifique um diretório de dados para armazenar o conjunto de dados:
(vm)$ export DATA_DIR=$IMAGENET_HOME/dataset-directory
Instale as seguintes bibliotecas no seu computador ou num ambiente virtual:
pip3 install google-cloud-storage pip3 install tensorflow
Execute o script para pré-processar o conjunto de dados não processado como TFRecords e carregá-lo para o Cloud Storage através do 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 preparação 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 de os dados serem carregados para o contentor da nuvem, execute o modelo e defina
--data_dir=${DATA_DIR}
.