Primeiros passos com o algoritmo integrado de detecção de objetos de imagem

Use algoritmos integrados no AI Platform Training para enviar os dados de treinamento, selecionar um algoritmo e deixar que a plataforma gerencie o pré-processamento e o treinamento sem escrever códigos de aplicativo de treinamento. Os algoritmos integrados de imagem permitem que você treine em TPUs com configuração mínima. O SavedModel do TensorFlow resultante é compatível para exibição em CPUs e GPUs.

Informações gerais

Neste tutorial, você treinará um modelo de detecção de objeto de imagem sem escrever código. Você enviará o conjunto de dados COCO ao AI Platform Training para treinamento, depois implantará o modelo no AI Platform Training para receber previsões. O modelo resultante classificará objetos comuns em imagens de cenas cotidianas complexas.

Antes de começar

Para concluir este tutorial na linha de comando, use o Cloud Shell ou qualquer ambiente em que o SDK do Cloud esteja instalado.

Conclua as etapas a seguir para configurar uma conta do GCP, ativar as APIs necessárias e instalar e ativar a Google Cloud CLI:

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs AI Platform Training & Prediction and Compute Engine.

    Ative as APIs

  5. Instale a CLI do Google Cloud.
  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  8. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  9. Ative as APIs AI Platform Training & Prediction and Compute Engine.

    Ative as APIs

  10. Instale a CLI do Google Cloud.
  11. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init

Autorize o acesso da Cloud TPU ao projeto

Siga estas etapas para autorizar o nome da conta de serviço do Cloud TPU associada ao seu projeto do Google Cloud:

  1. Chame projects.getConfig para receber o nome da conta de serviço do Cloud TPU. Exemplo:

    PROJECT_ID=PROJECT_ID
    
    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
        https://ml.googleapis.com/v1/projects/$PROJECT_ID:getConfig
    
  2. Salve os valores dos campos serviceAccountProject e tpuServiceAccount retornados pela API.

  3. Inicialize a conta de serviço do Cloud TPU:

    curl -H "Authorization: Bearer $(gcloud auth print-access-token)"  \
      -H "Content-Type: application/json" -d '{}'  \
      https://serviceusage.googleapis.com/v1beta1/projects/<serviceAccountProject>/services/tpu.googleapis.com:generateServiceIdentity
    

Agora adicione a conta de serviço da Cloud TPU como membro do seu projeto, com o papel Agente de serviço do Cloud ML. Conclua as etapas a seguir no Console do Google Cloud ou usando o comando gcloud:

Console

  1. Faça login no Console do Google Cloud e escolha o projeto em que você usa a TPU.
  2. Escolha IAM e Admin > IAM.
  3. Clique no botão Adicionar para adicionar um membro ao projeto.
  4. Digite a conta de serviço de TPU na caixa de texto Membros.
  5. Clique na lista suspensa Papéis.
  6. Ative o papel Agente de serviço do Cloud ML (Agentes de serviço > Agente de serviço do Cloud ML).

gcloud

  1. Defina as variáveis de ambiente que contêm o ID do projeto e a conta de serviço da Cloud TPU:

    PROJECT_ID=PROJECT_ID
    SVC_ACCOUNT=your-tpu-sa-123@your-tpu-sa.google.com.iam.gserviceaccount.com
    
  2. Atribua o papel ml.serviceAgent à conta de serviço do Cloud TPU.

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member serviceAccount:$SVC_ACCOUNT --role roles/ml.serviceAgent
    

Para mais detalhes sobre a concessão de papéis a contas de serviço, consulte a documentação do IAM.

Configuração

O conjunto de dados COCO foi modificado para ser usado neste tutorial e está hospedado em um bucket público o Cloud Storage, gs://cloud-samples-data/ai-platform/built-in/image/coco/.

Console

Selecionar o algoritmo

  1. Acesse a página "Jobs" do AI Platform Training no console do Google Cloud:

    Página "Jobs" do AI Platform Training

  2. Clique no botão Novo job de treinamento. Nas opções exibidas abaixo, clique em Treinamento de algoritmo integrado. A página Criar um novo job de treinamento é exibida.

  3. A criação do job de treinamento é dividida em quatro passos. A primeira é o algoritmo de treinamento. Selecione Detecção de objetos de imagem e clique em Avançar.

Dados de treinamento

  1. Na seção Dados de treinamento, selecione os dados de treinamento do conjunto de dados de amostra que está hospedado no nosso intervalo público do Cloud Storage:

    1. Selecione Usar vários arquivos armazenados em um diretório do Cloud Storage.

    2. Em Caminho do diretório, preencha "cloud-samples-data/ai-platform/built-in/image/coco/".

    3. Em Nome do caractere curinga, preencha "train*" para selecionar todos os arquivos de treinamento no diretório.

    4. O Caminho completo do GCS é exibido: "gs://cloud-samples-data/ai-platform/built-in/image/coco/train*".

  2. Na seção Dados de validação, selecione os dados de validação do conjunto de dados de exemplo que está hospedado no nosso bucket público do Cloud Storage:

    1. Selecione Usar vários arquivos armazenados em um diretório do Cloud Storage.

    2. Em Caminho do diretório, preencha "cloud-samples-data/ai-platform/built-in/image/coco/".

    3. Em Nome do caractere curinga, preencha “val*” para selecionar todos os arquivos de validação no diretório.

    4. O Caminho completo do GCS é exibido: "gs://cloud-samples-data/ai-platform/built-in/image/coco/val*".

  3. Especifique o Diretório de saída do seu bucket do Cloud Storage em que o AI Platform Training armazenará o modelo treinado, os checkpoints e outros resultados do job de treinamento. Insira o caminho exato no seu intervalo ou use o botão Procurar para selecioná-lo.

gcloud

Configure as variáveis de ambiente para o ID do projeto, seu intervalo do Cloud Storage, o caminho do Cloud Storage para os dados de treinamento e o algoritmo que você escolheu.

Os algoritmos integrados do AI Platform Training estão em contêineres do Docker hospedados no Container Registry.

PROJECT_ID="YOUR_PROJECT_ID"
BUCKET_NAME="YOUR_BUCKET_NAME"
REGION="us-central1"

gcloud config set project $PROJECT_ID
gcloud config set compute/region $REGION

# Set paths to the training and validation data.
TRAINING_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/coco/train*"
VALIDATION_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/coco/val*"

# Specify the Docker container for your built-in algorithm selection.
IMAGE_URI="gcr.io/cloud-ml-algos/image_object_detection:latest"

Enviar um job de treinamento

Para enviar um job, você precisa especificar alguns argumentos básicos de treinamento e outros relacionados ao algoritmo de detecção de objetos de imagem.

Argumentos gerais do job de treinamento:

Argumentos do job de treinamento
Argumento Descrição
job-id Código exclusivo do job de treinamento. Use-o para encontrar registros de status do job de treinamento depois de enviá-lo.
job-dir Caminho do Cloud Storage em que o AI Platform Training salva arquivos de treinamento após a conclusão de um job de treinamento bem-sucedido.
scale-tier Especifica os tipos de máquina para treinamento. Use BASIC para selecionar uma configuração de apenas uma máquina.
master-image-uri URI do Container Registry usado para especificar qual contêiner do Docker usar no job de treinamento. Use o contêiner do algoritmo integrado de detecção de objetos de imagem definido anteriormente como IMAGE_URI.
region Especifique a região disponível em que será executado o job de treinamento. Neste tutorial, use a região us-central1.

Argumentos específicos do algoritmo integrado de detecção de objetos de imagem:

Argumentos do algoritmo
Argumento Descrição
training_data_path Caminho para um padrão de caminho TFRecord usado no treinamento.
validation_data_path Caminho para um padrão de caminho TFRecord usado na validação.
pretrained_checkpoint_path O caminho de checkpoints pré-treinados. Se quiser, use alguns checkpoints publicados.
num_classes O número de classes nos dados de treinamento/validação.
max_steps O número de etapas que o job de treinamento vai executar.
train_batch_size O número de imagens a serem usadas por etapa de treinamento.
num_eval_images O número total de imagens usadas na avaliação.
Se for 0, todas as imagens em validation_data_path serão usadas na avaliação.
learning_rate_decay_type O método de declínio da taxa de aprendizado durante o treinamento.
warmup_learning_rate A taxa de aprendizado no início da fase de aquecimento.
warmup_steps O número de etapas a serem executadas durante a fase de aquecimento ou a duração dessa fase em etapas. O job de treinamento usa warmup_learning_rate durante a fase de aquecimento. Quando a fase de aquecimento termina, o job de treinamento usa initial_learning_rate.
initial_learning_rate A taxa de aprendizado inicial após a conclusão da fase de aquecimento.
stepwise_learning_rate_steps As etapas para diminuir/mudar as taxas de aprendizado para o tipo de declínio progressivo da taxa de aprendizado.
Por exemplo, "100,200" significa que a taxa de aprendizado mudará (em relação a stepwise_learning_rate_levels) nas etapas 100 e 200. Observe que ele será respeitado somente quando learning_rate_decay_type for definido como progressivo.
stepwise_learning_rate_levels O valor da taxa de aprendizado de cada etapa para o tipo de declínio progressivo da taxa de aprendizagem. Observe que ele será respeitado somente quando learning_rate_decay_type for definido como progressivo.
image_size O tamanho da imagem (largura e altura) usado no treinamento.
optimizer_type O otimizador usado no treinamento. Precisa ser um dos seguintes:
{momentum, adam, adadelta, adagrad, rmsprop}
optimizer_arguments Os argumentos do otimizador. É uma lista separada por vírgulas de pares nome=valor. Precisa ser compatível com optimizer_type. Exemplos:
  • O otimizador Momentum aceita momentum=0.9. Consulte o tf.train.MomentumOptimizer (em inglês) para mais detalhes.
  • Para o otimizador Adam, pode ser beta1=0.9,beta2=0.999. Consulte o tf.train.AdamOptimizer (em inglês) para mais detalhes.
  • Para o otimizador RMSProp, pode ser decay=0.9,momentum=0.1,epsilon=1e-10. Consulte o RMSPropOptimizer (em inglês) para mais detalhes.
fpn_type O tipo de rede de pirâmide de atributos (FPN, na sigla em inglês) de vários níveis. Precisa ser um dos seguintes valores: {fpn, nasfpn}.
resnet_depth A profundidade do backbone ResNet. Precisa ser um dos seguintes valores: {18,34,50,101,152,200}.
max_num_bboxes_in_training O número máximo de caixas delimitadoras propostas para uso no treinamento.
max_num_bboxes_in_prediction O número máximo de caixas delimitadoras propostas para uso nas saídas de previsão.
bbox_aspect_ratios A escala de tamanho das âncoras de base que representam as âncoras de proporção adicionadas a cada nível. O número indica a proporção entre largura e altura. Por exemplo, "1.0,2.0,0.5" adiciona três âncoras a cada nível de escala.
nms_iou_threshold O limite para decidir se as caixas delimitadoras se sobrepõem em relação à IOU para supressão não máxima.
nms_score_threshold O limite para decidir quando remover caixas delimitadoras com base na pontuação.
focal_loss_alpha Valor de perda focal alfa (parâmetro de equilíbrio).
focal_loss_gamma Valor de perda focal gama (parâmetro de foco).
aug_scale_min A escala mínima aplicada durante a ampliação de imagem. Esse valor está na faixa [0, 1.0].
aug_scale_max A escala máxima aplicada durante a ampliação de imagem. Esse valor está na faixa [1.0, inf].
aug_rand_hflip Valor booleano. Se definido como "True" (verdadeiro), essa configuração amplia o treinamento com uma inversão horizontal aleatória.

Veja a lista detalhada de todas as outras sinalizações do algoritmo integrado de detecção de objetos de imagem no documento de referência.

Console

Argumentos do algoritmo

Na primeira parte da guia Argumentos do algoritmo, preencha os seguintes valores:

  • Número de classes: 91
  • Máximo de etapas: 15.000
  • Tamanho do lote de treinamento: 64
  • Número de imagens de avaliação: 5.000

Na seção Modelo da guia Argumentos do algoritmo:

  1. Em Caminho de checkpoint pré-treinado, preencha gs://cloud-samples-data/ai-platform/built-in/image/pretrained_checkpoints/detection/.

  2. Deixe as configurações padrão de todos os outros campos e clique em Avançar.

Configurações do job

Na guia Configurações do job:

  1. Insira o ID do job exclusivo, como "object_detection_example".
  2. Digite uma região disponível, como "us-central1".
  3. Para escolher tipos de máquina, selecione "CUSTOM" em nível de escalonamento. Será exibida uma seção para que você forneça sua Especificação de cluster personalizada.
    1. Para o tipo Mestre, selecione complex_model_m.
    2. Em Tipo de worker, selecione cloud_tpu. A contagem de workers automaticamente usa o valor padrão "1".

Clique em Concluído para enviar o job de treinamento.

gcloud

  1. Configure todos os argumentos do job de treinamento e do algoritmo antes de usar a gcloud para enviar o job:

    DATASET_NAME="coco"
    ALGORITHM="object_detection"
    MODEL_NAME="${DATASET_NAME}_${ALGORITHM}_model"
    
    # Give a unique name to your training job.
    DATE="$(date '+%Y%m%d_%H%M%S')"
    JOB_ID="${MODEL_NAME}_${DATE}"
    
    # Make sure you have access to this Cloud Storage bucket.
    JOB_DIR="gs://${BUCKET_NAME}/algorithms_training/${MODEL_NAME}/${DATE}"
    
  2. Envie o job:

    gcloud ai-platform jobs submit training $JOB_ID \
      --region=$REGION \
      --config=config.yaml \
      --job-dir=$JOB_DIR \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --train_batch_size=64 \
      --num_eval_images=500 \
      --train_steps_per_eval=2000 \
      --max_steps=15000 \
      --num_classes=90 \
      --warmup_steps=500 \
      --initial_learning_rate=0.08 \
      --fpn_type="nasfpn" \
      --aug_scale_min=0.8 \
      --aug_scale_max=1.2
    

  3. Depois que o job for enviado com êxito, será possível visualizar os registros usando os comandos gcloud a seguir:

    gcloud ai-platform jobs describe $JOB_ID
    gcloud ai-platform jobs stream-logs $JOB_ID
    

Compreender o diretório do job

Depois que o job de treinamento é concluído com êxito, o AI Platform Training cria um modelo treinado no seu intervalo do Cloud Storage com alguns outros artefatos. Você verá a estrutura de diretório a seguir no seu JOB_DIR:

  • model/, um diretório SavedModel do TensorFlow que também contém um arquivo deployment_config.yaml.
    • saved_model.pb
    • deployment_config.yaml
  • eval/
    • events.out.tfevents.[timestamp].cmle-training-[timestamp]
    • events.out.tfevents...
    • ...
  • variáveis/
    • variables.data-00000-of-00001
    • variables.index

O diretório do job também contém vários arquivos de checkpoints do modelo.

Confirme se a estrutura de diretórios no seu JOB_DIR coincide com:

gsutil ls -a $JOB_DIR/*

Implantar o modelo treinado

O AI Platform Training organiza os modelos treinados usando os recursos model e model. Um modelo do AI Platform Training é um contêiner das versões do modelo de aprendizado de máquina.

Para implantar um modelo, crie um recurso e uma versão desse modelo no AI Platform Training, depois use-os para solicitar previsões on-line.

Para mais informações sobre como implantar modelos no AI Platform Training, consulte Como implantar um modelo do TensorFlow.

Console

  1. Na página Jobs, é possível encontrar uma lista de todos os jobs de treinamento. Clique no nome do job de treinamento que você acabou de enviar ("object_detection" ou o nome que você usou).

  2. Na página Detalhes do job, visualize o progresso geral do job ou clique em Visualizar registros para uma visualização mais detalhada do progresso.

  3. Quando o job é bem-sucedido, o botão Implantar modelo é exibido na parte superior. Clique em Implantar modelo.

  4. Selecione Implantar como novo modelo e insira um nome de modelo, como "algorithms_object_detection_model". Em seguida, clique em Confirmar.

  5. Na página Criar versão, digite o nome de uma versão, como "v1", e deixe as configurações padrão de todos os outros campos. Clique em Salvar.

gcloud

O processo de treinamento com o algoritmo integrado de detecção de objetos de imagem produz um arquivo deployment_config.yaml, que facilita a implantação do seu modelo no AI Platform Training para a realização de previsões.

  1. Copie o arquivo no diretório local e veja o conteúdo dele:

    gsutil cp $JOB_DIR/model/deployment_config.yaml .
    cat deployment_config.yaml
    

    O arquivo deployment_config.yaml será assim:

    deploymentUri: gs://BUCKET_NAME/algorithms_training/coco_object_detection/model
    framework: TENSORFLOW
    labels:
      global_step: '1000'
      job_id: coco_object_detection_20190227060114
    runtimeVersion: '1.14'
    
  2. Crie o modelo e a versão no AI Platform Training:

    gcloud ai-platform models create $MODEL_NAME --regions $REGION
    
    # Create a model and a version using the file above.
    VERSION_NAME="v_${DATE}"
    
    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --config deployment_config.yaml
    

    A criação da versão leva alguns minutos.

Receber previsões on-line

Ao solicitar previsões, você precisa verificar se os dados de entrada estão no formato JSON.

  1. Faça o download dos arquivos de artefatos de treinamento:

    gsutil cp $JOB_DIR/artifacts/* .
    
  2. Prepare a entrada de previsão de uma imagem.

    Para enviar uma solicitação de previsão on-line usando a Google Cloud CLI, como neste exemplo, grave cada instância em uma linha em um arquivo JSON delimitado por nova linha.

    Execute os comandos a seguir no terminal para criar uma entrada de uma única instância que é possível enviar para o AI Platform Prediction:

    Com o script em Python a seguir, uma única imagem é codificada com base64 e formatada para previsão, uma chave de instância é adicionada e o resultado é gravado em um arquivo denominado prediction_instances.json:

    import json
    import base64
    import tensorflow as tf
    
    IMAGE_URI='gs://cloud-samples-data/ai-platform/built-in/image/tutorial_examples/coco_sample.jpeg'
    
    with tf.gfile.Open(IMAGE_URI, 'rb') as image_file:
      encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    
    image_bytes = {'b64': str(encoded_string)}
    instances = {'image_bytes': image_bytes, 'key': '1'}
    with open("prediction_instances.json","w") as f:
      f.write(json.dumps(instances))
    
  3. Envie a solicitação de previsão:

    gcloud ai-platform predict --model $MODEL_NAME \
     --version $VERSION_NAME \
     --json-instances prediction_instances.json
    

Para cada objeto detectado na imagem, a saída da previsão inclui classes, pontuações e os locais das caixas delimitadoras.

Sobre os dados

O Common Objects in Context (COCO) (em inglês) da Microsoft é um conjunto de dados de detecção, segmentação e legendagem de objetos em grande escala.

A seguir