Compreensão de Vídeo
O que “Compreensão de Vídeo” Significa
Compreensão de vídeo é o conjunto de métodos que extraem significado de vídeos — não apenas quais objetos estão presentes em um único quadro, mas como as coisas se movem, interagem e mudam ao longo do tempo. Em comparação com a visão em imagens estáticas (veja Tarefas Centrais), o vídeo adiciona uma dimensão crucial: o tempo.
A maioria dos sistemas de compreensão de vídeo é construída a partir de três capacidades que interagem entre si:
- Rastreamento (tracking): manter identidades consistentes de objetos ao longo dos quadros (por exemplo, “este é o mesmo carro enquanto se move”).
- Reconhecimento de ações (action recognition): classificar o que está acontecendo (por exemplo, “uma pessoa está derramando água”).
- Modelagem temporal (temporal modeling): representar e raciocinar sobre sequências (curtas ou longas) para capturar dinâmica, causalidade e contexto.
Aplicações práticas incluem vigilância e segurança, análise esportiva, direção autônoma, saúde, busca em vídeo, interação humano-computador e robótica.
Por que Vídeo é Mais Difícil do que Imagens
Vídeos não são “imagens com quadros extras”. Eles introduzem novos desafios:
- Ambiguidade temporal: muitas ações parecem idênticas em um único quadro (“em pé” vs “começando a correr”).
- Desfoque de movimento e movimento de câmera: o movimento altera a aparência e pode quebrar detectores/segmentadores.
- Oclusão e reaparecimento: objetos desaparecem atrás de outros e voltam.
- Dependências de longo alcance: entender um objetivo (“pegar as chaves”) pode exigir segundos de contexto.
- Computação e memória: processar 16–128 quadros por amostra pode ser caro.
- Custo de anotação: rotular segmentos temporais densos ou trilhas (tracks) é caro e ruidoso.
Um sistema robusto normalmente combina características fortes em nível de imagem (de Redes Neurais Convolucionais ou transformadores) com raciocínio temporal explícito.
Representando Vídeo para Aprendizado
Um vídeo pode ser representado em múltiplos níveis:
Quadros e clipes
A maioria dos modelos processa clipes: sequências curtas de quadros amostradas de um vídeo mais longo.
Estratégias comuns de amostragem:
- Amostragem uniforme: pegar quadros igualmente espaçados.
- Jitter temporal aleatório (random temporal jitter): amostrar um tempo inicial aleatório durante o treinamento para robustez.
- Teste com múltiplos clipes (multi-clip testing): fazer a média das previsões em vários clipes para melhor acurácia.
Sinais de movimento
Algumas tarefas precisam de movimento explicitamente:
- Fluxo óptico (optical flow): movimento denso por pixel entre quadros.
- Características de trajetória (trajectory features): movimento de pontos ou objetos rastreados.
- Diferenças entre quadros (frame differences): aproximação simples para sinais de movimento.
Características espaço-temporais
Em vez de tratar o tempo como uma reflexão tardia, modelos modernos aprendem representações espaço-temporais (spatiotemporal representations):
- convoluções 3D (espaço × tempo)
- convoluções temporais sobre características de quadros
- atenção ao longo do tempo (transformadores de vídeo)
Fundamentos de Rastreamento (Objeto Único e Múltiplos Objetos)
Rastreamento responde: Onde está o objeto agora, e é o mesmo objeto de antes?
Configurações do problema
- Rastreamento de Objeto Único (SOT, Single-Object Tracking): rastrear um alvo inicializado no primeiro quadro.
- Rastreamento de Múltiplos Objetos (MOT, Multi-Object Tracking): detectar e rastrear muitos objetos, mantendo IDs consistentes.
A maioria dos sistemas do mundo real (análise de tráfego, varejo, robótica) usa MOT.
Um pipeline canônico de MOT: “rastreamento por detecção (tracking-by-detection)”
A abordagem moderna mais comum é:
- Executar um detector de objetos (object detector) em cada quadro (veja Detecção de Objetos).
- Prever para onde cada trilha existente deve se mover em seguida (modelo de movimento).
- Associar novas detecções a trilhas existentes (associação de dados).
- Atualizar trilhas e gerenciar nascimentos/mortes (ciclo de vida da trilha).
Esse design modular é popular porque detectores fortes são amplamente disponíveis e fáceis de melhorar.
Modelos de movimento: do simples ao forte
Um modelo de movimento clássico é o filtro de Kalman (Kalman filter), que assume movimento (aproximadamente) linear com ruído Gaussiano. Ele prediz o próximo estado da caixa delimitadora de uma trilha (posição, velocidade) e depois corrige usando detecções associadas.
Isso funciona bem para muitas cenas (pedestres, veículos) e é extremamente eficiente.
Associação de dados: correspondência entre detecções e trilhas
Dadas posições previstas das trilhas e as detecções atuais, você resolve um problema de correspondência:
- O custo frequentemente combina:
- Sobreposição espacial (IoU entre caixas previstas e detectadas)
- Similaridade de aparência (distância de embedding para reidentificação)
- A atribuição é frequentemente resolvida com o algoritmo Húngaro (Hungarian algorithm) (casamento bipartido ótimo).
Rastreadores populares:
- SORT: Kalman + correspondência por IoU (rápido, sem modelo de aparência).
- DeepSORT: SORT + embeddings de aparência aprendidos (melhor estabilidade de ID).
- ByteTrack: associa detecções de alta e baixa confiança para reduzir correspondências perdidas.
Gerenciamento de trilhas (ciclos de vida)
As trilhas normalmente são:
- Inicializadas quando uma detecção não pode ser associada a uma trilha existente.
- Confirmadas após serem vistas por alguns quadros (reduz falsos positivos).
- Encerradas após ficarem ausentes por N quadros.
Exemplo prático: um loop simples de rastreamento (conceitual)
Abaixo está um pseudocódigo simplificado para rastreamento por detecção:
tracks = [] # list of active tracks with (state, id, age, last_seen, appearance)
for frame in video:
detections = detector(frame) # boxes + scores (+ optional embeddings)
# 1) predict
for trk in tracks:
trk.state = kalman_predict(trk.state)
# 2) compute cost matrix
C = cost_matrix(tracks, detections) # IoU + appearance distance
# 3) match
matches, unmatched_tracks, unmatched_dets = hungarian_assign(C, threshold=0.7)
# 4) update matched tracks
for (t_idx, d_idx) in matches:
tracks[t_idx].state = kalman_update(tracks[t_idx].state, detections[d_idx].box)
tracks[t_idx].last_seen = 0
# 5) age unmatched tracks
for t_idx in unmatched_tracks:
tracks[t_idx].last_seen += 1
# 6) start new tracks
for d_idx in unmatched_dets:
if detections[d_idx].score > 0.5:
tracks.append(init_track(detections[d_idx]))
# 7) remove dead tracks
tracks = [t for t in tracks if t.last_seen < 30]
Métricas de avaliação de rastreamento (o que “bom” significa)
Qualidade de rastreamento não é apenas qualidade de detecção. Métricas comuns incluem:
- MOTA: combina falsos positivos, falsos negativos e trocas de ID.
- IDF1: F1 na preservação de identidade (importante para rastreamento estável).
- HOTA: equilibra qualidade de detecção e de associação.
Para princípios gerais de avaliação, veja Avaliação para Visão.
Fundamentos de Reconhecimento de Ações
Reconhecimento de ações responde: O que está acontecendo neste clipe?
Taxonomia de tarefas de compreensão de ações
- Classificação de ações (action classification): um rótulo para um clipe (por exemplo, “pulando”).
- Localização temporal de ações (temporal action localization): encontrar quando uma ação ocorre em um vídeo não recortado.
- Detecção de ações espaço-temporais (spatiotemporal action detection): encontrar quem está fazendo o quê, onde e quando (caixas + rótulos de ação ao longo do tempo).
- Segmentação de ações (action segmentation): rótulos de ação por quadro (atividades de granularidade fina).
Por que movimento importa (mas nem sempre)
Algumas ações são reconhecíveis pela aparência (“tocando guitarra”), enquanto outras exigem movimento (“acenando”, “arremessando”, “abrindo”).
Um bom modelo de ações precisa aprender ambos:
- Sinais espaciais (objetos, cenas, pessoas)
- Sinais temporais (padrões de movimento e ordenação)
Abordagens clássicas: redes de dois fluxos
Historicamente, um design comum usava duas entradas:
- Quadros RGB (fluxo de aparência)
- Fluxo óptico (fluxo de movimento)
O modelo funde os dois fluxos. Isso ajudava quando arquiteturas iniciais tinham dificuldade de aprender movimento implicitamente. Hoje, muitos modelos aprendem movimento apenas a partir de RGB, mas o fluxo óptico ainda pode ajudar em cenários com poucos dados ou de granularidade fina.
Arquiteturas modernas para reconhecimento de ações
CNNs 3D (convoluções espaço-temporais)
Convoluções 3D estendem CNNs 2D ao convoluir sobre o tempo além do espaço. Exemplos incluem C3D e designs no estilo I3D.
Prós:
- Forte modelagem de movimento local
- Extensão direta de CNNs
Contras:
- Computacionalmente pesado
- Modelagem limitada de longo alcance, a menos que seja profundo/largo ou combinado com módulos temporais
Modelagem temporal sobre características 2D (pensamento no estilo TSN/TQN)
Um padrão prático:
- Extrair características por quadro com uma espinha dorsal 2D (frequentemente pré-treinada em imagens).
- Agregar ao longo do tempo com:
- average pooling
- convolução temporal
- atenção / transformador
Isso pode ser eficiente em computação e fácil de escalar.
Transformadores de Vídeo (atenção sobre espaço e tempo)
Transformadores aplicam autoatenção (self-attention) sobre tokens espaço-temporais. Muitos sistemas usam:
- embeddings de patches por quadro
- atenção fatorada (espaço e depois tempo)
- embeddings de tubelets (patches 3D)
Prós:
- Dependências de longo alcance
- Modelagem flexível da ordem temporal
Contras:
- O custo de memória pode ser alto sem atenção eficiente
Contexto: Arquitetura Transformer, Mecanismos de Atenção.
Exemplo prático: amostrando clipes para treinamento
Um detalhe pequeno, mas crucial no reconhecimento de ações, é como você amostra quadros. Aqui vai uma estratégia comum de “uniforme com jitter”:
import numpy as np
def sample_clip(num_frames, clip_len=16, stride=4, training=True):
# clip covers clip_len frames spaced by `stride`
clip_span = (clip_len - 1) * stride + 1
if num_frames <= clip_span:
start = 0
else:
start = np.random.randint(0, num_frames - clip_span) if training else (num_frames - clip_span) // 2
idx = [start + i * stride for i in range(clip_len)]
idx = [min(i, num_frames - 1) for i in idx]
return idx
Essa escolha simples afeta acurácia, robustez e reprodutibilidade.
Fundamentos de Modelagem Temporal (o núcleo de “aprendizado de sequência”)
Modelagem temporal é a base compartilhada por trás de rastreamento, reconhecimento de ações e localização.
Conceitos-chave
Campo receptivo temporal (temporal receptive field)
Quantos quadros podem influenciar uma previsão?
- CNNs 3D: o campo receptivo cresce com a profundidade e os tamanhos de kernel.
- redes convolucionais temporais: cresce com tamanho do kernel/dilatação.
- transformadores: em princípio podem atender a todos os tokens (mas podem ser restringidos por janelas).
Ações longas (por exemplo, “cozinhar macarrão”) exigem um campo receptivo temporal maior do que ações curtas (“bater palmas”).
A ordem importa
Algumas ações são definidas pela ordem temporal:
- “sentar” vs “levantar”
- “abrir” vs “fechar” Um modelo precisa de codificação posicional ou temporal para não tratar quadros como um conjunto sem ordem.
Transformadores frequentemente adicionam embeddings posicionais (positional embeddings); CNNs temporais codificam ordem inerentemente pela direção e estrutura da convolução.
Pooling temporal vs raciocínio temporal
- Pooling (média/máximo) é barato e pode funcionar surpreendentemente bem quando as ações são óbvias.
- Raciocínio (atenção, recorrência, modelos estruturados) é necessário para:
- ações sutis
- atividades longas
- eventos em múltiplas etapas
- interpretação causal
Modelos temporais que você verá na prática
Modelos recorrentes (RNN/LSTM/GRU)
RNNs processam quadros sequencialmente e mantêm um estado oculto.
Prós:
- Natural para streaming
- Compacto
Contras:
- Mais difícil de treinar em escala do que modelos feed-forward
- Pode ter dificuldade com dependências muito longas
Contexto: Redes Neurais Recorrentes.
Redes Convolucionais Temporais (TCN, Temporal Convolutional Networks)
TCNs aplicam convoluções 1D ao longo do tempo sobre características por quadro, frequentemente com dilatação para aumentar o contexto.
Prós:
- Paralelizável
- Forte para previsão por quadro (segmentação)
Transformadores / atenção
Autoatenção pode conectar quadros distantes diretamente, o que é poderoso para dependências de longo alcance e interações multiobjeto.
Truques práticos comuns:
- atenção fatorada (espaço e depois tempo)
- atenção esparsa/em janelas
- tokens de memória ou pooling temporal hierárquico
Localização Espaço-Temporal: “Quando” e “Onde” Juntos
Muitos sistemas reais precisam de mais do que rótulos em nível de clipe.
Localização temporal de ações
Entrada: vídeo não recortado. Saída: segmentos ([t_{start}, t_{end}]) mais rótulos.
Pipeline típico:
- Extrair características de clipes ao longo de uma janela deslizante.
- Predizer “propostas” de ação (segmentos candidatos).
- Classificar/refinar propostas.
Detecção de ações espaço-temporais
Entrada: vídeo. Saída: caixas delimitadoras vinculadas ao longo dos quadros + rótulos de ação.
Isso combina:
- detecção (por quadro)
- vinculação/rastreamento (associar caixas ao longo do tempo)
- classificação de ação (por trilha/segmento)
Isso é comum em esportes (quem fez o quê) e vigilância (pessoa correndo, brigando, caindo).
Conjuntos de Dados (e o que eles ensinam)
Diferentes conjuntos de dados enfatizam diferentes desafios:
- Kinetics: clipes recortados em grande escala para classificação de ações (bom para pré-treinamento).
- Something-Something: enfatiza raciocínio temporal e interações com objetos.
- AVA: detecção de ações espaço-temporais com caixas de pessoas e múltiplos rótulos.
- MOT17/MOT20: benchmarks de rastreamento de múltiplos objetos para pedestres.
- YouTube-VIS: segmentação de instâncias em vídeo (rastreamento + máscaras).
Um padrão prático é pré-treinar (pretrain) em grandes conjuntos de dados de classificação e depois fazer ajuste fino para localização ou tarefas específicas de domínio.
Aprendizado Auto-Supervisionado e Fracamente Supervisionado para Vídeo
Como rotular vídeo é caro, muitos sistemas usam pré-treinamento auto-supervisionado:
- aprendizado contrastivo (contrastive learning) ao longo do tempo (mesmo clipe vs clipe diferente)
- modelagem mascarada (masked modeling) (predizer patches/tokens mascarados ao longo do tempo)
- predição de ordem temporal (temporal order prediction) ou predição de quadros futuros (future frame prediction) (menos comum agora, mas conceitualmente útil)
Esses métodos buscam aprender representações que transferem bem para rastreamento e tarefas de ação. Veja Aprendizado Auto-Supervisionado e Aprendizado Contrastivo.
Aplicações Práticas
Direção autônoma e robótica
- Rastrear veículos/pedestres/ciclistas
- Predizer movimento e intenção
- Reconhecer comportamentos (por exemplo, “pedestre atravessando”)
Frequentemente requer inferência em streaming (streaming inference) e baixa latência (low latency), favorecendo rastreadores e modelos temporais eficientes.
Análise esportiva
- Rastrear jogadores e bola
- Detectar eventos (chutes, passes, faltas)
- Resumir melhores momentos
Aqui, preservação de identidade (IDF1) e temporização fina de eventos importam.
Varejo e segurança
- Rastreamento de pessoas e reidentificação entre câmeras
- Detecção de atividades (detecção de quedas, permanência prolongada)
- Estimativa de filas
Esses sistemas precisam lidar com oclusões, cenas lotadas e mudanças de domínio.
Compreensão de mídia
- Moderação de conteúdo
- Busca em vídeo (“encontre clipes em que uma pessoa está cozinhando”)
- Marcação e sumarização automáticas
Frequentemente combina compreensão de vídeo com linguagem via Multimodal (Modelos Visão-Linguagem).
Considerações de Engenharia e Boas Práticas
Comece com uma definição clara da tarefa
“Compreensão de vídeo” pode significar muitas saídas:
- rótulo por clipe
- rótulo por quadro
- trilhas + IDs
- segmentos + rótulos
- máscaras densas + rastreamento
Sua escolha de modelo e avaliação depende fortemente disso.
Use baselines fortes de imagem
Muitas falhas vêm de representações fracas por quadro. Uma boa prática:
- garantir primeiro a qualidade de detecção/segmentação por quadro
- depois adicionar componentes temporais
Veja Fundamentos de Imagem para padrões de pré-processamento e aumento de dados.
Não ignore o pipeline de dados
E/S de vídeo frequentemente domina o tempo de execução:
- decodifique apenas os quadros necessários
- faça cache de clipes decodificados, se possível
- tenha cuidado com suposições de taxa de quadros (mismatch de FPS pode quebrar a lógica temporal)
Aumentos de dados comuns para vídeo
- recorte/redimensionamento aleatório e jitter de cor (espacial)
- jitter temporal (tempo inicial aleatório)
- remoção aleatória de quadros (robustez)
- variantes de mixup/cutmix adaptadas a clipes (use com cuidado em tarefas de localização)
Avalie com as métricas certas
Um modelo pode melhorar a acurácia de classificação e piorar em:
- temporização (localização)
- estabilidade de identidade (rastreamento)
- classes raras (conjuntos desbalanceados)
Siga o protocolo cuidadosamente; pequenas diferenças de avaliação podem induzir conclusões erradas (veja Avaliação para Visão).
Designs Típicos de Sistemas (Juntando Tudo)
Design A: Rastreamento de múltiplos objetos em tempo real para uma câmera
- Detector: leve (por exemplo, estilo YOLO)
- Rastreador: associação no estilo SORT/ByteTrack
- Opcional: embeddings de aparência para cenas difíceis
- Saída: trilhas (ID + caixa) por quadro
Isso é amplamente implantado porque é robusto, interpretável e rápido.
Design B: Reconhecimento de ações em nível de clipe para etiquetagem de vídeo
- Amostrar 16–32 quadros por clipe
- Backbone: CNN 3D ou transformador de vídeo
- Treinar com aumento/teste de múltiplos clipes
- Saída: top-k ações por vídeo
Design C: “Quem fez o quê” em esportes
- Detectar pessoas em cada quadro
- Rastreá-las ao longo do tempo
- Agregar (pool) características por trilha ao longo do tempo
- Classificar ações por trilha (detecção espaço-temporal)
Essa composição espelha como humanos raciocinam: identificar atores, segui-los e então interpretar o movimento.
Direções Emergentes (O que é Atual)
- Modelos fundamentais de vídeo (foundation video models): pré-treinamento em larga escala em enormes corpora de vídeo com arquiteturas baseadas em transformadores.
- Modelagem temporal de longo contexto (long-context temporal modeling): atenção eficiente e representações hierárquicas para vídeos de minutos.
- Percepção unificada (unified perception): modelos que fazem detecção, rastreamento e compreensão de ações conjuntamente, de ponta a ponta.
- Ancoragem multimodal (multimodal grounding): alinhar vídeo com texto/áudio para busca, sumarização e seguimento de instruções (veja Multimodal (Modelos Visão-Linguagem)).
- Melhor avaliação (better evaluation): mais ênfase em robustez (mudança de domínio), calibração e restrições de tempo real — não apenas acurácia em benchmarks.
Resumo
Compreensão de vídeo estende a visão computacional ao domínio do tempo. Os blocos de construção centrais são:
- Rastreamento: estimar trajetórias de objetos e manter identidades via modelos de movimento + associação de dados.
- Reconhecimento de ações: classificar eventos usando características espaço-temporais (CNNs 3D, convoluções temporais, transformadores).
- Modelagem temporal: capturar ordem, dependências de longo alcance e contexto usando pooling, convoluções, recorrência ou atenção.
Na prática, o sucesso depende tanto de pipelines de dados, estratégia de amostragem, protocolo de avaliação e design de sistema quanto da arquitetura do modelo.