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

O COCO é um conjunto de dados de detecção, segmentação e legendagem de objetos em grande escala. Os modelos de aprendizado de máquina que usam o conjunto de dados COCO incluem:

  • Máscara RCNN
  • RetinaNet
  • ShapeMask

Antes de treinar um modelo em um Cloud TPU, você precisa preparar os dados de treinamento.

Neste tópico, descrevemos como preparar o conjunto de dados COCO para modelos executados no Cloud TPU. O conjunto de dados COCO só pode ser preparado depois que você cria uma VM do Compute Engine. O script usado para preparar os dados, download_and_preprocess_coco.sh, é instalado na VM e precisa ser executado nela.

Depois de preparar os dados executando o script download_and_preprocess_coco.sh, você poderá abrir o Cloud TPU e executar o treinamento.

O download/pré-processamento completo e o upload do conjunto de dados COCO para um bucket de armazenamento do Google Cloud levam aproximadamente duas horas.

  1. No Cloud Shell, configure gcloud com o ID do projeto.

    export PROJECT_ID=project-id
    gcloud config set project ${PROJECT_ID}
    
  2. No Cloud Shell, crie um bucket do Cloud Storage usando o seguinte comando:

    gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 gs://bucket-name
    
  3. Inicie uma instância de VM do Compute Engine.

    Essa instância de VM só será usada para fazer o download e o pré-processamento do conjunto de dados COCO. Preencha instance-name com o nome de sua escolha.

    $ gcloud compute tpus execution-groups create \
     --vm-only \
     --name=instance-name \
     --zone=europe-west4-a \
     --disk-size=300 \
     --machine-type=n1-standard-16 \
     --tf-version=2.12.0
    

    Descrições de sinalizações de comando

    vm-only
    Crie somente uma VM. Por padrão, o comando gcloud compute tpus execution-groups cria uma VM e uma Cloud TPU.
    name
    O nome do Cloud TPU a ser criado.
    zone
    A zona em que você planeja criar o Cloud TPU.
    disk-size
    O tamanho do disco rígido em GB da VM criada pelo comando gcloud compute tpus execution-groups.
    machine-type
    O tipo de máquina da VM do Compute Engine a ser criada.
    tf-version
    A versão do Tensorflow gcloud compute tpus execution-groups é instalada na VM.
  4. Se você não for conectado automaticamente à instância do Compute Engine, faça login executando o seguinte comando ssh. Quando você faz login na VM, o prompt do shell muda de username@projectname para username@vm-name:

      $ gcloud compute ssh instance-name --zone=europe-west4-a
      

  5. Configure duas variáveis, uma para o bucket de armazenamento criado anteriormente e outra para o diretório que contém os dados de treinamento (DATA_DIR) no bucket de armazenamento.

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/coco
  6. Instale os pacotes necessários para pré-processar os dados.

    (vm)$ sudo apt-get install -y python3-tk && \
      pip3 install --user Cython matplotlib opencv-python-headless pyyaml Pillow && \
      pip3 install --user "git+https://github.com/cocodataset/cocoapi#egg=pycocotools&subdirectory=PythonAPI"
    
  7. Execute o script download_and_preprocess_coco.sh para converter o conjunto de dados COCO em um conjunto de TFRecords (*.tfrecord) esperado pelo aplicativo de treinamento.

    (vm)$ git clone https://github.com/tensorflow/tpu.git
    (vm)$ sudo bash tpu/tools/datasets/download_and_preprocess_coco.sh ./data/dir/coco
    

    Isso instala as bibliotecas necessárias e executa o script de pré-processamento. A saída são alguns arquivos *.tfrecord no diretório de dados. O script de download e conversão do COCO leva aproximadamente 1 hora para ser concluído.

  8. Copiar os dados para o bucket do Cloud Storage

    Depois de converter os dados para TFRecords, use o comando gsutil para copiá-los do armazenamento local para o bucket do Cloud Storage. Também é preciso copiar os arquivos de anotação. Eles ajudam a validar o desempenho do modelo.

    (vm)$ gsutil -m cp ./data/dir/coco/*.tfrecord ${DATA_DIR}
    (vm)$ gsutil cp ./data/dir/coco/raw-data/annotations/*.json ${DATA_DIR}
    
  9. Limpar os recursos da VM

    Depois que o conjunto de dados COCO for convertido em TFRecords e copiado para o DATA_DIR no bucket do Cloud Storage, será possível excluir a instância do Compute Engine.

    Desconecte-se da instância do Compute Engine:

    (vm)$ exit
    

    Agora, o prompt precisa ser username@projectname, mostrando que você está no Cloud Shell.

  10. Exclua a instância do Compute Engine.

      $ gcloud compute instances delete instance-name
        --zone=europe-west4-a