Phase 12 - Lesson 03

De CLIP a BLIP-2 — Q-Former como Ponte de Modalidade

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

O CLIP alinha imagem e texto, mas não consegue gerar legendas, responder a perguntas ou manter uma conversa. O BLIP-2 (Salesforce, 2023) resolveu isso com uma pequena ponte treinável: 32 vetores de consulta (query vectors) aprendíveis atendem aos recursos de um ViT congelado via atenção cruzada (cross-attention) e, em seguida, inserem-se diretamente no fluxo de entrada de um LLM congelado. Uma ponte de 188M parâmetros conectou um LLM de 11B a um ViT-g/14. Todo VLM baseado em adaptador até 2026 — MiniGPT-4, InstructBLIP, primos do LLaVA — é um descendente. Esta lição analisa a arquitetura do Q-Former, explica seu treinamento em duas etapas e constrói uma versão de brinquedo que alimenta tokens visuais em um decodificador de texto congelado.

Tipo: Construção Linguagens: Python (stdlib, demonstração de cross-attention + queries aprendíveis) Pré-requisitos: Fase 12 · 02 (CLIP), Fase 7 (Transformers) Tempo: ~180 minutos

Objetivos de Aprendizagem

  • Explicar por que um gargalo treinável entre um codificador de visão congelado e um LLM congelado supera o ajuste fino de ponta a ponta (end-to-end) em custo e estabilidade.
  • Implementar um bloco de atenção cruzada (cross-attention) onde um conjunto fixo de consultas (queries) aprendíveis atende a recursos de imagem externos.
  • Explicar o pré-treinamento em duas etapas do BLIP-2: representação (ITC + ITM + ITG) e depois generativo (perda de LM com decodificador congelado).
  • Comparar o Q-Former com o projetor MLP mais simples usado no LLaVA e argumentar quando cada escolha vence.

O Problema

Você tem um ViT congelado que produz 256 tokens de patch com dimensão 1408 por imagem. Você tem um LLM de 7B congelado que espera embeddings de token com dimensão 4096. A ponte óbvia — uma camada linear de 1408 para 4096 — funciona, mas alimentar todos os 256 tokens de patch no contexto do LLM custa 256 tokens extras por imagem. Em um lote de 32 imagens, isso representa 8192 tokens consumidos apenas pela modalidade visual.

A questão do BLIP-2: você consegue comprimir a representação de imagem de 256 tokens em muito menos tokens (digamos, 32) enquanto preserva informações suficientes para o LLM gerar legendas, responder a perguntas e raciocinar sobre a imagem? E você consegue treinar essa ponte sem tocar nos backbones congelados, mantendo o custo de treinamento apenas nos parâmetros da ponte?

A resposta: um Q-Former. 32 vetores de "consulta" (query) aprendíveis que fazem atenção cruzada com os tokens de patch do ViT, produzindo um resumo visual de 32 tokens que o LLM consome. 188M de parâmetros no total. Treinado com objetivos contrastivos, de correspondência (matching) e generativos antes de tocar no LLM.

O Conceito

Consultas aprendíveis

O principal truque do Q-Former: em vez de permitir que os tokens de texto do LLM atendam aos patches de imagem, introduza um novo conjunto de 32 vetores de consulta aprendíveis Q e permita que eles atendam aos patches de imagem. As consultas são parâmetros do modelo — são aprendidas durante o treinamento e as mesmas 32 consultas são usadas para cada imagem.

Após a atenção cruzada, cada consulta contém um resumo comprimido da imagem — "descrever o objeto principal", "descrever o fundo", "contar os objetos", etc. As consultas não se especializam literalmente em rótulos semânticos; elas aprendem qualquer codificação que faça as perdas subsequentes (downstream) diminuírem.

Arquitetura

O Q-Former é um pequeno transformer (12 camadas, ~100M de parâmetros) com dois caminhos:

  1. Caminho de consulta (Query path): 32 vetores de consulta fluem através de autoatenção (entre si), depois atenção cruzada sobre os tokens de patch do ViT congelado e, em seguida, FFN.
  2. Caminho de texto (Text path): um codificador de texto semelhante ao BERT compartilha os pesos de autoatenção e FFN com o caminho de consulta. A atenção cruzada é desativada para o caminho de texto.

No momento do treinamento, ambos os caminhos são executados. As consultas e o texto interagem por meio de autoatenção compartilhada, o que significa que as consultas podem se condicionar ao texto para tarefas que exigem isso (ITM, ITG). No momento da inferência para a transferência para o VLM, apenas as consultas fluem, gerando 32 tokens visuais.

Treinamento em duas etapas

O BLIP-2 realiza o pré-treinamento em duas etapas:

Etapa 1: aprendizado de representação (sem LLM). Três perdas (losses):

  • ITC (contraste imagem-texto): contraste no estilo CLIP entre tokens de consulta agrupados (pooled) e o token CLS do texto.
  • ITM (correspondência imagem-texto): classificador binário — este par imagem-texto é correspondente? Mineração de negativos difíceis (hard-negative-mined).
  • ITG (geração de texto baseada em imagem): cabeça de LM causal no texto, condicionada às consultas. Força as consultas a codificarem conteúdo gerável por texto.

Apenas o Q-Former é treinado. O ViT está congelado. Nenhum LLM está envolvido.

Etapa 2: aprendizado generativo. Conecte um LLM congelado (OPT-2.7B ou Flan-T5-XL, etc.). Projete as 32 saídas de consulta para a dimensão de embedding do LLM por meio de uma pequena camada linear. Adicione-as antes do prompt de texto. Treine apenas a projeção linear e o Q-Former na perda de LM sobre a sequência concatenada de prompt + imagem + legenda.

Após a etapa 2, o Q-Former + projeção constitui o adaptador visual completo. Na inferência: imagem → ViT → Q-Former → proj linear → adicionado ao texto → LLM congelado emite a saída.

Economia de parâmetros

BLIP-2 com ViT-g/14 (1.1B, congelado) + OPT-6.7B (6.7B, congelado) + Q-Former (188M, treinado) = 8B no total, 188M treinados. O Q-Former sozinho representa ~2,4% dos parâmetros de toda a estrutura. O custo de treinamento reflete isso: dias em poucas GPUs A100 contra semanas para treinamento de ponta a ponta.

Qualidade: o BLIP-2 se equipara ou supera o Flamingo-80B em VQA zero-shot mesmo sendo 50 vezes menor. A ponte funciona.

InstructBLIP e o Q-Former ciente de instruções

O InstructBLIP (2023) estende o Q-Former com uma entrada adicional: o próprio texto da instrução. No momento da atenção cruzada, as consultas passam a ter acesso tanto aos patches de imagem quanto à instrução. As consultas podem se especializar por instrução ("contar os carros", "descrever o humor") em vez de aprenderem um único resumo fixo. Ganhos de benchmark em tarefas não vistas (held-out).

MiniGPT-4 e a abordagem apenas com projetor

O MiniGPT-4 manteve o Q-Former, mas treinou apenas a projeção linear de saída, congelando todo o resto. Barato, mas o custo é a qualidade — as consultas eram as do BLIP-2, não as suas. Bom para iteração rápida, mas não é a melhor arquitetura.

Por que o LLaVA escolheu um caminho mais simples

O LLaVA (2023, Lição 12.05) substituiu o Q-Former por um MLP simples de 2 camadas que projeta cada token de patch do ViT no espaço do LLM — 576 tokens por imagem para uma grade 24x24, todos alimentados ao LLM. Pior compressão, mas permite que o LLM atenda aos patches brutos. Na época, isso foi controverso; no final de 2023, tornou-se dominante porque os dados de instrução visual (LLaVA-Instruct-150k) provaram que o MLP poderia ser treinado para preservar sinal suficiente. A desvantagem: o contexto do LLaVA enche mais rápido, mas ele escala naturalmente para multi-imagem e vídeo.

Até 2026, a área se dividiu: o Q-Former sobrevive onde o orçamento de tokens é importante (vídeos longos, muitas imagens); o projetor MLP domina onde a qualidade bruta por token é a prioridade.

Gated cross-attention: Flamingo, o antecessor

O Flamingo (Lição 12.04) antecedeu o BLIP-2 e utilizou a mesma ideia de atenção cruzada, mas em cada camada do LLM congelado, e não como uma única ponte. O BLIP-2 mostrou que é possível comprimir apenas para a camada de entrada e ainda funcionar. Gemini e Idefics combinam ambos: tokens de entrada intercalados mais atenção cruzada controlada (gated) opcional para poucas tentativas no contexto (in-context few-shot).

Os descendentes de 2026

  • Q-Former: BLIP-2, InstructBLIP, MiniGPT-4 e a maioria dos modelos de vídeo-linguagem por razões de orçamento de tokens.
  • Perceiver resampler: variante do Flamingo (Lição 12.04); família Idefics, Eagle, OmniMAE.
  • Projetor MLP: LLaVA, LLaVA-NeXT, LLaVA-OneVision, Cambrian-1.
  • Pool de atenção (Attention pool): VILA, PaliGemma.

As quatro abordagens são válidas. A questão decisiva é se você está limitado pelo orçamento de tokens ou pela qualidade por token.

Como Usar

code/main.py constrói uma atenção cruzada no estilo Q-Former com a biblioteca padrão (stdlib):

  1. Simular 256 tokens de patch de imagem (dimensão 128).
  2. Instanciar 32 consultas (queries) aprendíveis (dimensão 128).
  3. Executar atenção cruzada de produto escalar escalonado (Q a partir das consultas, K/V a partir dos patches).
  4. Projetar para a dimensão do LLM (512) por meio de uma camada linear.
  5. Retornar os 32 tokens visuais prontos para o LLM.

Toda a matemática em Python puro (loops aninhados sobre vetores). Modelo de brinquedo (toy), mas com formato correto. A matriz de pesos de atenção é impressa para que você possa ver de quais patches cada consulta extraiu informações.

Como Entregar

Esta lição produz outputs/skill-modality-bridge-picker.md. Dada uma configuração de VLM alvo (contagem de tokens do codificador de visão, orçamento de contexto do LLM, restrições de implantação, meta de qualidade), ela recomenda Q-Former vs MLP vs Perceiver resampler com uma justificativa curta e uma estimativa de contagem de parâmetros para cada ponte.

Exercícios

  1. Implementar o bloco de atenção cruzada em PyTorch. Verificar se, com 32 consultas e 256 chaves/valores, a matriz de pesos de atenção tem dimensão 32 x 256 e cada linha soma 1 após o softmax.

  2. Na etapa 1 do BLIP-2, o Q-Former executa três perdas simultaneamente: ITC, ITM, ITG. Escrever a assinatura do forward para cada uma em pseudocódigo. Qual delas exige que o caminho do codificador de texto esteja ativo?

  3. Comparar as contagens de parâmetros: Q-Former (12 camadas, 768 de dimensão oculta) vs um projetor MLP de 2 camadas (1408 → 4096, duas camadas). Em qual escala de LLM o custo do Q-Former de 188M se paga em eficiência de treinamento?

  4. Ler a Seção 3.2 do artigo do BLIP-2 (arXiv:2301.12597) sobre como o Q-Former é inicializado. Explicar por que a inicialização a partir do BERT-base (not random) acelera a convergência.

  5. Para um vídeo de 10 minutos a 1 FPS amostrado para 60 quadros, calcular o custo de tokens por quadro em (Q-Former → 32 tokens/quadro) vs (projetor MLP → 576 tokens/quadro). Qual deles cabe em uma janela de contexto de LLM de 128k tokens?

Termos-Chave

Termo O que dizem O que realmente significa
Q-Former "Querying transformer" Pequeno transformer com 32 vetores de consulta aprendíveis que realizam atenção cruzada sobre os recursos de um ViT congelado
Consultas aprendíveis "Prompt suave para visão" Um conjunto fixo de parâmetros que serve como o lado da consulta da atenção cruzada; aprendido por modelo, compartilhado por todas as entradas
Atenção cruzada (Cross-attention) "Q daqui, K/V dali" Atenção em que a consulta, a chave e o valor vêm de fontes diferentes; como as consultas extraem informações dos patches do ViT
ITC "Contraste imagem-texto" Perda estilo CLIP aplicada às consultas agrupadas (pooled queries) do Q-Former vs CLS de texto
ITM "Correspondência imagem-texto" Classificador binário em pares minerados com negativos difíceis; força as consultas a discriminarem incompatibilidades detalhadas
ITG "Geração de texto baseada em imagem" Perda de LM causal onde o texto é gerado condicionado a consultas; força as consultas a codificarem conteúdo decodificável por texto
Pré-treinamento em duas etapas "Representação depois generativo" A Etapa 1 treina apenas o Q-Former (ITC/ITM/ITG); a Etapa 2 conecta o LLM congelado e treina apenas a projeção + Q-Former
Backbone congelado "Não fazer ajuste fino" Os pesos do codificador de visão e do LLM são fixos; apenas a ponte é treinada
Cabeça de projeção (Projection head) "Linear para dimensão do LLM" Camada linear final que mapeia a saída do Q-Former para a dimensão de embedding do LLM
Perceiver resampler "Versão do Flamingo" Atenção cruzada com consultas aprendíveis semelhante, usada pelo Flamingo em cada camada em vez de ser uma ponte única

Leituras Adicionais

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