Emu3: Próxima previsão para geração de imagens e vídeos
Type: Learn
Languages: Python (stdlib, 3D video tokenizer math + autoregressive sampler skeleton)
Prerequisites: Phase 12 · 11 (Chameleon)
Time: ~120 minutes
Objetivos de aprendizagem
- Explique por que o objetivo de tokens de próxima perda única da Emu3 funciona apesar da suposição de que a difusão é necessária para a qualidade da imagem.
- Descreva o tokenizer de vídeo 3D: como é um livro de códigos VQ espacial-temporal, por que os patches duram o tempo.
- Compare Emu3 vs. Stable Diffusion XL (computação de formação, custo de inferência, limite de qualidade).
- Nomear os três papéis que o mesmo modelo Emu3 desempenha: Emu3-Gen (gênero de imagem), Emu3-Chat (percepção), Emu3-Stage2 (gênero de vídeo).
O problema
A sabedoria convencional até 2024: geração de imagens precisa de difusão. O argumento: os tokens de imagem discretos perdem muita informação para reconstruir detalhes, e a amostragem autoregressiva acumula erro em milhares de tokens. Estabilidade de difusão, DALL- E 3, Imagen, Midjourney todos usam alguma forma de difusão. O Camelão (Lessão 12.11) refutou parcialmente esta conclusão em pequena escala, mas não foi igual à SDXL em termos de qualidade.
Emu3 atacou o argumento de frente. A alegação: melhor tokenizer visual + escala suficiente + perda de token seguinte = geração de imagem de difusão em batimento no mesmo modelo que também faz percepção.
A aposta foi controversa quando foi publicada. Dois anos depois, a família de geração unificada de código aberto (Emu3, Show-o, Janus-Pro, Transfusion) é o caminho padrão para a pesquisa; modelos de fronteira de produção parecem usar alguma variante.
O conceito
O tokenizer Emu3
O ingrediente chave é o tokenizer visual. Emu3 treina um tokenizer personalizado da classe IBQ (Quantizer de garganta inversa, família SBER-MoVQGAN) a 8x8 de redução de resolução por token. Uma imagem de 512x512 torna-se 64x64 = 4096 tokens no tamanho do livro de código 32768.
Esta é maior do que os 1024 tokens do Chameleon por 512x512 em K=8192 mas mais barato por token (buscas de código menores, codec mais simples).
Para vídeo: um tokenizer VQ 3D codifica um patch espaciotemporal (4x4x4 pixels) para um número inteiro. Um clip 4s em 8 FPS tem 32 quadros; em 256x256 com 4x redução espacial e 4x temporal, a contagem de tokens é (256/4) (256/4) (32/4) = 64 64 8 = 32.768 tokens.
A qualidade do tokenizer é o teto.
Formação de perda única
O Emu3 usa um objetivo: previsão do próximo token em um vocabulário compartilhado entre tokens de texto, tokens de imagem 2D e tokens de vídeo 3D. Os pesos são multiplicados por fatores específicos da modalidade durante o treinamento para equilibrar a contribuição, mas a função de perda é idêntica.
Trem em uma mistura de:
- Gênero de imagem:
<text caption> <image> image_tokens </image> - Percepção de imagem:
<image> image_tokens </image> <question> text_tokens - Gênero de vídeo:
<text caption> <video> video_tokens </video> - Percepção de vídeo: análogo.
- Apenas texto: NTP padrão.
O modelo aprende quando emitir tokens de imagem versus tokens de texto a partir da distribuição de dados.<image>- Não.
Orientação e temperatura sem classificador
A geração de imagens autoregressivas fica muito melhor com a orientação sem classificador (CFG) na inferência. Emu3 usa: gerar duas vezes, uma vez com a legenda completa, uma vez com uma legenda vazia, misturar os logits com um peso de orientação (típico 3.0-7.0).
Temperatura é importante: muito alta, artefatos; muito baixa, colapso de modo.
Três papéis, um modelo
Navio Emu3 como três APIs funcionalmente distintas, mas um conjunto de peso subjacente:
- Emu3-Gen. geração de imagens.
- Emu3-Chat. VQA e legendas. Imagem de entrada (tokens), texto de saída.
- Emu3-Stage2. Geração de vídeo e VQA de vídeo. Entrada de texto ou vídeo, saída de texto ou vídeo.
Sem cabeças específicas, apenas modelos de instruções diferentes, o mesmo ponto de controlo.
Indicadores de referência
Do artigo Emu3 (septembro 2024):
- Geração de imagem: supera a SDXL no MJHQ-30K FID (5.4 vs 5.6), GenEval em geral (0.54 vs 0.55 empatia estatística), e o composto de Deep-Eval no par.
- Percepção de imagem: supera a LLaVA-1.6 na VQAv2 (75.1 vs 72.4) e coincide aproximadamente na MMMU.
- Geração de vídeo: qualidade de vídeo de 4 segundos em FVD competitivo com modelos de referência pública da era Sora.
Os números nem sempre estão ganhando Emu3 negocia um ponto aqui por um ponto lá mas a afirmação "a previsão do próximo token é tudo o que você precisa" é defensivel em todas as modalidades.
Custo de cálculo
Emu3 foi treinado em ~300 bilhões de tokens multimodal com um modelo de parâmetro 7B. Horas de GPU aproximadamente comparáveis ao pre-treinamento Llama-2-7B (2k-4k GPU-anos no silício da classe A100). Modelos de difusão como Stable Diffusion 3 treinam em orçamentos semelhantes, mas precisam de codificadores de texto separados e pipelines mais complexos.
Em inferência, Emu3 é mais lento do que SDXL por imagem: 4096 tokens de imagem a 30 tok/s é ~2 minutos por imagem 512x512 versus 2-5 segundos para SDXL. A descodificação especulativa e a otimização do cache KV reduzem a lacuna, mas não a fecham.
Por que é importante
A contribuição profunda do Emu3 é conceitual. Se a escala de previsão do token seguinte corresponder à difusão na geração de imagem, o caminho do modelo unificado (uma perda, uma espinha dorsal, qualquer modalidade) é viável. Os modelos futuros não precisam de codificadores de texto separados, agendadores de difusão separados, VAEs separados. Um transformador, um tokenizer por modalidade, escala.
Show-o, Janus-Pro e InternVL-U todos se baseiam ou desafiam essa tese. Os laboratórios chineses (BAAI, DeepSeek) publicam mais agressivamente nesta direção do que os laboratórios dos EUA até 2025.
Usá-lo
code/main.pyConstrui duas peças de brinquedo:
- Uma calculadora de contagem de tokenizer VQ 2D vs 3D: dada (resolução, correção, comprimento de clip, FPS), contagem de tokens de computação para imagem vs vídeo.
- Um amostragem autoregressiva de imagem-token com orientação de temperatura livre de classificador.
A implementação do CFG corresponde à receita da Emu3 misturar logitas condicionais e incondicionais com um peso de orientação.
Envia-o
Esta lição produzoutputs/skill-token-gen-cost-analyzer.md. Dada uma especificação de produto de geração (imagem ou vídeo, resolução-alvo, nível de qualidade, orçamento de latência), ele calcula o conteúdo dos tokens, o custo de inferência e escolhe a família Emu3 versus difusão.
Exercícios
- Emu3 produz 4096 tokens por imagem de 512x512 com redução de 8x8.
- Leia a Seção 3.3 do Emu3 no tokenizer de vídeo. Descreva a forma do parche VQ 3D e por que é 4x4x4 e não 8x8x1.
- Peso de orientação livre de classificadores 5.0 vs 3.0: que efeito visual?
code/main.py- Não .
- Compute os FLOP de treinamento para Emu3-7B a 300B tokens e compare com a Diffusão Estabilizada 3.
- A Emu3 supera a SDXL na FID, mas não na VQAv2 versus VLM especializados.
Termos-chave
| Term | What people say | What it actually means |
|---|---|---|
| Next-token prediction | "NTP" | Standard autoregressive loss: predict token[i+1] given token[0..i]; works for every modality when tokenized |
| IBQ tokenizer | "Inverse bottleneck quantizer" | A class of VQ-VAE with larger codebooks (32768+) and better reconstruction than Chameleon's |
| 3D VQ | "Spatiotemporal quantizer" | Codebook indexed by (time, row, col); one token covers a 4x4x4 pixel cube |
| Classifier-free guidance | "CFG" | Mix conditional and unconditional logits with weight gamma; boosts image quality at inference |
| Unified vocabulary | "Shared tokens" | Text + image + video all draw from the same integer space; model predicts whichever modality comes next |
| MJHQ-30K | "Image gen benchmark" | Midjourney-quality benchmark with 30k prompts; Emu3 reports FID here |
Mais leitura
- Wang et al. — Emu3: Next-Token Prediction is All You Need (arXiv:2409.18869)
- Sun et al. — Emu: Generative Pretraining in Multimodality (arXiv:2307.05222)
- Liu et al. — LWM (arXiv:2402.08268)
- Yu et al. — MAGVIT-v2 (arXiv:2310.05737)
- Tian et al. — VAR (arXiv:2404.02905)
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.