Classificação de vídeo

A classificação de vídeo é a tarefa de aprendizado de máquina de identificar o que um vídeo representa. Um modelo de classificação de vídeo é treinado em um conjunto de dados de vídeo que contém um conjunto de classes exclusivas, como ações ou movimentos diferentes. O modelo recebe quadros de vídeo como entrada e emite a probabilidade de cada classe ser representada no vídeo.

Os modelos de classificação de vídeo e classificação de imagem usam imagens como entradas para prever as probabilidades dessas imagens pertencentes a classes predefinidas. No entanto, um modelo de classificação de vídeo também processa as relações espaço-temporais entre quadros adjacentes para reconhecer as ações em um vídeo.

Por exemplo, um modelo de reconhecimento de ação de vídeo pode ser treinado para identificar ações humanas como correr, bater palmas e acenar. A imagem a seguir mostra a saída de um modelo de classificação de vídeo no Android.

Captura de tela do exemplo do Android

iniciar

Se você estiver usando uma plataforma diferente do Android ou Raspberry Pi, ou se já estiver familiarizado com as APIs do TensorFlow Lite , baixe o modelo de classificação de vídeo inicial e os arquivos de suporte. Você também pode criar seu próprio pipeline de inferência personalizado usando a Biblioteca de suporte do TensorFlow Lite .

Baixe o modelo inicial com metadados

Se você é novo no TensorFlow Lite e está trabalhando com Android ou Raspberry Pi, explore os aplicativos de exemplo a seguir para começar.

Android

O aplicativo Android usa a câmera traseira do dispositivo para classificação contínua de vídeo. A inferência é realizada usando a API Java do TensorFlow Lite . O aplicativo de demonstração classifica os quadros e exibe as classificações previstas em tempo real.

Exemplo Android

Raspberry Pi

O exemplo do Raspberry Pi usa o TensorFlow Lite com Python para realizar a classificação de vídeo contínua. Conecte o Raspberry Pi a uma câmera, como a Pi Camera, para realizar a classificação de vídeo em tempo real. Para visualizar os resultados da câmera, conecte um monitor ao Raspberry Pi e use SSH para acessar o shell Pi (para evitar conectar um teclado ao Pi).

Antes de começar, configure seu Raspberry Pi com o Raspberry Pi OS (de preferência atualizado para o Buster).

Exemplo de framboesa Pi

Descrição do modelo

Mobile Video Networks ( MoViNets ) são uma família de modelos eficientes de classificação de vídeo otimizados para dispositivos móveis. Os MoViNets demonstram precisão e eficiência de última geração em vários conjuntos de dados de reconhecimento de ação de vídeo em grande escala, tornando-os adequados para tarefas de reconhecimento de ação de vídeo .

Existem três variantes do modelo MoviNet para TensorFlow Lite: MoviNet-A0 , MoviNet-A1 e MoviNet-A2 . Essas variantes foram treinadas com o conjunto de dados Kinetics-600 para reconhecer 600 ações humanas diferentes. MoviNet-A0 é o menor, mais rápido e menos preciso. MoviNet-A2 é o maior, mais lento e mais preciso. MoviNet-A1 é um compromisso entre A0 e A2.

Como funciona

Durante o treinamento, um modelo de classificação de vídeo é fornecido com os vídeos e seus rótulos associados. Cada rótulo é o nome de um conceito distinto, ou classe, que o modelo aprenderá a reconhecer. Para reconhecimento de ação de vídeo , os vídeos serão de ações humanas e os rótulos serão a ação associada.

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. Este processo é chamado de inferência . Você também pode usar o aprendizado de transferência para identificar novas classes de vídeos usando um modelo pré-existente.

O modelo é um modelo de streaming que recebe vídeo contínuo e responde em tempo real. À medida que o modelo recebe um fluxo de vídeo, ele identifica se alguma das classes do conjunto de dados de treinamento está representada no vídeo. Para cada quadro, o modelo retorna essas classes, juntamente com a probabilidade de que o vídeo represente a classe. Um exemplo de saída em um determinado momento pode ter a seguinte aparência:

Ação Probabilidade
dança quadrada 0,02
agulha de enfiar 0,08
dedos girando 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 denota a probabilidade de que a ação esteja sendo exibida no vídeo.

Entradas do modelo

O modelo aceita um fluxo de quadros de vídeo RGB como entrada. O tamanho do vídeo de entrada é flexível, mas idealmente corresponde à resolução de treinamento do modelo e à taxa de quadros:

  • MoviNet-A0 : 172 x 172 a 5 fps
  • MoviNet-A1 : 172 x 172 a 5 fps
  • MoviNet-A1 : 224 x 224 a 5 fps

Espera-se que os vídeos de entrada tenham valores de cor dentro do intervalo de 0 e 1, seguindo as convenções comuns de entrada de imagem .

Internamente, o modelo também analisa o contexto de cada frame usando informações coletadas em frames anteriores. Isso é feito pegando 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 logit que representam a previsão para cada classe. Essas pontuações podem ser convertidas em probabilidades usando a função softmax ( tf.nn.softmax ).

    exp_logits = np.exp(np.squeeze(logits, axis=0))
    probabilities = exp_logits / np.sum(exp_logits)

Internamente, a saída do modelo também inclui estados internos do modelo e os alimenta de volta ao modelo para os próximos quadros.

Referências de desempenho

Os números de benchmark de desempenho são gerados com a ferramenta de benchmarking . MoviNets suportam apenas CPU.

O desempenho do modelo é medido pela quantidade de tempo que leva para um modelo executar inferência em uma determinada peça de hardware. Um tempo menor implica um modelo mais rápido. A precisão é medida pela frequência com que o modelo classifica corretamente uma classe em um vídeo.

Nome do modelo Tamanho Precisão * Dispositivo CPU **
MoviNet-A0 (quantizado inteiro) 3,1 MB 65% Pixel 4 5 ms
Pixel 3 11 ms
MoviNet-A1 (quantizado inteiro) 4,5 MB 70% Pixel 4 8 ms
Pixel 3 19 ms
MoviNet-A2 (quantizado inteiro) 5,1 MB 72% Pixel 4 15 ms
Pixel 3 36 ms

* Precisão top-1 medida no conjunto de dados Kinetics-600 .

** Latência medida ao executar em CPU com 1 thread.

Personalização do modelo

Os modelos pré-treinados são treinados para reconhecer 600 ações humanas do conjunto de dados Kinetics-600 . Você também pode usar o aprendizado de transferência para treinar novamente um modelo para reconhecer ações humanas que não estão no conjunto 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.

Para obter mais informações sobre modelos de ajuste fino em dados personalizados, consulte o repositório MoViNets e o tutorial MoViNets .

Leitura adicional e recursos

Use os seguintes recursos para saber mais sobre os conceitos discutidos nesta página: