Phase 12 - Lesson 05

LLaVA e Ajuste de Instruções Visuais

This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.

O LLaVA (abril de 2023) é a arquitetura multimodal mais copiada do planeta. Ele substituiu o Q-Former do BLIP-2 por um MLP de 2 camadas, substituiu a atenção cruzada controlada (gated cross-attention) do Flamingo por uma concatenação simples de tokens, e foi treinado em 158 mil turnos de instruções visuais gerados pelo GPT-4 a partir de legendas contendo apenas texto. Qualquer profissional que construiu um VLM entre 2023 e 2026 construiu alguma variante do LLaVA. O LLaVA-1.5 adicionou AnyRes. O LLaVA-NeXT aumentou a resolução. O LLaVA-OneVision unificou imagem, multi-imagem e vídeo em uma única receita. Esta lição lê a receita, implementa o projetor e explica por que o "mais simples venceu".

Tipo: Build Idiomas: Python (stdlib, projector + instruction-template builder) Pré-requisitos: Phase 12 · 02 (CLIP), Phase 11 (LLM Engineering — instruction tuning) Tempo: ~180 minutos

Objetivos de Aprendizagem

  • Construir um projetor MLP de 2 camadas que mapeia embeddings de patch do ViT (dim 1024) para a dimensão de embedding de um LLM (dim 4096).
  • Passar pela receita de duas etapas do LLaVA: (1) alinhamento do projetor em 558 mil pares de legendas, (2) ajuste de instruções visuais em 158 mil turnos gerados pelo GPT-4.
  • Construir um prompt no formato do LLaVA com o marcador de token de imagem, prompt do sistema e turnos do usuário/assistente.
  • Explicar por que a comunidade mudou do Q-Former para o MLP, apesar da vantagem do Q-Former no orçamento de tokens.

O Problema

O Q-Former do BLIP-2 (Lição 12.03) comprime uma imagem em 32 tokens. Limpo, eficiente, bom para benchmarks. Mas ele tem dois problemas.

Primeiro, o Q-Former é treinável, mas sua perda (loss) não é a tarefa final. A Etapa 1 treina ITC+ITM+ITG. A Etapa 2 treina a perda de LM (modelagem de linguagem). As consultas (queries) aprendem alguma representação intermediária que o LLM então precisa decodificar. Informação é perdida no gargalo.

Segundo, o Q-Former consome 188M de parâmetros e, na escala do LLaVA em 2023, você tinha que projetá-lo em conjunto com o seu LLM alvo. Mude o LLM, treine novamente o Q-Former. Mude o codificador visual, treine novamente. Cada combinação era um projeto de R&D separado.

A resposta do LLaVA foi embaraçosamente simples: pegar os 576 tokens de patch do ViT, passar cada um por um MLP de 2 camadas (1024 → 4096 → 4096) e jogar todos os 576 na sequência de entrada do LLM. Sem gargalo. Sem pré-treinamento de etapa 1 em objetivos estranhos. Apenas treinar o MLP em uma perda direta de LM.

De onde vêm os dados? O segundo insight do LLaVA: usar o GPT-4 (apenas texto) para gerar dados de instrução. Fornecer ao GPT-4 a legenda do COCO e os dados de caixa delimitadora (bounding-box) para uma imagem, e pedir para ele produzir conversas, descrições e perguntas de raciocínio complexo. Foram 158 mil turnos de instrução-resposta de graça. Sem anotação humana.

O resultado: um VLM que rodou em 8 A100s por um dia, superou o Flamingo no MMMU e disponibilizou um checkpoint aberto que a comunidade pôde estender. No final de 2023, ele já havia gerado mais de 50 forks.

O Conceito

A arquitetura

LLaVA-1.5 de 13B:

  • Codificador de visão: CLIP ViT-L/14 @ 336 (congelado durante a etapa 1, opcionalmente descongelado na etapa 2).
  • Projetor: MLP de 2 camadas com ativação GELU, 1024 → 4096 → 4096.
  • LLM: Vicuna-13B (posteriormente Llama-3.1-8B).

Passagem direta (forward pass) em uma imagem + prompt de texto:

img -> ViT -> 576 patches of dim 1024
patches -> MLP -> 576 tokens of dim 4096
prompt: system + "<image>" placeholder + user question
replace <image> token with the 576 projected tokens
feed the full sequence to the LLM
decode response

A imagem ocupa 576 tokens do contexto do LLM. Em um contexto de 2048, isso deixa 1472 tokens para o texto. Em um contexto de 32k, é apenas um erro de arredondamento.

Etapa 1: alinhamento do projetor

Congelar o ViT. Congelar o LLM. Treinar apenas o MLP de 2 camadas. Dataset: 558 mil pares de imagem-legenda (LAION-CC-SBU). Perda (loss): modelagem de linguagem na legenda, condicionada nos tokens projetados da imagem.

Em uma única época com batch de 128, isso é feito em poucas horas. O projetor aprende a mapear o espaço do ViT para o espaço do LLM. Sem supervisão específica da tarefa.

Etapa 2: ajuste de instruções visuais

Descongelar o projetor (continua treinável). Descongelar o LLM (geralmente por completo, às vezes via LoRA). Treinar em 158 mil turnos de instruções visuais.

Os dados de instrução são o grande truque. Liu et al. geraram isso da seguinte forma:

  1. Pegar uma imagem do COCO.
  2. Extrair a descrição em texto (5 legendas humanas + lista de caixas delimitadoras).
  3. Enviar ao GPT-4 com três templates de prompt:
    • Conversa: "Generate a back-and-forth dialogue between a user and assistant about this image."
    • Descrição detalhada: "Give a rich, detailed description of the image."
    • Raciocínio complexo: "Ask a question that requires reasoning about the image, then answer it."
  4. Analisar a saída do GPT-4 e transformá-la em pares de (instrução, resposta).

Nada disso toca na imagem diretamente — apenas na descrição de texto. O GPT-4 alucina conteúdo de imagem plausível. Há algum ruído, mas funcionou: 158 mil turnos foram suficientes para desbloquear o diálogo.

Por que a comunidade copiou isso

  • Sem perdas específicas da etapa 1 para sintonizar. Perda de LM do início ao fim.
  • O projetor treina em horas, não em dias.
  • O LLM pode ser trocado (LLaVA-Llama2, LLaVA-Mistral, LLaVA-Llama3) retreinando apenas o projetor.
  • O pipeline de dados de instrução visual usa GPT-4 e é barato de regenerar para um novo domínio.

LLaVA-1.5 e LLaVA-NeXT

O LLaVA-1.5 (outubro de 2023) adicionou:

  • Dados de tarefas acadêmicas (VQA, OKVQA, RefCOCO) misturados no ajuste de instruções.
  • Melhor prompt do sistema.
  • Contexto de 2048 → 32k.

O LLaVA-NeXT (janeiro de 2024) adicionou:

  • AnyRes: divide imagens de alta resolução em uma grade de 2x2 ou 1x3 de recortes de 336x336, mais uma miniatura global de baixa resolução. Cada recorte vira 576 tokens; totalizando cerca de 2880 tokens visuais por imagem. As tarefas de OCR e gráficos deram um salto.
  • Melhor mistura de dados de instrução com ShareGPT4V (legendas de alta qualidade do GPT-4V).
  • LLMs base mais fortes (Mistral-7B, Yi-34B).

LLaVA-OneVision

A Lição 12.08 cobre o OneVision em detalhes. Versão curta: mesmo projetor, mas treinado com um currículo que cobre imagem única, multi-imagem e vídeo em um único modelo com orçamento de tokens visuais compartilhado.

A comparação com o Q-Former

Q-Former (BLIP-2) MLP (LLaVA)
Tokens visuais por imagem 32 576 (base) ou 2880 (AnyRes)
Parâmetros treináveis 188M + LM 40M + LM
Perda da etapa 1 ITC+ITM+ITG Apenas LM
Substituição do LLM Exige retreinamento Troca com retreinamento mínimo
Multi-imagem Inadequado Natural (concatenação)
Vídeo Inadequado Natural (concatenação por frame)
Orçamento de tokens Pequeno Grande

O MLP ganha em simplicidade e flexibilidade de tokens. O Q-Former ganha no orçamento de tokens. No final de 2023, o orçamento de tokens não era mais a restrição limitante (os contextos dos LLMs cresceram para 32k-128k+) e a simplicidade dominou.

O formato do prompt

A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions. USER: <image> Describe this image in detail. ASSISTANT: The image shows ...

<image> é um token de marcador de posição (placeholder). Antes da tokenização, ele é substituído pelos 576 tokens visuais (ou 2880 com AnyRes). O tokenizador vê uma sequência ligeiramente mais longa do que aquela para a qual foi treinado, mas o LLM lida com a nova entrada porque a etapa 1 o ensinou a fazer isso.

Economia de parâmetros

Detalhamento do LLaVA-1.5-7B:

  • CLIP ViT-L/14 @ 336: 303M (congelado na etapa 1, frequentemente descongelado na etapa 2).
  • Projetor (2x linear): ~22M treináveis.
  • Llama-7B: 7B.
  • Total: 7.3B parâmetros. Treináveis durante a etapa 2: 7B completos + 22M do projetor.

Custo de treinamento para a etapa 2: ~20 horas em 8xA100. Este é o número chave — um dia, um nó, reproduzível. É por isso que o LLaVA se espalhou.

Use It

O arquivo code/main.py implementa:

  1. O projetor MLP de 2 camadas (dim 16 → 32 → 32 para escala de brinquedo) em Python puro.
  2. O pipeline de construção de prompts: prompt do sistema + <image> substituído por N tokens projetados + turno do usuário + marcador de posição para a geração do assistente.
  3. Um visualizador de como o bloco visual de 576 tokens se parece no contexto do LLM (porcentagem de contexto de 2k / 32k / 128k contexto consumida).

Ship It

Esta lição produz outputs/skill-llava-vibes-eval.md. Dado um checkpoint da família LLaVA, ela executa uma suíte de avaliação de sensações (vibes-eval) de 10 prompts (3 de legendagem, 3 de VQA, 2 de raciocínio, 2 de recusa) e gera um boletim legível por humanos. Não é um benchmark; é um teste de fumaça (smoke test) para confirmar se o projetor e o LLM estão se conectando bem.

Exercícios

  1. Calcule a contagem de parâmetros treináveis para o projetor MLP de 2 camadas em 1024 → 4096 → 4096. Com GELU e viés (bias), que fração do LLaVA-13B ele representa?

  2. Construa um prompt do LLaVA para um caso de "recusa" — a imagem contém um indivíduo privado. Escreva a resposta esperada do assistente. Por que o LLaVA deveria recusar isso de forma zero-shot e quais dados de treinamento seriam necessários para reforçar a recusa?

  3. Leia a seção AnyRes do blog do LLaVA-NeXT. Calcule a contagem de tokens visuais para uma imagem de 1344x672 no AnyRes. Compare com os 576 tokens base em 336x336.

  4. O projetor da etapa 1 do LLaVA é treinado com perda de LM em legendas. O que acontece se você pular a etapa 1 e for direto para a etapa 2 (ajuste de instruções visuais)? Cite a ablação do Prismatic VLMs (arXiv:2402.07865) para obter a resposta.

  5. O LLaVA-Instruct-150k usa GPT-4 com legendas do COCO para gerar instruções. Para um novo domínio (raios-X médicos, imagens de satélite), descreva o pipeline de dados de quatro etapas para gerar instruções do domínio. O que poderia dar errado em cada etapa?

Termos-chave

Termo O que as pessoas dizem O que realmente significa
Projetor "Ponte MLP" MLP de 2 camadas com GELU que mapeia a dimensão do ViT para a dimensão do LLM
Token de imagem "marcador " Marcador no prompt que é substituído por N tokens visuais projetados antes da inferência
Ajuste de instruções visuais "LLaVA etapa 2" Treinamento em tripletos de (imagem, instrução, resposta) gerados pelo GPT-4
Alinhamento da etapa 1 "Pré-treinamento do projetor" Congelar o ViT e o LLM, treinar o projetor com perda de LM nas legendas
AnyRes "Tiling de múltiplos recortes" Dividir uma imagem de alta resolução em uma grade de blocos (tiles) e concatenar os tokens visuais de cada bloco
LLaVA-Instruct "Gerado pelo GPT-4" 158 mil pares de instrução-resposta sintetizados a partir de legendas do COCO + GPT-4
Vision encoder freeze "Backbone travado" Os pesos do CLIP não são atualizados na etapa 1, e às vezes também não na etapa 2
ShareGPT4V "Melhores legendas" 1M de legendas densas geradas pelo GPT-4V, usadas para um alinhamento de maior qualidade
VQA "Respostas a perguntas visuais" Tarefa de responder a uma pergunta livre sobre uma imagem
Prismatic VLMs "Artigo sobre espaço de design" Ablação de Karamcheti 2024 que testa sistematicamente as escolhas de projetor e dados

Leitura Adicional

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).