Path: blob/master/site/pt-br/lite/examples/video_classification/overview.md
25118 views
Classificação de vídeo
Classificação de vídeo é a tarefa de aprendizado de máquina para identificar o que um vídeo representa. Um modelo de classificação de vídeo é treinado com um dataset de vídeos que contém um conjunto de classes únicas, como ações ou movimentos diferentes. O modelo recebe quadros de vídeo como entrada e gera como saída a probabilidade de cada classe estar representada no vídeo.
Os modelos de classificação de vídeo e de classificação de imagem usam imagens como entrada para prever as probabilidades de elas pertencerem a classes predefinidas. Entretanto, um modelo de classificação de vídeo também processa as relações espaciais e temporais entre quadros adjacentes para reconhecer ações em um vídeo.
Por exemplo, um modelo de reconhecimento de ações em vídeos pode ser treinado para identificar ações humanas, como correr, bater palmas ou acenar. A imagem abaixo mostra a saída de um modelo de classificação de vídeo no Android.
Como começar
Se você estiver usando outra plataforma que não o Android ou Raspberry Pi ou se já conhecer bem as APIs do TensorFlow Lite, baixe o modelo inicial de classificação de vídeo e os arquivos de suporte. Você também pode criar seu próprio pipeline de inferência personalizado usando a TensorFlow Lite Support Library (biblioteca de suporte do TensorFlow Lite).
Baixe o modelo inicial com metadados
Se você estiver apenas começando a usar o TensorFlow Lite e estiver trabalhando com Android ou Raspberry PI, confira os exemplos de aplicativo abaixo que podem te ajudar a começar.
Android
O aplicativo para Android usa a câmera traseira do Android para classificação contínua de vídeo. A inferência é feita usando a TensorFlow Lite Java API (API Java do TensorFlow Lite). O aplicativo de demonstração classifica quadros e exibe as classificações previstas em tempo real.
Raspberry Pi
O exemplo de Raspberry usa o TensorFlow Lite com o Python para fazer classificação contínua de vídeo. Conecte o Raspberry Pi a uma câmera, como a Pi Camera, para fazer classificação de vídeo em tempo real. Para ver os resultados da câmera, conecte um monitor ao Raspberry Pi e use SSH para acessar o shell do Pi (para evitar conectar um teclado ao Pi).
Antes de começar, configure seu Raspberry Pi com o Raspberry Pi OS (atualizado para o Buster, preferencialmente).
Descrição do modelo
As Redes de Vídeo Móveis (MoViNets) são uma família de modelos eficientes de classificação de vídeo otimizados para dispositivos móveis. As MoViNets têm exatidão e eficiência de última geração em diversos datasets de reconhecimento de ações em vídeos, sendo, portanto, muito adequadas para tarefas de reconhecimento de ações em vídeos.
Existem três variantes do modelo MoviNet para o TensorFlow Lite: MoviNet-A0, MoviNet-A1 e MoviNet-A2. Essas variantes foram treinadas com o dataset Kinetics-600 para reconhecer 600 ações humanas diferentes. MoviNet-A0 é a variante menor, mais rápida e menos exata. MoviNet-A2 é a variante maior, mais lenta e mais exata. MoviNet-A1 fica entre a A0 e a A2.
Como funciona
Durante o treinamento, um modelo de classificação de vídeo recebe vídeos e seus respectivos rótulos. Cada rótulo é o nome de um conceito distinto, ou classe, que o modelo aprenderá a reconhecer. Para reconhecimento de ações em vídeos, os vídeos são de ações humanas, e os rótulos são suas respectivas ações.
O modelo de classificação de vídeo pode aprender a prever se novos vídeos pertencem a alguma das classes fornecidas durante o treinamento. Esse processo é chamado de inferência. Você também pode usar o aprendizado por transferência para identificar novas classes de vídeos usando um modelo preexistente.
É um modelo de streaming que recebe um vídeo continuamente e responde em tempo real. À medida que o modelo recebe um streaming de vídeo, identifica se alguma das classes do dataset de treinamento está representada nele. Para cada quadro, o modelo retorna essas classes, junto com a probabilidade de o vídeo representar a classe. Confira abaixo um exemplo de saída em um determinado momento:
Ação | Probabilidade |
---|---|
Dançando quadrilha | 0,02 |
Enfiando uma agulha | 0,08 |
Girando os dedos | 0,23 |
Acenando com a mão | 0,67 |
Cada ação na saída corresponde a um rótulo nos dados de treinamento. A probabilidade indica a chance de a ação estar sendo exibida no vídeo.
Entradas do modelo
O modelo recebe um streaming de quadros de vídeo RGB como entrada. O tamanho do vídeo de entrada é flexível, mas, idealmente, deve coincidir com a resolução e a taxa de quadros usadas no treinamento do modelo:
MoviNet-A0: 172 x 172 a 5 qps
MoviNet-A1: 172 x 172 a 5 qps
MoviNet-A2: 224 x 224 a 5 qps
Espera-se que os vídeos de entrada tenham valores de cores no intervalo de 0 a 1, seguindo as convenções comuns de imagens usadas como entrada.
Internamente, o modelo também analisa o contexto de cada quadro usando as informações coletadas nos quadros anteriores. Isso é feito pegando os estados internos da saída do modelo e alimentando-os de volta no modelo para os próximos quadros.
Saídas do modelo
O modelo retorna uma série de rótulos e suas pontuações correspondentes. As pontuações são valores logits que representam a previsão para cada classe. Essas pontuações podem ser convertidas em probabilidades usando a função softmax (tf.nn.softmax
).
Internamente, a saída do modelo também inclui os estados internos do modelo e alimenta-os de volta no modelo para os próximos quadros.
Referenciais de desempenho
Os referenciais de desempenho são gerados com a ferramenta de referencial. As MoviNets têm suporte somente a CPUs.
O desempenho do modelo é mensurado pela quantidade de tempo que demora para executar a inferência em um determinado hardware. Uma quantidade de tempo menor implica um modelo mais rápido. A exatidão é mensurada pela frequência de classificação correta de uma classe no vídeo.
Nome do modelo | Tamanho | Exatidão* | Dispositivo | CPU** |
---|---|---|---|---|
MoviNet-A0 (quantizado em inteiro) | 3,1 MB | 65% | Pixel 4 | 5 ms |
Pixel 3 | 11 ms | |||
MoviNet-A1 (quantizado em inteiro) | 4,5 MB | 70% | Pixel 4 | 8 ms |
Pixel 3 | 19 ms | |||
MoviNet-A2 (quantizado em inteiro) | 5,1 MB | 72% | Pixel 4 | 15 ms |
Pixel 3 | 36 ms |
Exatidão Top-1 mensurada para o dataset Kinetics-600.
** Latência mensurada ao executar em uma CPU com 1 thread.
Personalização do modelo
Os modelos pré-treinados foram treinados para reconhecer 600 ações humanas do dataset Kinetics-600. Você pode usar o aprendizado por transferência para treinar novamente um modelo para reconhecer ações humanas que não estão presentes no dataset original. Para fazer isso, você precisa de um conjunto de vídeos de treinamento para cada uma das novas ações que deseja incorporar ao modelo.
Confira mais informações sobre como fazer ajustes finos com dados personalizados no repositório das MoViNets e no tutorial sobre MoViNets.
Leituras e recursos adicionais
Confira os recursos abaixo para saber mais sobre os conceitos discutidos nesta página.