Estimativa de Pose

Visão geral

Estimativa de pose (pose estimation) é a tarefa de inferir a posição e a orientação de algo a partir de observações visuais (imagens ou vídeo). Dependendo do domínio, “pose” pode significar:

  • Uma pose da câmera (camera pose): onde a câmera está no mundo e como ela está orientada (tipicamente uma transformação rígida de 6 graus de liberdade (6-DoF)).
  • Uma pose do objeto (object pose): a rotação e a translação 3D de um objeto rígido em relação à câmera (também frequentemente 6-DoF).
  • Uma pose humana/corporal (human/body pose): a configuração de um esqueleto articulado (por exemplo, localizações de articulações 2D/3D e às vezes ângulos articulares).

A estimativa de pose é um bloco fundamental em pipelines de visão 3D (3D vision pipelines) como reconstrução, localização e mapeamento simultâneos (Simultaneous Localization and Mapping, SLAM) e renderização neural (neural rendering), porque muitas tarefas a jusante precisam de um mapeamento consistente entre geometria 3D (3D geometry) e pixels 2D (2D pixels).

O que “pose” significa matematicamente

Referenciais de coordenadas (coordinate frames) e SE(3)

Uma representação comum para pose rígida é uma rotação e uma translação 3D:

  • Rotação: ( \mathbf{R} \in SO(3) )
  • Translação: ( \mathbf{t} \in \mathbb{R}^3 )

Juntas, elas definem uma transformação em SE(3):

[ \mathbf{X}{cam} = \mathbf{R},\mathbf{X}{world} + \mathbf{t} ]

Em coordenadas homogêneas (homogeneous coordinates):

\[ \begin{bmatrix} \mathbf{X}_{cam} \\ 1 \end{bmatrix}

\underbrace{ \begin{bmatrix} \mathbf{R} & \mathbf{t}\ \mathbf{0}^T & 1 \end{bmatrix}}{\mathbf{T}{cw}} \begin{bmatrix} \mathbf{X}_{world}\ 1 \end{bmatrix} ]

Onde (\mathbf{T}_{cw}) é a transformação câmera-a-partir-do-mundo (as convenções variam).

Projeção (projection): de 3D para 2D

Dados os parâmetros intrínsecos (intrinsics) da câmera ( \mathbf{K} ) (veja Calibração de Câmera), um ponto 3D em coordenadas da câmera é projetado para coordenadas de pixel:

[ \mathbf{x} \sim \mathbf{K},[\mathbf{I}|\mathbf{0}],\mathbf{X}_{cam} ]

Com divisão em perspectiva para obter ((u,v)). Muitos métodos de pose se resumem a inverter esse mapeamento usando restrições de correspondências (correspondences).

Representações de rotação (rotation representations) (considerações práticas)

Rotações podem ser representadas como:

  • Ângulos de Euler (Euler angles) (compactos, mas podem sofrer gimbal lock)
  • Eixo-ângulo / coordenadas exponenciais (axis-angle / exponential coordinates) (comuns em otimização)
  • Quaternions (quaternions) (estáveis, mas requerem normalização)
  • Representações contínuas 6D (6D continuous representations) (alternativas mais adequadas a redes neurais que reduzem descontinuidades)

Para sistemas de aprendizado, a escolha da representação afeta estabilidade e precisão durante treinamento e inferência.

Configurações comuns do problema

1) Estimativa de pose humana (human pose estimation)

As saídas frequentemente incluem:

  • Pontos-chave 2D (2D keypoints) (por exemplo, 17 articulações COCO): ((u_i, v_i))
  • Articulações 3D (3D joints): ((x_i, y_i, z_i)) em coordenadas da câmera ou relativas à raiz
  • Às vezes uma pose de modelo corporal (body model pose) completa (por exemplo, ângulos articulares + parâmetros de forma)

Subproblemas típicos:

  • Uma pessoa vs múltiplas pessoas
  • Top-down (top-down) (detectar pessoa → estimar pose por recorte) vs bottom-up (bottom-up) (detectar todos os pontos-chave → agrupá-los)
  • Monocular (monocular) vs multivista (multi-view) vs RGB-D
  • Imagem estática vs vídeo (suavização temporal (temporal smoothing) e rastreamento (tracking))

A pose humana é desafiadora devido a auto-oclusão, encurtamento de perspectiva (foreshortening), variação de vestuário e ambiguidade de profundidade em imagens monoculares.

2) Estimativa de pose de objeto 6D (6D object pose estimation) (objetos rígidos)

Objetivo: estimar ((\mathbf{R}, \mathbf{t})) de uma instância conhecida de objeto (frequentemente a partir de um modelo CAD), ou às vezes pose em nível de categoria.

Saídas comuns:

  • Pontos-chave 2D (cantos projetados / pontos-chave semânticos)
  • Rotação + translação 3D
  • Correspondências densas ou coordenadas do objeto por pixel (regressão de coordenadas do objeto (object coordinate regression))

Esse cenário é central em robótica (preensão), AR (ancoragem) e inspeção industrial.

3) Estimativa de pose da câmera (camera pose estimation)

A pose da câmera pode ser estimada:

  • Relativa (entre dois quadros): odometria visual (visual odometry)
  • Absoluta (em um mapa conhecido): localização
  • Conjuntamente com a estrutura: estrutura a partir do movimento (Structure-from-Motion, SfM)

Pipelines clássicos combinam correspondência de características + geometria + otimização (veja Ajuste de Feixe). Abordagens baseadas em aprendizado podem regredir a pose diretamente ou aprender componentes (características, correspondência, profundidade) usados em solucionadores geométricos.

Abordagens centrais

Métodos de estimativa de pose frequentemente combinam aprendizado (para correspondências robustas) com geometria (para pose fisicamente consistente).

A) Mapas de calor de pontos-chave (keypoint heatmaps) (especialmente para pose humana)

Uma abordagem dominante para localizar pontos-chave 2D é a predição de mapas de calor (heatmap prediction):

  1. Uma rede base (backbone) (frequentemente um modelo baseado em Redes Neurais Convolucionais (Convolutional Neural Networks) ou em Arquitetura Transformer (Transformer Architecture)) produz (K) mapas de calor, um por ponto-chave.
  2. A localização do ponto-chave é extraída por:
    • Máximo do argumento (argmax) (simples, mas não diferenciável), ou
    • Argmax suave (soft-argmax) / regressão integral (integral regression) (diferenciável, precisão subpixel)

O treinamento tipicamente usa erro quadrático médio (Mean Squared Error, MSE) ou perdas do tipo entropia cruzada (cross-entropy) comparando mapas de calor previstos com Gaussian blobs centrados nos pontos-chave de verdade-terreno.

Por que mapas de calor funcionam bem

  • Eles preservam a estrutura espacial e permitem incerteza multimodal (por exemplo, ambiguidade esquerda/direita).
  • São robustos para pontos ocluídos, onde a rede pode produzir uma probabilidade difusa.

Esboço de argmax suave (soft-argmax) (pseudocódigo no estilo PyTorch)

# heatmaps: (B, K, H, W)
p = heatmaps.flatten(-2).softmax(dim=-1).view(B, K, H, W)

xs = torch.linspace(0, W - 1, W, device=p.device)
ys = torch.linspace(0, H - 1, H, device=p.device)

x = (p.sum(dim=2) * xs).sum(dim=-1)  # (B, K)
y = (p.sum(dim=3) * ys).sum(dim=-1)  # (B, K)
keypoints = torch.stack([x, y], dim=-1)  # (B, K, 2)

B) Regressão direta (direct regression) (coordenadas ou parâmetros de pose)

Em vez de mapas de calor, alguns modelos fazem regressão de:

  • Coordenadas de pontos-chave 2D diretamente
  • Articulações 3D diretamente
  • Parâmetros de pose do objeto (quaternion + translação, ou representação 6D + translação)

A regressão direta pode ser mais simples e rápida, mas frequentemente é menos precisa do que mapas de calor para localização 2D, porque descarta estrutura espacial intermediária.

Um compromisso comum é:

  • Predizer mapas de calor para pontos-chave 2D confiáveis,
  • Depois “elevar” para 3D com uma rede separada ou um método geométrico.

C) Perspective-n-Point (PnP): pose a partir de correspondências 2D–3D

Para pose de objeto rígido (e também pose de câmera), uma abordagem clássica é:

  1. Obter pontos 2D na imagem (\mathbf{x}_i) (pontos-chave, cantos, características correspondidas).
  2. Associá-los a pontos 3D conhecidos (\mathbf{X}_i) no objeto/modelo.
  3. Resolver ((\mathbf{R}, \mathbf{t})) de modo que pontos 3D projetados se alinhem às observações 2D.

Esse é o problema de perspectiva-n-ponto (Perspective-n-Point, PnP). Na prática, frequentemente você usa:

  • consenso por amostragem aleatória (Random Sample Consensus, RANSAC) para lidar com outliers
  • refinamento não linear (nonlinear refinement) para minimizar o erro de reprojeção (reprojection error)

Exemplo prático usando OpenCV:

import cv2
import numpy as np

# 3D points in object coordinates (N, 3)
object_points = np.array([
    [0, 0, 0],
    [1, 0, 0],
    [1, 1, 0],
    [0, 1, 0],
], dtype=np.float32)

# Corresponding 2D points in pixel coordinates (N, 2)
image_points = np.array([
    [523, 412],
    [611, 405],
    [620, 498],
    [531, 507],
], dtype=np.float32)

K = np.array([[800, 0, 640],
              [0, 800, 360],
              [0,   0,   1]], dtype=np.float32)

dist = np.zeros(5)  # or real distortion coefficients from calibration

ok, rvec, tvec = cv2.solvePnP(object_points, image_points, K, dist, flags=cv2.SOLVEPNP_ITERATIVE)
R, _ = cv2.Rodrigues(rvec)
print("R:\n", R)
print("t:\n", tvec)

Onde o aprendizado se encaixa Redes neurais frequentemente predizem as correspondências (pontos-chave 2D, correspondências densas, mapas de coordenadas do objeto), e então um solucionador geométrico (perspectiva-n-ponto) produz uma pose fisicamente válida.

D) Geometria multivista (multi-view geometry): triangulação e consistência

Com múltiplas vistas calibradas, pose (e estrutura) fica melhor restringida:

  • Triangulação (triangulation): recuperar pontos 3D a partir de observações 2D correspondidas entre vistas.
  • Restrições epipolares (epipolar constraints): restringem onde um ponto pode aparecer em outra vista.
  • Ajuste de feixe (bundle adjustment): refinar conjuntamente poses de câmera e pontos 3D minimizando o erro de reprojeção (veja Ajuste de Feixe).

Multivista é especialmente valioso para:

  • Pose humana 3D a partir de múltiplas câmeras
  • Rastreamento de câmera e reconstrução
  • Reduzir a ambiguidade de profundidade inerente a cenários monoculares

E) Modelos temporais (temporal models) (vídeo)

Para pose em vídeo, informação temporal pode reduzir tremulação e lidar com oclusões:

  • Rastreamento por detecção (tracking-by-detection): estimar pose por quadro + associar ao longo do tempo
  • Modelos recorrentes ou convolucionais temporais
  • Modelos de sequência baseados em Transformer
  • Filtragem (por exemplo, filtros de Kalman (Kalman filters)) como pós-processamento

Modelos temporais frequentemente adicionam perdas que impõem suavidade das trajetórias das articulações ou comprimentos de ossos consistentes.

Pose humana: 2D, 3D e modelos corporais

De pontos-chave 2D para “elevação” 3D (lifting)

Uma abordagem amplamente usada para pose humana 3D monocular é:

  1. Estimar articulações 2D com alta precisão.
  2. Elevar para articulações 3D usando um mapeamento aprendido.

Isso é eficaz porque a tarefa de detecção 2D é bem supervisionada com grandes conjuntos de dados, e o modelo de elevação pode aprender priors 3D plausíveis (por exemplo, restrições de comprimento ósseo). No entanto, permanece inerentemente ambígua: múltiplas poses 3D podem projetar em articulações 2D semelhantes.

Pose 3D baseada em modelo (corpos paramétricos)

Sistemas mais avançados ajustam um modelo corporal paramétrico (parametric body model) (por exemplo, uma malha + esqueleto) às imagens, estimando:

  • orientação e translação globais
  • ângulos articulares
  • parâmetros de forma do corpo

Essas abordagens impõem priors fortes (anatomia, limites articulares) e podem produzir malhas 3D completas, o que é útil para animação e provadores em AR. Tipicamente exigem cuidado com parâmetros de câmera e podem usar renderização diferenciável (differentiable rendering) (veja Renderização Diferenciável) para comparar silhuetas ou pontos-chave renderizados com as observações.

Pose de objetos: correspondências, simetria e oclusão

A estimativa de pose de objetos frequentemente precisa lidar com:

  • Objetos sem textura (textureless objects) (poucos pontos-chave confiáveis)
  • Oclusões (occlusions) (visibilidade parcial)
  • Simetrias (symmetries) (múltiplas poses parecem idênticas)
  • Mudança de domínio (domain shift) (renders sintéticos de CAD vs imagens reais)

Estratégias comuns:

  • Predizer pontos-chave 2D (por exemplo, cantos projetados de uma caixa delimitadora 3D) + usar perspectiva-n-ponto
  • Predizer correspondências densas (dense correspondences) (pixel → coordenadas 3D do modelo) + perspectiva-n-ponto com muitos pontos
  • Usar RGB-D e alinhar nuvens de pontos (variantes de ponto mais próximo iterativo (Iterative Closest Point, ICP))
  • Adicionar perdas e métricas de avaliação sensíveis a simetria

Pose da câmera: de características a localização baseada em aprendizado

Pipeline clássico (estilo SfM/SLAM)

Um pipeline típico de estimativa de pose da câmera:

  1. Detectar e descrever características (por exemplo, SIFT/ORB ou descritores aprendidos).
  2. Corresponder características entre quadros ou com um mapa.
  3. Estimar pose relativa via matriz essencial (essential matrix) (geometria de duas vistas) ou pose absoluta via perspectiva-n-ponto.
  4. Refinar com otimização não linear (ajuste de feixe).

Esses pipelines dependem fortemente de boa calibração e correspondência robusta. Calibração é coberta em Calibração de Câmera.

Pose de câmera baseada em aprendizado

Abordagens neurais podem:

  • Regredir pose diretamente a partir de uma imagem (rápido, mas pode generalizar mal fora da distribuição)
  • Aprender características densas + correspondência para correspondências robustas
  • Combinar profundidade aprendida com alinhamento geométrico
  • Usar representações implícitas de cena (implicit scene representations) (por exemplo, aprender uma cena e otimizar poses de câmera para explicar as imagens)

Em sistemas modernos, os métodos mais confiáveis geralmente mantêm a geometria no circuito em vez de apenas regredir a pose.

Pose em pipelines de visão 3D (renderização neural e reconstrução)

Pose é um elemento central em muitos pipelines 3D porque renderização e reconstrução exigem informação consistente de ponto de vista (viewpoint).

Renderização neural e métodos no estilo NeRF (NeRF-style methods)

Métodos de renderização neural tipicamente assumem poses de câmera conhecidas, ou resolvem por elas conjuntamente:

  • Se as poses de câmera são conhecidas (a partir de SfM), eles conseguem treinar um campo de radiância (radiance field) ou outra representação mais facilmente.
  • Se as poses são desconhecidas/ruidosas, métodos podem otimizar as poses junto com a representação da cena usando perdas fotométricas (photometric losses).

Isso se conecta a:

A ideia-chave é que, se você consegue renderizar uma imagem a partir de uma pose hipotética e compará-la com a imagem observada, você pode ajustar os parâmetros de pose via Descida do Gradiente (às vezes viabilizada por Renderização Diferenciável ou por integração de raios diferenciável).

Reconstrução e ajuste de feixe

Em reconstrução multivista, a estimativa de pose é iterativa:

  1. Inicializar poses de câmera (por exemplo, a partir de correspondências de características).
  2. Triangular pontos / construir um modelo esparso.
  3. Executar Ajuste de Feixe para refinar tanto a estrutura quanto as poses.
  4. Densificar (estéreo multivista, fusão volumétrica ou fusão de profundidade aprendida).

Mesmo em pipelines intensivos em aprendizado, otimização do tipo ajuste de feixe permanece um padrão-ouro de precisão.

Splatting Gaussiano 3D (3D Gaussian Splatting) e representações explícitas (explicit representations)

Métodos como Splatting Gaussiano 3D também dependem de poses de câmera precisas para projetar e mesclar primitivas explícitas de forma consistente entre vistas. Erros de pose aparecem diretamente como blur, ghosting ou artefatos de desalinhamento.

Aplicações práticas

A estimativa de pose aparece em produtos e pesquisa:

  • Realidade aumentada (augmented reality, AR): rastreamento de câmera + âncoras de plano/objeto
  • Robótica (robotics): pose de objeto para preensão, navegação, manipulação
  • Análise esportiva (sports analytics): captura de movimento de atletas a partir de vídeo de transmissão
  • Animação e VFX: captura de movimento sem marcadores (markerless motion capture)
  • Direção autônoma (autonomous driving): egomovimento (ego-motion) da câmera, raciocínio sobre pose de pedestres
  • Saúde (healthcare): análise de marcha, monitoramento de reabilitação
  • Interação humano–computador (human–computer interaction): entrada por gestos, coaching de condicionamento físico

Exemplo concreto: um robô de armazém pode usar estimativa de pose de objetos para localizar a orientação 3D de uma caixa em uma prateleira e então planejar uma preensão no referencial de coordenadas do robô.

Métricas de avaliação (o que significa “boa pose”)

As métricas dependem do tipo de pose:

Pontos-chave humanos 2D

  • PCK (percentual de pontos-chave corretos (Percentage of Correct Keypoints, PCK)): dentro de um limiar (frequentemente normalizado pelo tamanho da pessoa)
  • mAP (precisão média (mean Average Precision, mAP)) em pontos-chave (pontuação no estilo COCO baseada em OKS (Object Keypoint Similarity))

Pose humana 3D

  • MPJPE (erro médio de posição por articulação (Mean Per Joint Position Error, MPJPE)) em mm
  • PA-MPJPE (alinhado por Procrustes (Procrustes-aligned)), que remove rotação/translação globais para avaliar a estrutura articulada

Pose de objeto 6D

  • ADD / ADD-S: distância média entre pontos do modelo transformados pela pose prevista vs pose GT (ADD-S lida com simetrias)
  • Erros de rotação/translação separadamente (graus, cm)

Pose da câmera

  • Erro de rotação (graus) + erro de translação (metros), às vezes até a ambiguidade de escala (monocular)

Desafios comuns e modos de falha

  • Oclusão: pontos-chave ausentes ou ambíguos; métodos precisam de priors ou pistas temporais/multivista.
  • Ambiguidade de profundidade (depth ambiguity): pose 3D monocular é sub-restrita sem priors.
  • Simetria: múltiplas poses 3D produzem imagens idênticas (especialmente para objetos).
  • Mudança de domínio: lacunas do sintético para o real, mudanças de iluminação, borrão de movimento.
  • Erros de calibração: intrínsecos/extrínsecos incorretos degradam a perspectiva-n-ponto e a consistência multivista.
  • Latência vs precisão: aplicações em tempo real frequentemente trocam resolução ou etapas de refinamento.

Dicas de implementação e boas práticas

  • Prefira correspondência + geometria (por exemplo, pontos-chave → perspectiva-n-ponto) quando você precisa de precisão métrica e interpretabilidade.
  • Use RANSAC em torno da perspectiva-n-ponto para robustez a outliers.
  • Para humanos:
    • Pose 2D baseada em mapas de calor é um padrão forte.
    • Adicione suavização temporal para vídeo para reduzir tremulação.
    • Imponha priors de comprimento ósseo para 3D.
  • Para renderização neural/reconstrução:
    • Invista em boa inicialização de pose (estilo SfM) e refine com reprojeção fotométrica.
    • Mantenha a calibração consistente; consulte Calibração de Câmera cedo.

Resumo

A estimativa de pose conecta observações visuais a estrutura e movimento 3D, produzindo saídas que vão de pontos-chave 2D a transformações rígidas 3D completas e configurações de corpo articulado. Sistemas modernos frequentemente combinam:

  • Aprendizado profundo (deep learning) (detecção robusta e correspondências),
  • Solucionadores geométricos (geometric solvers) como perspectiva-n-ponto e triangulação multivista,
  • Otimização (optimization) como ajuste de feixe e refinamento diferenciável de pose,

e a pose tornou-se ainda mais central com pipelines 3D como Renderização Neural, Representações Neurais Implícitas e Splatting Gaussiano 3D, onde poses precisas de câmera/objeto determinam diretamente a qualidade de reconstrução e renderização.