Neste tutorial, você aprende como criar um novo modelo com seu próprio conjunto de imagens de treinamento, avaliar os resultados e prever a classificação da imagem de teste usando o AutoML Vision.
O tutorial usa um conjunto de dados com imagens de cinco tipos diferentes de flores: girassóis, tulipas, margaridas, rosas e dentes-de-leão. Ele abrange a formação de um modelo personalizado, avaliando o desempenho do modelo e classificando novas imagens com base no modelo personalizado.
Pré-requisitos
Configurar o ambiente do projeto
- 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.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs AutoML Vision.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs AutoML Vision.
- Instale a Google Cloud CLI.
- Siga as instruções para criar uma conta de serviço e fazer o download de um arquivo de chave.
-
Defina a variável de ambiente
GOOGLE_APPLICATION_CREDENTIALS
para o caminho até o arquivo de chave da conta de serviço que você salvou quando criou essa conta. Por exemplo:export GOOGLE_APPLICATION_CREDENTIALS=KEY_FILE
-
Adicione a nova conta de serviço ao papel do IAM Editor do AutoML com os comandos a seguir. Substitua PROJECT_ID pelo nome do seu
projeto do Google Cloud e SERVICE_ACCOUNT_NAME pelo nome da
nova conta de serviço, por exemplo,
service-account1@myproject.iam.gserviceaccount.com
:gcloud auth login gcloud projects add-iam-policy-binding PROJECT_ID \ --member="user:YOUR_USERID@YOUR_DOMAIN" \ --role="roles/automl.admin" gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME \ --role="roles/automl.editor"
-
Permita que as contas de serviço do AutoML Vision acessem os
recursos do projeto do Google Cloud:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:custom-vision@appspot.gserviceaccount.com" \ --role="roles/storage.admin"
- Instale a biblioteca de cliente.
-
Defina as variáveis de ambiente
PROJECT_ID
eREGION_NAME
.
Substitua PROJECT_ID pelo ID do projeto do Google Cloud. No momento, o AutoML Vision exige o localus-central1
.export PROJECT_ID="PROJECT_ID" export REGION_NAME="us-central1"
-
Crie um bucket do Cloud Storage para armazenar os documentos
que serão usados para treinar o modelo personalizado.
O nome do bucket precisa estar no formato:$PROJECT_ID-vcm
. O comando a seguir cria um intervalo de armazenamento na regiãous-central1
denominada$PROJECT_ID-vcm
.gsutil mb -p PROJECT_ID -c regional -l us-central1 gs://PROJECT_ID-vcm/
- Defina a variável BUCKET.
export BUCKET=PROJECT_ID-vcm
-
Copie o conjunto de dados disponível publicamente das imagens de flores de
gs://cloud-samples-data/img/flower_photos/
para o bucket do Google Cloud Storage.
Na sessão do Cloud Shell, insira:gsutil -m cp -R gs://cloud-samples-data/ai-platform/flowers/ gs://BUCKET/img/
A cópia do arquivo leva cerca de 20 minutos para ser concluída.
Esse comando também copia o arquivo
all_data.csv
, que lista os nomes de arquivo originais e os rótulos deles. -
O conjunto de dados de amostra contém um arquivo CSV com o local e os rótulos de
cada imagem. Consulte Como preparar os dados de treinamento para
detalhes sobre o formato necessário. Atualize o arquivo .csv para apontar para os arquivos
no bucket:
gsutil cat gs://BUCKET/img/flowers/all_data.csv | sed "s:cloud-ml-data/img/flower_photos/:BUCKET/img/flowers/:" > all_data.csv
Em seguida, copie o arquivo .csv atualizado para o bucket:gsutil cp all_data.csv gs://BUCKET/csv/
Locais dos arquivos de código-fonte
Faça o download do código-fonte do local fornecido abaixo. Depois, copie o código-fonte para a pasta do projeto do AutoML Vision.
Python
O tutorial consiste nestes arquivos do Python:
vision_classification_create_dataset.py
: inclui a funcionalidade para criar um conjunto de dados.import_dataset.py
: inclui a funcionalidade para importar um conjunto de dados.vision_classification_create_model.py
: inclui a funcionalidade para criar um modelo.list_model_evaluations.py
: inclui a funcionalidade para listar avaliações de modelos.vision_classification_predict.py
: inclui a funcionalidade relacionada à previsão.delete_model.py
: inclui a funcionalidade para excluir um modelo.
Java
O tutorial consiste nestes arquivos do Java:
VisionClassificationCreateDataset.java
: inclui a funcionalidade para criar um conjunto de dados.ImportDataset.java
: inclui a funcionalidade para importar um conjunto de dados.VisionClassificationCreateModel.java
: inclui a funcionalidade para criar um modelo.ListModelEvaluations.java
: inclui a funcionalidade para listar avaliações de modelos.VisionClassificationPredict.java
: inclui a funcionalidade relacionada à previsão.DeleteModel.java
: inclui a funcionalidade para excluir um modelo.
Node.js
O tutorial consiste nestes programas do Node.js:
vision_classification_create_dataset.js
: inclui a funcionalidade para criar um conjunto de dados.import_dataset.js
: inclui a funcionalidade para importar um conjunto de dados.vision_classification_create_model.js
: inclui a funcionalidade para criar um modelo.list_model_evaluations.js
: inclui a funcionalidade para listar avaliações de modelos.vision_classification_predict.js
: inclui a funcionalidade relacionada à previsão.delete_model.js
: inclui a funcionalidade para excluir um modelo.
Como executar o aplicativo
Etapa 1: criar o conjunto de dados de flores
A primeira etapa no desenvolvimento de um modelo personalizado é criar um conjunto de dados vazio que vai armazenar os dados de treinamento do modelo. Ao criar um conjunto de dados, você especifica o tipo de classificação que quer que seu modelo personalizado execute:
- MULTICLASS atribui uma única etiqueta a cada imagem classificada.
- MULTILABEL possibilita que vários rótulos sejam atribuídos a uma imagem.
Neste tutorial, você cria um conjunto de dados chamado flowers
e usa MULTICLASS.
Copiar o código
Python
Java
Node.js
Para mais informações, consulte a documentação de referência da API da AutoML VisionNode.js.
Para autenticar no AutoML Vision, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Solicitação
Execute a função create_dataset
para criar um conjunto de dados vazio. Você precisa modificar
as linhas de código a seguir:
- Defina o
project_id
como o PROJECT_ID. - Defina o
display_name
do conjunto de dados (flowers
). Altere
MULTILABEL
para MULTICLASS.
Python
python3 vision_classification_create_dataset.py
Java
mvn compile exec:java -Dexec.mainClass="com.example.automl.VisionClassificationCreateDataset"
Node.js
node vision_classification_create_dataset.js
Resposta
A resposta inclui os detalhes do conjunto de dados recém-criado, como o ID do conjunto de dados que você usará para se referir a ele em solicitações futuras. Recomendamos definir uma variável de ambiente DATASET_ID
como o valor do código do conjunto de dados.
Dataset name: projects/216065747626/locations/us-central1/datasets/ICN7372141011130533778 Dataset id: ICN7372141011130533778 Dataset display name: flowers Image classification dataset specification: classification_type: MULTICLASS Dataset example count: 0 Dataset create time: seconds: 1530251987 nanos: 216586000
Etapa 2: importar imagens para o conjunto de dados
A próxima etapa é enviar imagens de treinamento rotuladas para o conjunto de dados usando os rótulos de destino.
A interface da função import_data
recebe como entrada um arquivo .csv que lista os
locais de todas as imagens de treinamento e o rótulo adequado de cada uma delas. Saiba mais sobre o formato exigido em Preparar os dados. Neste tutorial, serão usadas as imagens rotuladas que você copiou para o
bucket do Cloud Storage, listadas em
gs://$PROJECT_ID-vcm/csv/all_data.csv
.
Copiar o código
Python
Java
Node.js
Para mais informações, consulte a documentação de referência da API da AutoML VisionNode.js.
Para autenticar no AutoML Vision, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Solicitação
Execute a função import_data
para importar o conteúdo de treinamento. A primeira parte do código a ser alterada é o ID do conjunto de dados da etapa anterior, enquanto a segunda é o URI de all_data.csv
. Você precisa modificar
as linhas de código a seguir:
- Defina o
project_id
como seu PROJECT_ID. - Defina o
dataset_id
do conjunto de dados usando a saída da etapa anterior. Defina o
path
, que é o URI degs://YOUR_PROJECT_ID-vcm/csv/all_data.csv
.python3 import_dataset.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.ImportDataset" {Java}
node import_dataset.js {Node.js}
Resposta
Processing import... Dataset imported.
Etapa 3: criar (treinar) o modelo
Agora que você tem um conjunto de dados de imagens de treinamento etiquetadas, pode treinar um novo modelo.
Copiar o código
Python
Java
Node.js
Para mais informações, consulte a documentação de referência da API da AutoML VisionNode.js.
Para autenticar no AutoML Vision, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Solicitação
Chame a função create_model
para criar um modelo. Use o ID do conjunto de dados das
etapas anteriores. Você precisa modificar as linhas de código a seguir:
- Defina o
project_id
como seu PROJECT_ID. - Defina o
dataset_id
do conjunto de dados usando a saída da etapa anterior. Defina o
display_name
do modelo (flowers_model
).python3 vision_classification_create_model.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.VisionClassificationCreateModel" {Java}
node vision_classification_create_model.js {Node.js}
Resposta
A função create_model
inicia uma operação de treinamento e imprime o nome da operação. O treinamento é realizado de modo assíncrono e pode levar um tempo para ser concluído. Portanto, é possível usar o ID da operação para verificar o status do treinamento. Quando o treinamento for concluído, create_model
retornará o ID do modelo. Assim como você fez com o ID do conjunto de dados, defina uma variável de ambiente MODEL_ID
como o valor do ID do modelo retornado.
Training operation name: projects/216065747626/locations/us-central1/operations/ICN3007727620979824033 Training started... Model name: projects/216065747626/locations/us-central1/models/ICN7683346839371803263 Model id: ICN7683346839371803263 Model display name: flowers_model Image classification model metadata: Training budget: 1 Training cost: 1 Stop reason: Base model id: Model create time: seconds: 1529649600 nanos: 966000000 Model deployment state: deployed
Etapa 4: avaliar o modelo
Após o treinamento, avalie a prontidão do modelo analisando a precisão, o recall e a pontuação F1 dele.
A função display_evaluation
considera o ID do modelo como um parâmetro.
Copiar o código
Python
Java
Node.js
Para mais informações, consulte a documentação de referência da API da AutoML VisionNode.js.
Para autenticar no AutoML Vision, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Solicitação
Faça a solicitação a seguir para exibir o desempenho geral da avaliação do modelo. Você precisa modificar as linhas de código a seguir:
- Defina o
project_id
como seu PROJECT_ID. Defina o
model_id
como o ID do modelo.python3 list_model_evaluations.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.ListModelEvaluations" {Java}
node list_model_evaluations.js {Node.js}
Resposta
Se as pontuações de precisão e recall forem muito baixas, você poderá fortalecer o conjunto de dados de treinamento e treinar novamente seu modelo. Para mais informações, consulte Como avaliar modelos.
Precision and recall are based on a score threshold of 0.5 Model Precision: 96.3% Model Recall: 95.7% Model F1 score: 96.0% Model Precision@1: 96.33% Model Recall@1: 95.74% Model F1 score@1: 96.04%
Etapa 5: usar um modelo para fazer uma predição
Quando seu modelo personalizado atende aos padrões de qualidade, você pode usá-lo para classificar novas imagens de flores.
Copiar o código
Python
Java
Node.js
Para mais informações, consulte a documentação de referência da API da AutoML VisionNode.js.
Para autenticar no AutoML Vision, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Solicitação
Na função predict
, você precisa modificar as linhas de código a seguir:
- Defina o
project_id
como seu PROJECT_ID. - Defina o
model_id
como o ID do modelo. Defina o
file_path
como o arquivo salvo ("resources/test.png").python3 vision_classification_predict.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.VisionClassificationPredict" {Java}
node vision_classification_predict.js {Node.js}
Resposta
A função retorna a pontuação de acordo com a correspondência da imagem para cada categoria, excedendo o limite de confiança declarado de 0,7.
Prediction results: Predicted class name: dandelion Predicted class score: 0.9702693223953247
Etapa 6: excluir o modelo
Quando terminar de usar esse modelo de amostra, você poderá excluí-lo permanentemente. Não será mais possível usá-lo para previsão.
Copiar o código
Python
Java
Node.js
Para mais informações, consulte a documentação de referência da API da AutoML VisionNode.js.
Para autenticar no AutoML Vision, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Solicitação
Faça uma solicitação com o tipo de operação delete_model
para excluir um modelo criado.
Você precisa modificar as linhas de código a seguir:
- Defina o
project_id
como seu PROJECT_ID. Defina o
model_id
como o ID do modelo.python3 delete_model.py {Python}
mvn compile exec:java -Dexec.mainClass="com.example.automl.DeleteModel" {Java}
node delete_model.js {Node.js}
Resposta
Model deleted.