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.
Visão geral
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:
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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:
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
Salve os valores dos campos
serviceAccountProject
etpuServiceAccount
retornados pela API.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
- Faça login no Console do Google Cloud e escolha o projeto em que você usa a TPU.
- Escolha IAM e Admin > IAM.
- Clique no botão Adicionar para adicionar um membro ao projeto.
- Digite a conta de serviço de TPU na caixa de texto Membros.
- Clique na lista suspensa Papéis.
- Ative o papel Agente de serviço do Cloud ML (Agentes de serviço > Agente de serviço do Cloud ML).
gcloud
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
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
Acesse a página "Jobs" do AI Platform Training no console do Google Cloud:
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.
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
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:
Selecione Usar vários arquivos armazenados em um diretório do Cloud Storage.
Em Caminho do diretório, preencha "cloud-samples-data/ai-platform/built-in/image/coco/".
Em Nome do caractere curinga, preencha "train*" para selecionar todos os arquivos de treinamento no diretório.
O Caminho completo do GCS é exibido: "gs://cloud-samples-data/ai-platform/built-in/image/coco/train*".
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:
Selecione Usar vários arquivos armazenados em um diretório do Cloud Storage.
Em Caminho do diretório, preencha "cloud-samples-data/ai-platform/built-in/image/coco/".
Em Nome do caractere curinga, preencha “val*” para selecionar todos os arquivos de validação no diretório.
O Caminho completo do GCS é exibido: "gs://cloud-samples-data/ai-platform/built-in/image/coco/val*".
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. |
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 caminhos 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 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 valores: {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:
|
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 de acordo com a 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:
Em Caminho de checkpoint pré-treinado, preencha
gs://cloud-samples-data/ai-platform/built-in/image/pretrained_checkpoints/detection/
.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:
- Insira o ID do job exclusivo, como "object_detection_example".
- Digite uma região disponível, como "us-central1".
- 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.
- Para o tipo Mestre, selecione complex_model_m.
- 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
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}"
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
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 SavedModel do TensorFlow
diretório
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...
- …
- variables/
- 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:
gcloud storage ls $JOB_DIR/* --all-versions
Implantar o modelo treinado
O AI Platform Training organiza os modelos treinados usando os recursos modelo e versão. 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
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).
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.
Quando o job é bem-sucedido, o botão Implantar modelo é exibido na parte superior. Clique em Implantar modelo.
Selecione Implantar como novo modelo e insira um nome de modelo, como "algorithms_object_detection_model". Em seguida, clique em Confirmar.
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.
Copie o arquivo no diretório local e veja o conteúdo dele:
gcloud storage 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'
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.
Faça o download dos arquivos de artefatos de treinamento:
gcloud storage cp $JOB_DIR/artifacts/* .
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 denominadoprediction_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))
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 conjunto de dados Common Objects in Context (COCO) da Microsoft é um conjunto de dados de detecção, segmentação e legendagem de objetos em grande escala.
A seguir
- Saiba mais sobre como usar o algoritmo integrado de detecção de objetos de imagem.