O treinamento com algoritmos integrados no AI Platform Training permite enviar o conjunto de dados e treinar um modelo, sem a necessidade de escrever qualquer código de treinamento. Nesta página, explicamos como funciona o algoritmo integrado de detecção de objetos de imagem e como usá-lo.
Visão geral
O algoritmo integrado de detecção de objetos de imagem usa os conjuntos de dados de treinamento e de validação para treinar modelos de maneira contínua. Na sequência, ele produz o SavedModel mais preciso gerado durante o processo do job de treinamento. É possível também usar o ajuste de hiperparâmetros para atingir a melhor precisão do modelo. É possível usar o SavedModel exportado diretamente para previsão, seja localmente ou implantado no AI Platform Prediction para serviço de produção.
Limitações
Os algoritmos integrados de imagem permitem treinamento com CPUs, GPUs ou TPUs únicas. O SavedModel resultante é compatível com exibição em CPUs e GPUs.
Os seguintes recursos não permitem treinamento com o algoritmo integrado de detecção de objetos de imagem:
- Treinamento distribuído: Para executar um job de treinamento distribuído do TensorFlow no AI Platform Training, você precisa criar um aplicativo de treinamento.
- Treinamento com várias GPUs: Os algoritmos integrados apenas usam uma GPU por vez. Para aproveitar ao máximo o treinamento com várias GPUs em uma só máquina, você precisa criar um aplicativo de treinamento. Encontre mais informações sobre os tipos de máquinas.
Tipos de máquina compatíveis
Os níveis de escalonamento e tipos de máquina do AI Platform Training a seguir são compatíveis:
- ScaleTier
BASIC
- ScaleTier
BASIC_TPU
CUSTOM
Nível de escalonamento PERSONALIZADO com qualquer um dos tipos de máquina do Compute Engine compatíveis com o AI Platform Training.CUSTOM
Nível de escalonamento PERSONALIZADO com qualquer um dos tipos de máquina legados a seguir:standard
large_model
complex_model_s
complex_model_m
complex_model_l
standard_gpu
standard_p100
standard_v100
large_model_v100
complex_model_m_gpu
complex_model_l_gpu
complex_model_m_p100
complex_model_m_v100
complex_model_l_v100
TPU_V2
(8 núcleos)
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.
Formatar dados de entrada para treinamento
O algoritmo integrado de detecção de objetos de imagem requer que os dados de entrada sejam formatados
como tf.Examples
e salvos no(s) arquivo(s) TFRecord. A estrutura de dados de tf.Example
e o
formato de arquivo TFRecord foram projetados para uma leitura de dados eficiente com
o TensorFlow.
O TFRecord é um formato simples para armazenar uma sequência de registros binários.
Neste caso, todos os registros contêm representações binárias de imagens. Cada
imagem, com os respectivos rótulos de classe, é representada como tf.Example
. É possível
salvar muitos tf.Example
s em um único arquivo TFRecord. É possível também fragmentar um
conjunto de dados grande em vários arquivos TFRecord.
Saiba mais sobre TFRecord e tf.Example
(em inglês).
Converter as imagens em TFRecords
Para converter imagens so formato necessário para receber previsões, siga o guia do TensorFlow Model Garden e prepare entradas para a detecção de objetos.
Verificar as permissões do bucket do Cloud Storage
Para armazenar seus dados, use um bucket do Cloud Storage no mesmo projeto do Google Cloud usado para executar jobs do AI Platform Training. Caso contrário, conceda acesso de treinamento do AI Platform ao intervalo do Cloud Storage onde os dados estão armazenados.
Formato de entrada obrigatório
Para treinar com o algoritmo integrado de detecção de objetos de imagem, os dados da imagem precisam
ser estruturados como tf.Example
s que incluam os seguintes campos:
image/encoded
é a imagem bruta codificada como uma string.image/object/class/label
é uma lista de rótulos inteiros para a imagem correspondente (um rótulo por caixa).O conjunto de rótulos inteiros usados para o conjunto de dados precisa ser uma sequência consecutiva a partir de
1
. Por exemplo, se o conjunto de dados tiver cinco classes, cada rótulo precisará ser um número inteiro no intervalo[1, 5]
.image/object/bbox/xmin
é uma lista de coordenadas x esquerda normalizadas para a imagem correspondente (uma coordenada por caixa). Cada coordenada precisa estar no intervalo[0, 1]
.image/object/bbox/xmax
é uma lista de coordenadas x corretas normalizadas para a imagem correspondente (uma coordenada por caixa). Cada coordenada precisa estar no intervalo[0, 1]
.image/object/bbox/ymin
é uma lista de coordenadas superior y normalizadas para a imagem correspondente (uma coordenada por caixa). Cada coordenada precisa estar no intervalo[0, 1]
.image/object/bbox/ymax
é uma lista de coordenadas y inferiores inferiorizadas para a imagem correspondente (uma coordenada por caixa). Cada coordenada precisa estar no intervalo[0, 1]
.
O exemplo a seguir mostra a estrutura de um tf.Example
para uma imagem
que contém duas caixas delimitadoras. A primeira caixa tem o rótulo 1
, o canto superior esquerdo
está nas coordenadas normalizadas (0.1, 0.4)
e o canto inferior direito
está nas coordenadas normalizadas (0.5, 0.8)
. A segunda caixa tem o rótulo 2
, o canto superior esquerdo está nas coordenadas normalizadas (0.3, 0.5)
e o canto inferior direito está nas coordenadas normalizadas (0.4, 0.7)
.
{
'image/encoded': '<encoded image data>',
'image/object/class/label': [1, 2],
'image/object/bbox/xmin': [0.1, 0.3],
'image/object/bbox/xmax': [0.5, 0.4],
'image/object/bbox/ymin': [0.4, 0.5],
'image/object/bbox/ymax': [0.8, 0.7]
}
Esse formato tf.Example
segue o mesmo usado no script de detecção de objetos TFRecord.
Como atingir o melhor SavedModel no resultado
Quando o job de treinamento for concluído, o AI Platform Training gravará um SavedModel do TensorFlow no
intervalo do Cloud Storage que você especificou como jobDir
quando enviou
o job. O SavedModel é gravado em jobDir/model
. Por exemplo, se você
enviar o job para gs://your-bucket-name/your-job-dir
, o AI Platform Training gravará
o SavedModel em gs://your-bucket-name/your-job-dir/model
.
Se você ativou o ajuste de hiperparâmetros, o AI Platform Training retorna o SavedModel do TensorFlow com a maior precisão alcançada durante o processo de treinamento. Por exemplo, se você enviou um job de treinamento com 2.500 etapas de treinamento, e a precisão foi maior em 2.000 etapas, você consegue um SavedModel do TensorFlow salvo a partir desse ponto específico.
Cada avaliação do AI Platform Training grava o SavedModel do TensorFlow com a precisão mais alta
no próprio diretório dele no seu intervalo do Cloud Storage. Por
exemplo,
gs://your-bucket-name/your-job-dir/model/trial_{trial_id}
.
A assinatura do SavedModel de saída é:
signature_def['serving_default']:
The given SavedModel SignatureDef contains the following input(s):
inputs['encoded_image'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: encoded_image_string_tensor:0
inputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: key:0
The given SavedModel SignatureDef contains the following output(s):
outputs['detection_boxes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100, 4)
name: detection_boxes:0
outputs['detection_classes'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_classes:0
outputs['detection_scores'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 100)
name: detection_scores:0
outputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Identity:0
outputs['num_detections'] tensor_info:
dtype: DT_FLOAT
shape: (-1)
name: num_detections:0
Method name is: tensorflow/serving/predict
Entradas:
encoded_image
: os bytes da imagem bruta (não decodificada). Trata-se do mesmoimage/encoded
armazenado em tf.Example.key
: o identificador do valor da string da entrada de previsão. Esse valor é transmitido parakey
de saída. Na previsão em lote, ele ajuda a mapear a saída da previsão para a entrada.
Saídas:
num_detections
: o número de caixas delimitadoras detectadas.detection_boxes
: uma lista de coordenadas relativas (valor em [0,1
]) ([ymin, xmin, ymax, xmax
]) das caixas delimitadoras de detecção.detection_classes
: uma lista de rótulos de classe previstos (número inteiro) para cada caixa de detecção emdetection_boxes
.detection_scores
: uma lista descores
para cada caixa de detecção emdetection_boxes
.key
: a chave de saída.
Veja a seguir um exemplo de saídas de previsão:
{u'detection_classes': [1.0, 3.0, 3.0, ...],
u'key': u'test_key',
u'num_detections': 100.0,
u'detection_scores': [0.24401935935020447, 0.19375669956207275, 0.18359294533729553, ...]]}
Exemplos de configurações
Se você enviar um job usando gcloud
, precisará criar um arquivo config.yaml
para suas especificações de ajuste de hiperparâmetros e tipo de máquina. Se você usa o
console do Google Cloud, não precisa criar esse arquivo. Saiba
como enviar um job de treinamento.
No seguinte exemplo de arquivo config.yaml
, mostramos como alocar recursos de TPU
para seu job de treinamento:
cat << EOF > config.yaml
trainingInput:
scaleTier: CUSTOM
masterType: n1-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
tpuTfVersion: 1.14
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
EOF
Em seguida, use o arquivo config.yaml
para enviar um job de treinamento.
Configuração de ajuste de hiperparâmetros
Para usar o ajuste de hiperparâmetros, inclua a respectiva configuração no mesmo arquivo config.yaml
da configuração da máquina.
Encontre explicações resumidas de cada hiperparâmetro no console do Google Cloud e uma explicação mais abrangente na referência do algoritmo integrado de detecção de objetos de imagem.
No seguinte exemplo de arquivo config.yaml
, você verá como alocar recursos de TPU para o job de treinamento, bem como a configuração de ajuste de hiperparâmetros:
cat << EOF > config.yaml
trainingInput:
# Use a cluster with many workers and a few parameter servers.
scaleTier: CUSTOM
masterType: n1-standard-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: NVIDIA_TESLA_P100
count: 1
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_object_detection:latest
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
# The following are hyperparameter configs.
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: "AP"
maxTrials: 6
maxParallelTrials: 3
enableTrialEarlyStopping: True
params:
- parameterName: initial_learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.1
scaleType: UNIT_LOG_SCALE
EOF
Enviar um job de treinamento de detecção de objetos de imagem
Nesta seção, explicamos como enviar um job de treinamento usando o algoritmo integrado de detecção de objetos de imagem.
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.
Na página Criar um novo job de treinamento, selecione detecção de objetos de imagem e clique em Próxima.
Selecionar os dados de treinamento e validação
No menu suspenso abaixo de Dados de treinamento, especifique se você usa um ou vários arquivos:
- No caso de um único arquivo, mantenha selecionada a opção "Usar arquivo único em um intervalo do GCS".
- No caso de vários arquivos, selecione "Usar vários arquivos armazenados em um diretório do Cloud Storage".
Em Caminho do diretório, clique em Procurar. No painel à direita, clique no nome do intervalo em que você fez upload dos dados de treinamento e navegue até o arquivo.
Se você selecionar vários arquivos, insira os caracteres curinga em Nome do caractere curinga. O "Caminho completo do GCS" é exibido abaixo para ajudar você a confirmar que o caminho está correto.
No menu suspenso abaixo de Dados de validação, especifique se você usa um ou vários arquivos:
- No caso de um único arquivo, mantenha selecionada a opção "Usar arquivo único em um intervalo do GCS".
- No caso de vários arquivos, selecione "Usar vários arquivos armazenados em um diretório do Cloud Storage".
Em Caminho do diretório, clique em Procurar. No painel à direita, clique no nome do intervalo em que você fez upload dos dados de treinamento e navegue até o arquivo.
Se você selecionar vários arquivos, insira os caracteres curinga em Nome do caractere curinga. O "Caminho completo do GCS" é exibido abaixo para ajudar você a confirmar que o caminho está correto.
Em Diretório de saída, insira o caminho para o intervalo do Cloud Storage em que o AI Platform Training armazenará as saídas do seu job de treinamento. Preencha o caminho do intervalo do Cloud Storage diretamente ou clique no botão Procurar para selecioná-lo.
Para manter a organização, crie um novo diretório no intervalo do Cloud Storage para esse job de treinamento. Faça isso no painel Procurar.
Clique em Próxima.
Definir os argumentos do algoritmo
Cada argumento específico de algoritmo exibe um valor padrão de jobs de treinamento sem ajuste de hiperparâmetros. Se você ativar o ajuste de hiperparâmetros em um argumento de algoritmo, precisará especificar os valores mínimo e máximo dele.
Para saber mais detalhes sobre todos os argumentos de algoritmo, siga os links no console do Google Cloud e consulte a referência da detecção integrada de objetos de imagempara mais detalhes.
Enviar o job
Na guia Configurações do job, faça o seguinte:
- Insira um ID do job exclusivo.
- Insira 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.
- Selecione um tipo de máquina disponível em Tipo mestre.
- Se você quiser usar TPUs, defina o Tipo de worker como cloud_tpu. A contagem de workers é padronizada como 1.
Clique em Concluído para enviar o job de treinamento.
gcloud
Defina as variáveis de ambiente do seu job:
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME" # Specify the same region where your data is stored REGION="YOUR_REGION" gcloud config set project $PROJECT_ID gcloud config set compute/region $REGION # Set Cloud Storage paths to your training and validation data # Include a wildcard if you select multiple files. TRAINING_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/train-*.tfrecord" VALIDATION_DATA_PATH="gs://${BUCKET_NAME}/YOUR_DATA_DIRECTORY/eval-*.tfrecord" # Specify the Docker container for your built-in algorithm selection IMAGE_URI="gcr.io/cloud-ml-algos/image_object_detection:latest" # Variables for constructing descriptive names for JOB_ID and JOB_DIR DATASET_NAME="coco" ALGORITHM="object_detection" MODEL_NAME="${DATASET_NAME}_${ALGORITHM}" DATE="$(date '+%Y%m%d_%H%M%S')" # Specify an ID for this job JOB_ID="${MODEL_NAME}_${DATE}" # Specify the directory where you want your training outputs to be stored JOB_DIR="gs://${BUCKET_NAME}/algorithm_training/${JOB_ID}"
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=22500 \ --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 ver os registros usando os comandos
gcloud
a seguir:gcloud ai-platform jobs describe $JOB_ID gcloud ai-platform jobs stream-logs $JOB_ID
A seguir
- Saiba como usar seu próprio conjunto de ddaos com o script de detecção de objetos TFRecord (em inglês).
- Consulte a referência de detecção integrada de objetos de imagem para saber mais sobre todos os diferentes parâmetros.