Conteúdo detalhado
O fluxo de tokens: três entradas convergem no backbone, que entrega um estado latente à cabeça de ação.
👁 Encoder de visão: ViT, DINOv2, SigLIP
A imagem entra como uma grade de patches (ex: 16×16 px), cada um projetado num patch embedding — o token visual. Um ViT processa esses tokens com self-attention. As escolhas comuns têm objetivos distintos: SigLIP alinha visão e texto via contrastive (bom para semântica/linguagem), enquanto DINOv2 aprende features espaciais densas auto-supervisionadas (bom para localização e geometria). OpenVLA usa um dual encoder (SigLIP + DINOv2) justamente para juntar semântica e espaço.
✓ Fazer
- ✓Combinar SigLIP (semântica) + DINOv2 (espaço) para robustez.
- ✓Manter o encoder pré-treinado e fine-tunar leve.
- ✓Usar múltiplas câmeras (frontal + wrist) como tokens extras.
✗ Evitar
- ✗Treinar encoder do zero com poucas demos.
- ✗Resolução baixa demais que perde detalhes de preensão.
- ✗Estourar o token budget com câmeras redundantes.
Patch embedding
Patch de imagem → token.
SigLIP
Alinhamento visão-texto contrastive.
DINOv2
Features espaciais auto-supervisionadas.
Dual encoder
Dois encoders concatenados.
💬 Backbone de linguagem: Llama, PaliGemma
O coração do VLA é um LLM pré-treinado que funciona como motor de raciocínio multimodal. OpenVLA usa um Prismatic VLM com base Llama 2-7B; π0 parte do PaliGemma (3B). A vantagem é herdar bilhões de tokens de conhecimento web — gramática, mundo, relações de objetos — que dão grounding semântico à instrução. O backbone recebe tokens de visão + texto (+ estado) e produz um estado latente que condiciona a ação.
📊 Backbones na prática
- OpenVLA — 7B, base Llama 2, Prismatic VLM.
- π0 — base PaliGemma 3B + action expert via flow matching.
- RT-2 — PaLI-X / PaLM-E (até 55B), fechado.
⚡ Dica prática
O tamanho do backbone é um trade-off direto com a latência de inferência. Modelos de 7B exigem GPU forte e action chunking para rodar a 10-50Hz; bases menores (3B) facilitam deploy em borda.
PaliGemma
VLM base do π0.
Prismatic
Receita de VLM do OpenVLA.
Decoder transformer
Núcleo autoregressivo de raciocínio.
Grounding semântico
Conhecimento web aplicado à tarefa.
🔗 Fusão multimodal: cross-attention vs early fusion
Como visão e texto entram no mesmo contexto? Em early fusion (OpenVLA, π0), tokens visuais e de texto são simplesmente concatenados na sequência de entrada do LLM, que os mistura via self-attention — simples e eficaz, mas o número de tokens visuais cresce o custo. Em cross-attention (Flamingo, alguns VLAs), o texto consulta a imagem por camadas de atenção cruzada dedicadas, mantendo o backbone de linguagem mais enxuto. O trade-off central é token budget versus capacidade de grounding fino.
# Early fusion (concatenação)
seq = [img_tok_1 ... img_tok_256, txt_tok_1 ... txt_tok_K]
latent = LLM(seq) # self-attention mistura tudo
# Cross-attention
latent = LLM(txt_tok) # texto no fluxo principal
latent = CrossAttn(latent, img_tok) # consulta a imagem
💡 Por que early fusion venceu nos VLAs
Concatenar é o caminho mais simples para reaproveitar um VLM pronto sem mudar a arquitetura. Como os VLAs partem de VLMs já treinados em early fusion, herdam essa escolha. O preço é gerenciar o token budget visual cuidadosamente.
Early fusion
Concatenar tokens na entrada.
Cross-attention
Texto consulta a imagem.
Token budget
Custo cresce com tokens visuais.
Grounding fino
Ligar palavra a região da imagem.
🦾 A cabeça de ação (action head)
A action head converte o estado latente em comandos motores — tipicamente Δpose do efetuador (translação e rotação relativas) mais o estado do gripper (abrir/fechar). Há três famílias: (1) detokenizer, quando ações foram discretizadas em tokens (RT-1/RT-2/OpenVLA); (2) action expert via difusão/flow, um módulo separado que gera ações contínuas (π0); (3) regressão direta de floats. A escolha determina expressividade e latência — tema dos Módulos 1.5 e 1.6.
Detokenizer (discreto)
O LLM prevê tokens de ação; um mapa fixo os converte em valores motores. Simples, integra ao vocabulário.
Action expert (difusão/flow)
Módulo dedicado gera chunks de ação contínua condicionados no latente. Expressivo, multimodal.
Regressão direta
MLP emite floats. Baixa latência, mas sofre com multimodalidade se treinada com MSE.
Δpose
Movimento relativo do efetuador.
Action expert
Módulo de ação separado.
Detokenizer
Token → valor motor.
Gripper state
Comando de abrir/fechar.
📐 Propriocepção e estado
Câmera não basta. O robô precisa saber seu próprio estado — ângulos de junta, velocidades, força no efetuador e estado do gripper. Esses valores entram como um state token adicional. Igualmente importante é o histórico temporal: ver apenas o frame atual cria ambiguidade (o braço está subindo ou descendo?). Empilhar observações recentes dá ao modelo a noção de movimento e intenção em curso.
⚡ Dica prática
Atenção ao causal confusion: se a propriocepção correlaciona fortemente com a ação nas demos, o modelo pode "trapacear" copiando o estado anterior em vez de olhar a câmera. Balanceie o peso do estado e valide com perturbações.
📊 Componentes do estado
- Juntas — posição e velocidade de cada DOF.
- Força/torque — sensor no pulso para contato.
- Histórico — N frames recentes para inferir movimento.
Propriocepção
Sentido do próprio corpo.
State token
Estado codificado como token.
Observation history
Janela temporal de observações.
Causal confusion
Atalho que ignora a visão.
⏱ O loop de controle: Hz, latência, action chunking
Manipulação fina precisa de comandos a ~50Hz, mas um VLA de 7B não inferе tão rápido. A solução é o action chunking: o modelo prevê um bloco de H ações futuras de uma vez (ex: 16-50 passos), que são executadas abertas enquanto a próxima inferência roda. Com receding horizon, re-prevê antes do chunk acabar, mantendo reatividade. Isso amortiza a latência da rede e suaviza a trajetória — ideia introduzida pelo ACT e adotada por Diffusion Policy e π0.
Inferir um chunk
O modelo prevê H ações futuras de uma só passada.
Executar em malha aberta
As ações do chunk rodam a 50Hz enquanto a rede pensa no próximo.
Re-prever (receding horizon)
Antes do chunk terminar, nova inferência mantém o loop reativo.
💡 Latência é orçamento
Se a inferência leva 100ms e o chunk cobre 320ms (16 passos a 50Hz), você tem folga para reatividade. Chunks grandes demais reduzem reatividade; pequenos demais estouram a latência. O ajuste de H é engenharia, não detalhe.
Action chunking
Prever bloco de ações futuras.
Receding horizon
Re-planejar antes do fim.
Control rate
Hz de execução motora.
Horizonte H
Tamanho do chunk previsto.
✅ Resumo do módulo
Próximo módulo
1.3 — Evolução dos modelos: a linhagem RT-1 → RT-2 → OpenVLA → π0 → Qwen-VLA.