Path: blob/master/site/pt-br/lite/tutorials/pose_classification.ipynb
25118 views
Copyright 2021 The TensorFlow Authors.
Classificação de poses humanas com o MoveNet e o TensorFlow Lite
Este notebook ensina a você como treinar um modelo de classificação de poses usando o MoveNet e o TensorFlow Lite. O resultado é um novo modelo do TensorFlow Lite que aceita a saída do modelo MoveNet como sua entrada e gera uma classificação da pose, como o nome de uma pose de yoga.
O procedimento neste notebook consiste em 3 partes:
Parte 1: pré-processe os dados de treinamento da classificação de poses em um arquivo CSV que especifica os landmarks (pontos-chave corporais) detectados pelo modelo MoveNet, além dos rótulos de pose de verdade absoluta.
Parte 2: crie e treine um modelo de classificação de poses que aceita coordenadas de landmarks do arquivo CSV como entrada e gera os rótulos previstos.
Parte 3: converta o modelo de classificação de poses para o TFLite.
Por padrão, este notebook usa um dataset de imagens com poses de yoga rotuladas, mas também incluímos uma seção na Parte 1 onde você pode fazer upload do seu próprio dataset de imagens de poses.
Preparação
Nesta seção, você importará as bibliotecas necessárias e definirá várias funções para pré-processar as imagens de treinamento em um arquivo CSV com as coordenadas dos landmarks e os rótulos de verdade absoluta.
Não acontece nada observável aqui, mas você pode expandir as células de código ocultas para ver a implementação de algumas funções que serão chamadas depois.
Se você só quiser criar o arquivo CSV sem saber todos os detalhes, basta executar esta seção e seguir para a Parte 1.
Código para executar a estimativa de pose usando o MoveNet
Parte 1: pré-processe as imagens de entrada
Como a entrada do nosso classificador de poses são os landmarks de saída do modelo MoveNet, precisamos gerar o dataset de treinamento ao executar imagens rotuladas através do MoveNet e depois capturar todos os dados de landmarks e rótulos de verdade absoluta em um arquivo CSV.
O dataset que fornecemos para este tutorial é um dataset de poses de yoga gerado por CG. Ele contém imagens de vários modelos gerados por CG fazendo 5 poses de yoga diferentes. O diretório já está dividido em datasets train
e test
.
Portanto, nesta seção, vamos baixar o dataset de yoga e executá-lo pelo MoveNet para que possamos capturar todos os landmarks em um arquivo CSV... No entanto, leva cerca de 15 minutos para alimentar nosso dataset de yoga ao MoveNet e gerar esse arquivo CSV. Então, como alternativa, você pode baixar um arquivo CSV pré-existente para o dataset de yoga ao definir o parâmetro is_skip_step_1
abaixo como True. Assim, você pulará este passo e baixará o mesmo arquivo CSV criado nesta etapa de pré-processamento.
Por outro lado, se você quiser treinar o classificador de poses com seu próprio dataset de imagens, precisará fazer upload das imagens e realizar este passo de pré-processamento (deixe is_skip_step_1
como False): siga as instruções abaixo para carregar seu próprio dataset de poses.
(Opcional) Faça upload do seu próprio dataset de poses
Se você quiser treinar o classificador de poses com suas próprias poses rotuladas (pode ser de qualquer tipo, e não só poses de yoga), siga estas etapas:
Defina a opção
use_custom_dataset
acima como True.Prepare um arquivo (ZIP, TAR etc.) que inclua uma pasta com seu dataset de imagens. Essa pasta precisa ter imagens classificadas das suas poses da maneira a seguir.
Se você já dividiu seu dataset em conjuntos de treinamento e teste, defina dataset_is_split
como True. Isto é, sua pasta de imagens precisa incluir os diretórios "train" e "teste" assim:
yoga_poses/ |__ train/ |__ downdog/ |______ 00000128.jpg |______ ... |__ test/ |__ downdog/ |______ 00000181.jpg |______ ...
yoga_poses/ |__ downdog/ |______ 00000128.jpg |______ 00000181.jpg |______ ... |__ goddess/ |______ 00000243.jpg |______ 00000306.jpg |______ ...
Clique na guia Files, "Arquivos", à esquerda (ícone de pasta) e depois em Upload to session storage, "Fazer upload no armazenamento da sessão", (ícone de arquivo).
Selecione seu arquivo e espere até que o upload seja concluído antes de continuar.
Edite o bloco de código a seguir para especificar o nome do arquivo e do diretório de imagens. (Por padrão, esperamos um arquivo ZIP, então você também precisará modificar essa parte se o seu arquivo estiver em outro formato.)
Agora, execute o resto do notebook.
Observação: se você estiver usando o split_into_train_test()
para dividir o dataset, ele espera que todas as imagens sejam PNG, JPEG ou BMP e ignora os outros tipos de arquivo.
Baixe o dataset de yoga
Faça o pré-processamento do dataset TRAIN
Faça o pré-processamento do dataset TEST
Parte 2: treine um modelo de classificação de poses que aceita coordenadas de landmarks como entrada e gera rótulos previstos
Você criará um modelo do TensorFlow que aceita coordenadas de landmark e prevê a classe da pose em que está a pessoa na imagem de entrada. O modelo consiste em dois submodelos:
O submodelo 1 calcula um embedding da pose (ou seja, um vetor de características) a partir das coordenadas de landmark detectadas.
O submodelo 2 alimenta o embedding da pose por várias camadas
Dense
para prever a classe dela.
Depois, você treinará o modelo com base no dataset pré-processado na parte 1.
(Opcional) Baixe o dataset pré-processado se você não executou a parte 1
Carregue os CSVs pré-processados nos datasets TRAIN
e TEST
Carregue e divida o dataset TRAIN
original em TRAIN
(85% dos dados) e VALIDATE
(os 15% restantes).
Defina funções para converter os landmarks das poses em um embedding (ou seja, um vetor de características) para a classificação
Em seguida, converta as coordenadas de landmark em um vetor de características ao:
Mover o centro da pose para a origem.
Dimensionar a pose para que o tamanho dela seja 1.
Achatar essas coordenadas em um vetor de características.
Em seguida, use esse vetor de características para treinar um classificador de poses baseado em rede neural.
Defina um modelo do Keras para a classificação de poses
Nosso modelo do Keras recebe os landmarks detectados da pose, calcula o embedding e prevê a classe dela.
Desenhe a matriz de confusão para entender melhor o desempenho do modelo
(Opcional) Investigue previsões incorretas
Você pode analisar as poses do dataset TEST
que foram previstas incorretamente para ver se a exatidão do modelo pode ser melhorada.
Observação: isso só funciona se você executou a etapa 1, porque precisa dos arquivos de imagem das poses na sua máquina local para exibi-los.
Parte 3: converta o modelo de classificação de poses para o TensorFlow Lite
Você converterá o modelo de classificação de poses do Keras para o formato do TensorFlow Lite para implantá-lo em aplicativos móveis, navegadores da Web e dispositivos de borda. Ao converter o modelo, você aplicará a quantização de intervalo dinâmico para reduzir o tamanho do modelo do TensorFlow Lite para classificação de poses em 4 vezes com uma perda de exatidão insignificante.
Observação: o TensorFlow Lite é compatível com vários esquemas de quantização. Veja a documentação se você tiver interesse em saber mais.
Em seguida, você escreverá o arquivo de rótulos com o mapeamento de índices de classes para nomes de classes legíveis por humanos.
Como você aplicou a quantização para reduzir o tamanho do modelo, vamos avaliar o modelo do TFLite quantizado para verificar se a queda na exatidão é aceitável.
Agora, você pode baixar o modelo do TFLite (pose_classifier.tflite
) e o arquivo de rótulos (pose_labels.txt
) para classificar as poses personalizadas. Veja o aplicativo de amostra Android e Python/Raspberry Pi para um exemplo completo de como usar o modelo de classificação de poses do TFLite.