Primeiros passos com o algoritmo integrado de classificação de imagem

Com os algoritmos integrados no AI Platform Training, é possível enviar dados de treinamento, selecionar um algoritmo e deixar que o AI Platform Training realize o pré-processamento e o treinamento para você, sem a necessidade de escrever qualquer código para um 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ê treina um modelo de classificação de imagem sem escrever nenhum código. Você enviará o conjunto de dados de flores ao AI Platform Training para treinamento, depois implantará o modelo no AI Platform Prediction para receber previsões. O modelo resultante classifica imagens de flores com base em espécies (margarida, tulipa, rosa, girassol ou dente de leão).

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.

Instalação

Modificamos o conjunto de dados Flowers do TensorFlow, para uso neste tutorial, e o hospedamos em um intervalo público do Cloud Storage: gs://cloud-samples-data/ai-platform/built-in/image/flowers/.

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 Classificação de imagens 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/flowers/"

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

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

  2. Na seção Dados de validação, selecione os dados de validação 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/flowers/"

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

    4. O caminho completo do GCS é exibido abaixo: "gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_validation*"

  3. Especifique o Diretório de saída como seu intervalo do Cloud Storage em que você quer que o AI Platform Training armazene 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/flowers/flowers_train*"
VALIDATION_DATA_PATH="gs://cloud-samples-data/ai-platform/built-in/image/flowers/flowers_validation*"

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

Enviar um job de treinamento

Para enviar um job, é preciso especificar alguns argumentos básicos de treinamento e alguns argumentos básicos relacionados ao algoritmo de classificação 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 para o algoritmo integrado de classificação de imagem definido anteriormente como IMAGE_URI.
region Especifique a região disponível onde será executado o job de treinamento. Neste tutorial, use a região us-central1.

Argumentos específicos para o algoritmo integrado de classificação de imagens:

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, 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.
model_type O tipo de arquitetura de modelo usado para treinar modelos. Pode ser um dos seguintes:
  • resnet-(18|34|50|101|152|200)
  • efficientnet-(b0|b1|b2|b3|b4|b5|b6|b7)
label_smoothing Parâmetro de suavização de rótulos usado em softmax_cross_entropy.
weight_decay Coeficiente de redução de peso para regularização de L2. loss = cross_entropy + params['weight_decay'] * l2_loss

Para uma lista detalhada de todas as outras sinalizações de algoritmo de classificação de imagens, consulte a referência de classificação de imagem integrada.

Console

Argumentos do algoritmo

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

  • Número de classes: 5
  • Máximo de etapas: 15.000
  • Treinar tamanho do lote: 128
  • Número de imagens de avaliação: 1

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

  1. Em Tipo de modelo, selecione Efficientnet-b4.
  2. Deixe em branco o Caminho de checkpoint pré-treinado.
  3. Deixe os valores padrão em Suavização de rótulo e Redução de peso.

Configurações de job

Na guia Configurações do job:

  1. Insira um Código do job exclusivo, como "image_classification_example".
  2. insira 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="flowers"
    ALGORITHM="image_classification"
    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 \
      --master-image-uri=$IMAGE_URI \
      -- \
      --training_data_path=$TRAINING_DATA_PATH \
      --validation_data_path=$VALIDATION_DATA_PATH \
      --job-dir=$JOB_DIR \
      --max_steps=30000 \
      --train_batch_size=128 \
      --num_classes=5 \
      --num_eval_images=100 \
      --initial_learning_rate=0.128 \
      --warmup_steps=1000 \
      --model_type='efficientnet-b4'
    

  3. Depois que o job for enviado com êxito, será possível ver 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, você encontra uma lista de todos os jobs de treinamento. Clique no nome do job de treinamento que você acabou de enviar ("image_classification" ou o nome do job 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_image_classification_model". Depois, 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 classificação de imagens produz um arquivo, deployment_config.yaml, que facilita a implantação de seu modelo no AI Platform Training para previsões.

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

    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/flowers_image_classification/model
    framework: TENSORFLOW
    labels:
      global_step: '1000'
      job_id: flowers_image_classification_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/daisy.jpg'
    
    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
    

Provavelmente, a saída de previsão inclui a classe daisy, indicando que o modelo implantado classificou a imagem de entrada como uma margarida. Como o treinamento não é determinístico, o modelo pode ser diferente.

Sobre os dados

O conjunto de dados Flowers usado neste exemplo para treinamento é fornecido pela equipe do TensorFlow.

A seguir