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, você verá como funciona o algoritmo de classificação de imagens integrado e como usá-lo.
Visão geral
O algoritmo de classificação de imagens integrado usa os conjuntos de dados de treinamento e validação para treinar modelos continuamente e tem como resultado o SavedModel mais preciso gerado durante o curso do job de treinamento. Também é possível usar o ajuste de hiperparâmetros para atingir a melhor acurácia 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 são compatíveis com o treinamento usando o algoritmo de classificação de imagens integrado:
- 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
Formatar dados de entrada para treinamento
O algoritmo de classificação de imagens integrado exige que os dados de entrada sejam formatados como tf.Examples
e salvos em 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
O TensorFlow inclui um script (em inglês) que você usa para converter as imagens JPEG no formato TFRecord.
Use o script se:
- você armazena as imagens no Cloud Storage;
você tem arquivos CSV com os caminhos para as imagens no Cloud Storage, e os rótulos correspondentes. Exemplo:
gs://cloud-ml-data/img/flower_photos/daisy/754296579_30a9ae018c_n.jpg,daisy gs://cloud-ml-data/img/flower_photos/dandelion/18089878729_907ed2c7cd_m.jpg,dandelion
você armazena esses arquivos CSV no Cloud Storage.
No exemplo a seguir, mostramos como executar o script:
Faça o download do script:
curl https://raw.githubusercontent.com/tensorflow/tpu/master/tools/datasets/jpeg_to_tf_record.py > ./jpeg_to_tf_record.py
Defina as variáveis do ID do projeto e o nome do intervalo, caso ainda não tenha feito isso:
PROJECT_ID="YOUR_PROJECT_ID" BUCKET_NAME="YOUR_BUCKET_NAME"
Crie uma lista de todos os rótulos possíveis para o conjunto de dados em um arquivo temporário:
cat << EOF > /tmp/labels.txt daisy dandelion roses sunflowers tulips EOF
Execute o script usando os dados de flores do intervalo
cloud-ml-data
público e sua lista de rótulos:python -m jpeg_to_tf_record.py \ --train_csv gs://cloud-ml-data/img/flower_photos/train_set.csv \ --validation_csv gs://cloud-ml-data/img/flower_photos/eval_set.csv \ --labels_file /tmp/labels.txt \ --project_id $PROJECT_ID \ --output_dir gs://$BUCKET_NAME/flowers_as_tf_record
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 de classificação de imagens integrado, é necessário que os dados de imagem sejam estruturados como tf.Example
s, com os seguintes campos:
image/encoded
: a string de imagem bruta;image/class/label
é um rótulo inteiro único para a imagem correspondente. Vários rótulos por instância não são compatíveis.O grupo de rótulos inteiros usados para o conjunto de dados precisa ser uma sequência 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]
.
Exemplo:
{
'image/encoded': '<encoded image data>',
'image/class/label': 2
}
Como obter o melhor SavedModel como saída
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 será esta:
signature_def['serving_default']:
The given SavedModel SignatureDef contains the following input(s):
inputs['image_bytes'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Placeholder:0
inputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: key:0
The given SavedModel SignatureDef contains the following output(s):
outputs['classes'] tensor_info:
dtype: DT_INT64
shape: (-1)
name: ArgMax:0
outputs['key'] tensor_info:
dtype: DT_STRING
shape: (-1)
name: Identity:0
outputs['probabilities'] tensor_info:
dtype: DT_FLOAT
shape: (-1, 1000)
name: softmax_tensor:0
Method name is: tensorflow/serving/predict
Entradas:
image_bytes
: os bytes da imagem bruta (não decodificada). É o 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:
classes
: o rótulo de classe previsto (inteiro), que é aquele com a probabilidade mais alta.key
: a chave de saída.probabilities
: aprobability
(entre 0 e 1) de cadaclass
(variando de 0 anum_classes
).
A seguir, há um exemplo de entradas e saídas de previsão:
prediction_input: {
'image_bytes': 'some_raw_image_bytes',
'key': ['test_key'])
}
prediction_output: {
'probabilities': [[0.1, 0.3, 0.6]],
'classes': [2],
'key': ['test_key'],
}
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:
# Use a cluster with many workers and a few parameter servers.
scaleTier: CUSTOM
masterType: n1-highmem-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
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.
Você encontra explicações breves de cada hiperparâmetro no Console do Google Cloud e uma explicação mais abrangente na referência do algoritmo de classificação de imagens integrado.
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-highmem-16
masterConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
workerType: cloud_tpu
workerConfig:
imageUri: gcr.io/cloud-ml-algos/image_classification:latest
tpuTfVersion: 1.14
acceleratorConfig:
type: TPU_V2
count: 8
workerCount: 1
# The following are hyperparameter configs.
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: top_1_accuracy
maxTrials: 6
maxParallelTrials: 3
enableTrialEarlyStopping: True
params:
- parameterName: initial_learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.2
scaleType: UNIT_LOG_SCALE
EOF
Enviar um job de treinamento de classificação de imagens
Nesta seção, você verá como enviar um job de treinamento usando o algoritmo integrado de classificação de imagens.
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 Classificação de imagens e clique em Avançar.
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 sobre todos os argumentos de algoritmo, siga os links no Console do Google Cloud e consulte a referência do algoritmo de classificação de imagens integrado para 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_classification:latest" # Variables for constructing descriptive names for JOB_ID and JOB_DIR DATASET_NAME="flowers" ALGORITHM="image_classification" 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 \ --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'
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
A seguir
- Consulte a referência do algoritmo de classificação de imagens integrado para conhecer todos os parâmetros.