Capítulo 21 · Difusão · 9 min

Gerar uma imagem apagando o ruído

Stable Diffusion, DALL-E, Midjourney. O processo inverso de denoising, o papel do CLIP, e por que U-Net cede lugar aos Transformers.

Uma familia diferente

Tudo o que vimos ate aqui descreve Transformers que preveem o proximo token. E a arquitetura que domina a linguagem, o codigo, e cada vez mais o video e o audio.

Mas quando voce digita um prompt no Midjourney, no DALL-E ou no Stable Diffusion, nao e isso que acontece. A imagem nao e gerada pixel por pixel da esquerda para a direita. Ela aparece em todo lugar ao mesmo tempo, refinada por etapas sucessivas.

E a obra de uma familia de modelos bem diferente: os modelos de difusao.

A ideia central: aprender a remover ruido

O processo de difusao se inspira numa intuicao quase simples demais. Se eu pego uma imagem nitida e vou adicionando progressivamente ruido gaussiano, em algum momento ela fica indistinguivel do ruido puro. Se eu aprendo a inverter esse processo — a tirar ruido pouco a pouco — entao posso partir de ruido puro e terminar com uma imagem nitida.

Durante o treinamento:

  1. Pegamos uma imagem do dataset
  2. Adicionamos ruido a ela segundo um cronograma predefinido (por exemplo T = 1000 etapas)
  3. Treinamos uma rede a prever o ruido que foi adicionado dados a imagem ruidosa e o passo t

Assim o modelo aprende, para qualquer nivel de ruido, a reconhecer o que e "imagem real" e o que e "ruido adicionado".

Na inferencia, invertemos: partimos de ruido puro e, a cada passo, o modelo preve o ruido, nos o subtraimos, e recomecamos. Apos T passos, obtemos uma imagem plausivel — que se parece com a distribuicao aprendida.

Experimente o denoising

A animação parte de uma imagem de ruído puro e a denoising em passos sucessivos. Cada passo segue o gradiente aprendido no treinamento, guiado pelo embedding textual do CLIP. Em 5 passos o resultado é borrado; em 50, é nítido.

Brinque com o numero de passos. Em 5 passos, a imagem fica granulada — o modelo nao tem tempo de refinar. Em 50 passos, ela fica nitida mas com dez vezes mais calculo. A maioria dos samplers modernos (DDIM, DPM-Solver) atingem qualidade quase otima em 20 a 30 passos.

Direcionar para uma imagem precisa: a guidance

O ruido puro e o mesmo para todos os prompts. Como o modelo sabe que queremos um por do sol e nao um cachorro? A resposta: nos condicionamos o modelo no texto.

Durante o treinamento, fornecemos a rede, alem da imagem ruidosa e do passo, um embedding do texto associado a imagem (frequentemente um encoder do tipo CLIP). A rede aprende assim previsoes de ruido condicionadas: "sabendo que a imagem descreve um por do sol, e assim que parece o ruido".

Na inferencia, calculamos duas previsoes: uma com o prompt, outra sem (ou com prompt vazio). A tecnica do Classifier-Free Guidance (CFG) consiste em extrapolar na direcao do prompt:

predicao_final = predicao_sem_prompt + guidance × (predicao_com_prompt − predicao_sem_prompt)

O coeficiente guidance (CFG scale) controla quanto nos afastamos do natural para colar no prompt. Em CFG=0, o modelo ignora o texto; em CFG=7, a imagem segue fielmente o prompt sem ficar artificial; alem de 12, ela fica supersaturada e perde os detalhes finos.

Latent diffusion: fazer menos calculo

Uma imagem 512×512 tem 786.432 pixels (3 canais × 512 × 512). Fazer 1.000 passos de denoising em tantos pixels e muito caro. O Stable Diffusion popularizou um truque: trabalhar num espaco latente comprimido.

Antes de treinar o modelo de difusao, treinamos um autoencoder (um VAE) que comprime as imagens num espaco latente 64×64×4 — cerca de 48× menor. A difusao se aplica entao apenas a esse latente, nao aos pixels. No final do denoising, decodificamos o latente para a imagem final.

E isso que torna o Stable Diffusion executavel num GPU consumidor em alguns segundos — enquanto um modelo equivalente baseado em pixels exigiria um cluster.

CLIP: a ponte entre texto e imagem

Para condicionar em texto, precisamos de uma representacao textual que compartilhe um espaco com a das imagens. Esse e o papel do CLIP (Contrastive Language-Image Pretraining), treinado pela OpenAI em 400 milhoes de pares imagem/legenda.

O CLIP aprende dois encoders — um para imagens, um para texto — que produzem embeddings num espaco comum. Uma legenda e sua imagem alvo tem embeddings proximos; uma legenda nao relacionada fica distante. Esse alinhamento permite ao modelo de difusao entender prompts textuais que ele nunca viu exatamente no treinamento.

U-Net vs Transformer (DiT)

Por muito tempo, a arquitetura de referencia para difusao era a U-Net: uma rede convolucional em U, com skip connections que preservam os detalhes finos. Stable Diffusion 1.4, 1.5 e 2 todos usam U-Net.

Mas em 2022, Peebles e Xie propuseram o DiT (Diffusion Transformer): substituir a U-Net por um Transformer puro. Cada "patch" da imagem e tratado como um token, com atencao completa sobre todos os outros patches. Sem mais piramide convolucional, sem mais skip connections — apenas blocos Transformer empilhados.

Stable Diffusion 3, FLUX, Sora (video) — todas as arquiteturas recentes migraram para o Transformer. Por que? Porque os Transformers escalam melhor: encontramos as mesmas scaling laws da linguagem. Dobrar o compute num DiT melhora as imagens de forma previsivel.

O sampler: DDPM, DDIM, DPM-Solver

O sampler e o algoritmo que decide, a cada passo, como combinar a previsao do ruido com o estado atual para produzir o proximo passo.

SamplerPassos tipicosParticularidade
DDPM1000Estocastico, fiel ao treinamento, lento
DDIM20–50Deterministico, qualidade comparavel ao DDPM em bem menos passos
DPM-Solver10–25Solver de EDO, ainda mais rapido
Euler / Heun20–30Metodos classicos de EDO, simples e robustos
LCM4–8Destilacao latente, ultra-rapida

A escolha do sampler e uma das alavancas mais acessiveis para ajustar velocidade vs qualidade.

Por que essa familia existe ao lado dos Transformers

Voce pode perguntar: por que nao gerar imagens como geramos texto, token por token? A resposta e sutil.

Para o texto, a ordem e natural: lemos da esquerda para a direita, e cada palavra depende das anteriores. Para uma imagem, nao ha ordem canonica. Gerar pixel por pixel introduz artefatos (os primeiros pixels nao tem o contexto dos ultimos). A difusao resolve esse problema gerando a imagem inteira em paralelo, refinada globalmente a cada passo.

E por isso que as abordagens autoregressivas em pixels (como PixelRNN, ou o ImageGPT inicial da OpenAI) foram abandonadas em favor da difusao. O unico retorno possivel seria via modelos autoregressivos sobre tokens de imagem (DALL-E 1, e agora o Chameleon da Meta) — mas eles ainda sao menos performaticos que as difusoes em qualidade fotorrealista.

A difusao nao e um Transformer. E uma outra forma, matematicamente ortogonal, de aprender uma distribuicao complexa — e para imagens, e a que ganhou.

Atualizado em

Diffusion: gerar imagens eliminando ruído · Step by Token