Path: blob/master/site/pt-br/hub/tutorials/tf2_object_detection.ipynb
25118 views
Copyright 2020 The TensorFlow Hub Authors.
Licensed under the Apache License, Version 2.0 (the "License");
Colab de detecção de objetos do TensorFlow Hub
Este é o Colab de detecção de objetos do TensorFlow Hub! Este notebook apresenta as etapas de execução de um modelo de detecção de objetos "out-of-the-box" em imagens.
Importações e configuração
Vamos começar com as importações básicas.
Utilitários
Execute a célula abaixo para criar alguns utilitários que serão necessários posteriormente:
Método helper para carregar uma imagem
Mapeamento entre nome do modelo e identificador do TF Hub
Lista de tuplas com pontos-chave humanos para o dataset COCO 2017, necessária para modelos com pontos-chave.
Ferramentas de visualização
Para visualizar as imagens com as caixas detectadas, pontos-chave e segmentação adequados, vamos usar a API Object Detection do TensorFlow. Para instalá-la, vamos clonar o repositório.
Instalação da API Object Detection.
Agora, podemos importar as dependências que serão necessárias posteriormente.
Carregue os dados de mapas de rótulos (para plotagem)
Os mapas de rótulos fazem a correspondência entre números do índice e nomes de categorias para que, quando a rede de convolução previr 5
, saibamos que isso corresponde a airplane
(avião). Aqui, usamos funções utilitárias internas, mas qualquer função que retorne um dicionário mapeando inteiros em rótulos de strings apropriados funcionará.
Por questões de simplicidade, vamos carregar a partir do repositório usado para carregar a API Object Detection.
Crie um modelo de detecção e carregue os pesos do modelo pré-treinado
Aqui, vamos escolher qual modelo de detecção de objetos usaremos. Selecione a arquitetura, e ela será carregada automaticamente. Se você quiser alterar o modelo para testar outras arquiteturas posteriormente, basta mudar a próxima célula e executar as seguintes.
Dica: se você quiser ler mais detalhes sobre o modelo selecionado, pode acessar o link (identificador do modelo) e ler a documentação adicional no TF Hub. Após selecionar um modelo, você exibirá o identificador via print para facilitar.
Carregando o modelo selecionado a partir do TensorFlow Hub
Aqui, só precisamos do identificador do modelo que foi selecionado e usamos a biblioteca do TensorFlow Hub para carregá-lo na memória.
Carregando uma imagem
Vamos testar o modelo em uma imagem simples. Para ajudar, fornecemos uma lista de imagens de teste.
Veja abaixo alguns testes interessantes, se você tiver curiosidade.
Tente executar a inferência em suas próprias imagens. Basta fazer upload delas no Colab e carregar da mesma forma que na célula abaixo.
Modifique algumas imagens de entrada e verifique se a detecção ainda funciona. Veja alguns testes simples que você pode fazer: girar a imagem horizontalmente ou converter para escala de cinza (observe que ainda esperamos que a imagem de entrada tenha três canais).
Cuidado: ao usar imagens com um canal alfa, o modelo espera imagens com três canais, e o alfa será contabilizado como um quarto canal.
Faça a inferência
Para fazer a inferência, basta chamarmos o modelo do TF Hub carregado.
Veja o que você pode testar:
Exiba
result['detection_boxes']
via print e tente fazer a correspondência entre os locais das caixas e as caixas na imagem. Observe que as coordenadas são fornecidas de forma normalizada (isto é, no intervalo [0, 1]).Inspecione outras chaves de saída presentes no resultado. Confira a documentação completa na página de documentação dos modelos (basta acessar no navegador o identificador do modelo exibido via print anteriormente).
Visualização dos resultados
Aqui, vamos precisar da API Object Detection do TensorFlow para mostrar os quadrados do passo de inferência (e os pontos-chave, quando disponíveis).
Confira a documentação completa desse método aqui.
Aqui, você pode, por exemplo, definir min_score_thresh
como outros valores (entre 0 e 1) para permitir mais detecções ou para eliminar mais detecções.
[Opcional]
Entre os modelos de detecção de objetos disponíveis, temos o Mask R-CNN, cuja saída permite a segmentação de instâncias.
Para visualizá-la, vamos usar o mesmo método de antes, mas acrescentando um parâmetro adicional:instance_masks=output_dict.get('detection_masks_reframed', None)