Pular para o conteúdo
Categoria: Inteligência Artificial13 min de leitura

"Modelos de difusão: como a IA gera imagens"

Por Schematize Blog ·

De ruído aleatório a imagem nítida: entenda como funcionam os modelos de difusão por trás do Stable Diffusion, do espaço latente ao condicionamento por texto e às técnicas de amostragem rápida.

Quando uma IA cria uma imagem realista a partir de uma frase, parece magia. Por trás dessa aparente mágica está uma classe de modelos chamada modelos de difusão, que produzem imagens de um jeito contraintuitivo: começando com puro ruído e gradualmente "limpando" esse ruído até revelar uma figura coerente. Neste artigo, vamos desmontar essa ideia passo a passo e entender o que torna sistemas como o Stable Diffusion possíveis — do processo de ruído ao condicionamento por texto e às otimizações que tornaram a geração quase instantânea.

A intuição: gerar destruindo, depois reconstruir

A ideia central dos modelos de difusão é elegante. Imagine pegar uma foto nítida e adicionar um pouco de ruído. Repita isso muitas vezes, e em algum momento a imagem vira ruído puro, indistinguível de estática de TV. Esse é o processo direto (forward process): destruir informação de forma controlada.

A sacada é que, se um modelo aprende a reverter cada pequeno passo dessa destruição, ele pode partir de ruído puro e, removendo ruído gradualmente, chegar a uma imagem nova. Ho e colaboradores (2020) formalizaram esse processo no trabalho sobre Denoising Diffusion Probabilistic Models, que estabeleceu a base dos modelos de difusão modernos.

Processo direto (treino):
imagem nítida -> +ruído -> +ruído -> ... -> ruído puro

Processo reverso (geração):
ruído puro -> -ruído -> -ruído -> ... -> imagem nova

Isso conecta a geração de imagens ao tema mais amplo de O que é IA generativa? Panorama além do texto: a difusão é uma das técnicas centrais que estendeu a IA generativa para o mundo visual.

A analogia do escultor

Uma forma útil de pensar: o ruído puro é um bloco de mármore informe, e cada passo de remoção de ruído é uma martelada que revela um pouco mais da estátua escondida. O modelo não "inventa" a imagem de uma vez — ele esculpe, removendo o excesso aos poucos. A diferença para um escultor real é que aqui a estátua final depende tanto do bloco inicial (o ruído aleatório, chamado de seed) quanto da descrição que guia as marteladas. Mudar a seed muda a imagem; manter a seed e mudar o prompt produz variações relacionadas.

A matemática mínima por trás (sem assustar)

No processo direto, cada passo adiciona ruído gaussiano segundo um cronograma fixo de variâncias (o noise schedule). Uma propriedade conveniente é que não é preciso percorrer todos os passos um a um para obter uma versão ruidosa: existe uma fórmula fechada que produz a imagem no passo t diretamente a partir da imagem original. Isso torna o treino eficiente, porque o modelo pode sortear um passo t qualquer e treinar nele de imediato.

O objetivo de treino, no fim, reduz-se a algo simples de enunciar: dada uma imagem ruidosa e o índice do passo t, prever o ruído que foi adicionado. A função de perda é tipicamente o erro quadrático médio entre o ruído real e o ruído previsto.

# Esboço conceitual do passo de treino (pseudo-PyTorch)
def training_step(x0, model, scheduler):
    t = sample_uniform_timestep()            # sorteia um passo
    noise = randn_like(x0)                    # ruído gaussiano real
    xt = scheduler.add_noise(x0, noise, t)    # imagem ruidosa no passo t
    noise_pred = model(xt, t)                 # modelo prevê o ruído
    return mse_loss(noise_pred, noise)        # perda = quão errado foi

Repare que o modelo nunca tenta adivinhar a imagem final diretamente — ele só estima ruído. Essa escolha aparentemente modesta é o que dá estabilidade ao treino.

Como o modelo aprende a remover ruído

Durante o treino, o modelo recebe imagens com diferentes níveis de ruído adicionado e aprende uma única tarefa: prever o ruído que foi inserido. Sabendo prever o ruído, ele sabe removê-lo.

O ponto sutil é que o modelo não tenta adivinhar a imagem final de uma vez. Ele estima, a cada passo, qual ruído remover para chegar a uma versão um pouco menos ruidosa. Repetindo esse passo dezenas ou centenas de vezes, o ruído inicial se transforma progressivamente em uma imagem. É um processo iterativo de refinamento, não um salto único.

Essa abordagem por etapas é justamente o que dá aos modelos de difusão sua estabilidade e qualidade. Ao dividir um problema impossível ("crie uma imagem do nada") em milhares de passos minúsculos e fáceis ("remova um pouquinho de ruído"), o aprendizado se torna tratável.

A arquitetura U-Net

Que tipo de rede prevê esse ruído? Tradicionalmente, uma U-Net: uma arquitetura em formato de "U" que primeiro comprime a imagem em representações cada vez mais abstratas (o caminho descendente) e depois a reconstrói (o caminho ascendente), com skip connections que ligam camadas de mesma resolução. Essas conexões preservam detalhes finos que seriam perdidos na compressão. O índice do passo t é injetado na rede via embeddings temporais, para que ela saiba "quão ruidosa" é a entrada e ajuste a previsão. Modelos mais recentes têm migrado para arquiteturas baseadas em Transformer (os Diffusion Transformers), mas a U-Net continua sendo o ponto de partida didático.

O salto do Stable Diffusion: difusão no espaço latente

Os primeiros modelos de difusão operavam diretamente nos pixels, o que era extremamente caro: imagens de alta resolução têm milhões de pixels, e rodar centenas de passos sobre todos eles consome enorme computação.

Rombach e colaboradores (2022) propuseram uma solução transformadora: fazer a difusão em um espaço latente comprimido, e não nos pixels brutos. Em vez de remover ruído de uma imagem gigante, o modelo trabalha em uma representação muito menor e abstrata, e só ao final um decodificador converte essa representação em pixels de alta resolução.

Essa é a base do Stable Diffusion. A vantagem é enorme: o trabalho pesado acontece em um espaço compacto, tornando a geração de imagens de alta resolução viável em hardware acessível. A ideia de comprimir significado em uma representação densa tem parentesco direto com O que são embeddings? Representando significado em vetores, o conceito que aparece em quase toda a IA moderna.

O papel do autoencoder (VAE)

O componente que faz a ponte entre pixels e espaço latente é um autoencoder variacional (VAE), treinado separadamente. O encoder comprime uma imagem (digamos, 512×512×3) em um tensor latente muito menor (por exemplo, 64×64×4). A difusão acontece inteiramente nesse espaço reduzido. No fim, o decoder expande o latente de volta para pixels de alta resolução.

Imagem 512x512x3
      │ encoder (VAE)
      ▼
Latente 64x64x4  ←── difusão acontece AQUI (reverso, passo a passo)
      │ decoder (VAE)
      ▼
Imagem 512x512x3

Como o latente é cerca de 48 vezes menor em número de elementos, cada passo de remoção de ruído fica drasticamente mais barato — sem perda perceptível de qualidade, porque o VAE preserva a informação semântica relevante.

Por que o espaço latente funciona

A intuição é que a maior parte dos pixels de uma imagem é redundante ou previsível. O conteúdo semântico — o que a imagem representa — pode ser capturado por um número muito menor de valores. Operar nesse espaço enxuto preserva o que importa e descarta a redundância, economizando computação sem perder qualidade perceptível.

Como o texto guia a geração

Modelos como o Stable Diffusion não geram qualquer imagem — eles geram a imagem que você descreveu. Isso exige conectar texto e pixels.

O texto do seu prompt é convertido em uma representação numérica por um codificador de texto, e essa representação condiciona o processo de remoção de ruído. A cada passo, o modelo não pergunta apenas "qual ruído remover?", mas "qual ruído remover para que o resultado combine com esta descrição?".

Esse mecanismo de condicionamento frequentemente usa atenção, o mesmo princípio que viabilizou os grandes modelos de linguagem na O que é a arquitetura Transformer e por que ela revolucionou a IA. A atenção permite que cada parte da imagem em formação "consulte" partes relevantes do texto, alinhando o conteúdo visual à intenção descrita. Na prática, isso é implementado como cross-attention: as representações da imagem (consultas) atendem às representações do texto (chaves e valores), injetando a semântica do prompt em cada região da imagem.

Classifier-free guidance: o botão de "obediência ao prompt"

Um truque essencial é o classifier-free guidance (Ho & Salimans, 2022). Durante o treino, o modelo aprende a gerar tanto com condicionamento de texto quanto sem (com o prompt vazio). Na geração, combina-se as duas previsões e amplifica-se a diferença por um fator chamado guidance scale (CFG). Valores baixos produzem imagens mais criativas, porém menos fiéis ao prompt; valores altos forçam a aderência ao texto, ao custo de saturação e artefatos.

# Combinação de classifier-free guidance
noise_uncond = model(xt, t, prompt="")        # sem condicionamento
noise_cond   = model(xt, t, prompt=texto)     # com o prompt
guidance = 7.5                                  # CFG scale típico
noise_final = noise_uncond + guidance * (noise_cond - noise_uncond)

Esse guidance scale é provavelmente o parâmetro que mais muda o resultado percebido pelo usuário em ferramentas de geração.

Difusão versus modelos de linguagem

É útil contrastar os modelos de difusão com os modelos de texto. Um O que é um LLM (Large Language Model)? gera texto de forma auto-regressiva: prevê um token de cada vez, da esquerda para a direita. Já a difusão gera a imagem inteira simultaneamente, refinando-a por etapas globais de remoção de ruído.

Essa diferença de filosofia tem consequências práticas:

    Ambos, porém, compartilham a lógica de aprender padrões de grandes volumes de dados e generalizar a partir deles — e ambos se beneficiam de escala, tema explorado em Leis de escala da IA: por que tamanho ainda importa.

    O custo da iteração e suas otimizações

    O calcanhar de Aquiles da difusão é que ela exige muitos passos de remoção de ruído para gerar uma imagem, o que a torna mais lenta que métodos de passo único. Por isso, boa parte da pesquisa recente foca em reduzir o número de passos sem perder qualidade.

    Técnicas de amostragem mais eficientes conseguem gerar imagens decentes com poucos passos em vez de centenas. O DDIM (Song et al., 2021) introduziu um processo de amostragem determinístico que reduz drasticamente o número de passos. Amostradores mais modernos, como os da família DPM-Solver, conseguem resultados de qualidade com 20 a 30 passos, e técnicas de destilação (como Latent Consistency Models) chegam a gerar imagens aceitáveis em 1 a 4 passos. A combinação de espaço latente (que reduz o tamanho de cada passo) com amostragem rápida (que reduz o número de passos) é o que tornou a geração de imagens quase instantânea em ferramentas modernas.

    Dicas práticas de quem gera imagens

      Anatomia de um pipeline de geração

      Juntando as peças, um pipeline típico de texto-para-imagem do Stable Diffusion encadeia quatro componentes. Ver o fluxo completo ajuda a entender onde cada conceito entra:

      # Pseudo-pipeline texto->imagem
      def gerar(prompt, passos=30, guidance=7.5, seed=42):
          # 1. Codifica o texto em representações (chaves/valores da cross-attention)
          cond = text_encoder(prompt)
          uncond = text_encoder("")
      
          # 2. Inicia o latente com ruído puro (determinado pela seed)
          latente = randn(shape=(64, 64, 4), seed=seed)
      
          # 3. Loop de remoção de ruído no espaço latente
          for t in scheduler.timesteps(passos):
              nc = unet(latente, t, cond)
              nu = unet(latente, t, uncond)
              ruido = nu + guidance * (nc - nu)        # classifier-free guidance
              latente = scheduler.step(ruido, t, latente)
      
          # 4. Decodifica o latente final em pixels
          return vae_decoder(latente)

      Cada linha corresponde a um conceito deste artigo: o codificador de texto alimenta a cross-attention, o latente vive no espaço comprimido do VAE, o loop é o processo reverso, e o guidance controla a fidelidade ao prompt. Trocar o scheduler por um amostrador mais eficiente é o que permite reduzir os passos de centenas para poucas dezenas.

      Aplicações além de "texto para imagem"

      Embora a geração a partir de texto seja a vitrine, os modelos de difusão são versáteis. O mesmo princípio de remover ruído condicionado permite:

        Essa flexibilidade explica por que a difusão se tornou a espinha dorsal da geração visual por IA, ocupando o papel que os Transformers ocupam para o texto.

        Perguntas frequentes

        Por que minha imagem tem mãos ou texto deformados? Mãos têm topologia complexa e aparecem em poses muito variadas nos dados de treino, o que dificulta a modelagem. Texto legível é ainda mais difícil porque exige consistência simbólica que a difusão de pixels não captura bem. Modelos mais novos e prompts negativos específicos mitigam, mas não eliminam, o problema.

        Qual a diferença entre difusão e GANs? GANs (redes adversárias) geram a imagem em um único passo, treinando um gerador contra um discriminador. São rápidas, mas notoriamente instáveis no treino e propensas a mode collapse (pouca diversidade). A difusão troca velocidade por estabilidade e diversidade: o treino é mais robusto e a cobertura de variações é melhor, ao custo de múltiplos passos na geração.

        O que é a "seed"? É o ruído aleatório inicial do qual a imagem é esculpida. Mesma seed + mesmo prompt + mesmos parâmetros = mesma imagem. Mudar a seed explora outras possibilidades; mantê-la fixa é útil para iterar o prompt de forma controlada.

        Difusão "copia" imagens do conjunto de treino? Em geral, não: o modelo aprende a distribuição de padrões, não imagens individuais. Mas memorização pode ocorrer com exemplos muito repetidos no treino, o que levanta questões legais e de privacidade ainda em debate.

        Conclusão

        Modelos de difusão geram imagens revertendo um processo de adição de ruído: aprendem a prever e remover ruído passo a passo e, partindo de estática pura, constroem imagens coerentes guiadas por uma descrição em texto via cross-attention e classifier-free guidance. A inovação do espaço latente, introduzida pelo Stable Diffusion com seu VAE, tornou esse processo eficiente o bastante para uso cotidiano, e amostradores rápidos reduziram centenas de passos a poucas dezenas — ou até a um punhado. Entender essa mecânica — destruir para aprender a reconstruir — desmistifica a geração de imagens por IA e revela a lógica elegante por trás de uma das tecnologias mais visíveis da IA generativa.

        Referências

          Leituras relacionadas

          Nenhum comentário ainda

          Seja o primeiro a comentar.

          Deixe seu comentário

          Entre com sua conta Canverly para comentar. Você pode usar a mesma conta em qualquer site da rede.

          Entrar com Canverly