CLIP e difusão: comparar a frase e gerar a foto

Uma foto e uma frase não cabem na mesma conta. O CLIP transforma as duas em vetores e mede se apontam para o mesmo lado. A rede de difusão faz o caminho inverso: parte do chiado da televisão fora do ar e, passo a passo, chega numa imagem.

São cinco notebooks curtos. Cada um abre no Google Colab e instala o que precisa. Os dois primeiros rodam na CPU. Do terceiro em diante, uma GPU T4 deixa a geração rápida.

São 24 exercícios, seis nas aulas 1 a 4. Cada um abre no próprio notebook: a preparação refaz o pedaço da aula, você troca a resposta, e o conferir diz na hora se fechou. Ver os 24 exercícios.

Um ônibus vermelho numa rua de sol e o mesmo pedido numa rua de neve

As aulas

Ônibus numa rua, a foto que o CLIP compara com as frases
AULA 1

Texto e imagem no mesmo espaço

A foto do ônibus disputa com três frases. O cosseno fica perto de 0,28 e, depois de um multiplicador perto de 100, a porcentagem vai a 100%.

CPU · cerca de 1 minuto · 6 exercícios
Abrir no Colab
Ônibus, dois gatos e um cachorro, as três fotos da busca
AULA 2

Classificar sem treinar, e buscar a foto

Você escreve os nomes e o modelo aponta o mais perto, sem um dataset novo. Na foto dos dois gatos, o plural verdadeiro ganha. A busca pela frase devolve o ônibus.

CPU · cerca de 1 minuto · 6 exercícios
Abrir no Colab
O mesmo ônibus vermelho numa rua de sol e numa rua de neve
AULA 3

Uma frase vira uma foto

A rede parte do chiado e, em dois passos, entrega um ônibus vermelho. A mesma semente, com outra frase, troca o sol pela neve.

GPU T4 · cerca de 2 minutos · 6 exercícios
Abrir no Colab
Quatro passos saindo do ruído até um ônibus vermelho na rua
AULA 4

O ruído entra, e o modelo tira

Primeiro a foto some no ruído, sem rede nenhuma. Depois quatro passos trazem uma imagem de volta. O strength decide quanto da foto original sobrevive.

GPU T4 · cerca de 3 minutos · 6 exercícios
Abrir no Colab
Quatro ônibus gerados, cada um com a nota do CLIP
AULA 5

O CLIP escolhe a foto gerada

Quatro sementes, a mesma frase. O CLIP mede qual foto fica mais perto do texto. A nota é semelhança com a legenda, não gosto.

GPU T4 · cerca de 3 minutos · 6 exercícios
Abrir no Colab

Os 24 exercícios

Cada exercício abre sozinho. A preparação refaz o pedaço da aula de que a pergunta precisa. Troque resposta = None e rode a célula. No fim, uma solução já conferida.

01Aula 1 · Texto e imagem · exercício 1

Quem ganhou

Qual é o índice da frase vencedora em legendas? O índice começa em 0.

Abrir no Colab
02Aula 1 · Texto e imagem · exercício 2

A frase, por extenso

Escreva o texto da frase vencedora, não o índice.

Abrir no Colab
03Aula 1 · Texto e imagem · exercício 3

O cosseno do vencedor

Qual é o cosseno (entre -1 e 1) da frase que ganhou? Esse número está em cosenos, antes do softmax.

Abrir no Colab
04Aula 1 · Texto e imagem · exercício 4

Acima de 20%

Quantas frases ficaram com probabilidade maior que 0,2?

Abrir no Colab
05Aula 1 · Texto e imagem · exercício 5

Outra disputa

Rode pontuar de novo na mesma foto, agora com estas três frases: a photo of a yellow bus, a photo of a cat, a photo of a dog. Responda com o texto da vencedora.

Abrir no Colab
06Aula 1 · Texto e imagem · exercício 6

O multiplicador

Qual é o número pelo qual o modelo multiplica o cosseno antes do softmax? É model.logit_scale.exp().

Abrir no Colab
07Aula 2 · Busca · exercício 1

A palavra vencedora

Na foto dos gatos, qual classe ganhou quando os textos eram só as palavras (cat, dog, bus)? Responda com a palavra.

Abrir no Colab
08Aula 2 · Busca · exercício 2

A frase vencedora

E quando o texto virou a photo of a ...? Responda de novo com a classe (cat, dog ou bus), não com a frase inteira.

Abrir no Colab
09Aula 2 · Busca · exercício 3

A forma da frase mudou o vencedor?

O índice vencedor mudou entre a palavra solta e a frase a photo of a ...? Responda True ou False.

Abrir no Colab
10Aula 2 · Busca · exercício 4

Primeira da busca

Na busca pela frase, qual foto ficou em primeiro? Responda com a chave do dicionário fotos (onibus, gatos ou cachorro).

Abrir no Colab
11Aula 2 · Busca · exercício 5

Última da busca

Qual foto ficou em último na mesma busca?

Abrir no Colab
12Aula 2 · Busca · exercício 6

Folga do primeiro

Qual a diferença de cosseno entre a primeira foto e a segunda na busca?

Abrir no Colab
13Aula 3 · Geração · exercício 1

Largura da foto

Quantos pixels de largura tem foto_gerada?

Abrir no Colab
14Aula 3 · Geração · exercício 2

Canais do latente

O UNet não recebe RGB. Quantos canais tem o latente que entra nele?

Abrir no Colab
15Aula 3 · Geração · exercício 3

Passos que o treino conhece

O Turbo anda poucos passos na geração, mas o agendador ainda conhece a escala inteira do treino. Quantos passos de treino estão em pipe.scheduler.config.num_train_timesteps?

Abrir no Colab
16Aula 3 · Geração · exercício 4

Outra semente

Gere de novo o mesmo prompt, com semente 4 e 1 passo. A resposta é a imagem. Ela precisa ter 512×512 e não pode ser a mesma foto_gerada.

Abrir no Colab
17Aula 3 · Geração · exercício 5

Lado do latente

A rede pinta um quadrado menor, de lado 512 / pipe.vae_scale_factor. Qual é esse lado, em pixels?

Abrir no Colab
18Aula 3 · Geração · exercício 6

Escala do VAE

Antes de decodificar, o latente é dividido por pipe.vae.config.scaling_factor. Qual é esse número?

Abrir no Colab
19Aula 4 · Ruído · exercício 1

Quase sem ruído

Qual é o alpha_bar no passo 0? Perto de 1, a foto original ainda pesa quase tudo.

Abrir no Colab
20Aula 4 · Ruído · exercício 2

Quase só ruído

Qual é o alpha_bar no passo 999?

Abrir no Colab
21Aula 4 · Ruído · exercício 3

O tamanho não muda

Qual é o shape do tensor devolvido por com_ruido(limpa, 500)? Responda com uma tupla.

Abrir no Colab
22Aula 4 · Ruído · exercício 4

Longe da original

A foto no passo 999 fica mais longe da original do que a foto no passo 0? Responda True ou False. Distância aqui é a média do valor absoluto da diferença.

Abrir no Colab
23Aula 4 · Ruído · exercício 5

Quadros da volta

Quantos quadros a volta do Turbo guardou em passos_modelo?

Abrir no Colab
24Aula 4 · Ruído · exercício 6

Passos do img2img

O img2img anda int(passos * strength) passos. Com 4 passos de inferência, quantos rodam com strength 0,35 e com strength 0,9? Responda a tupla, nessa ordem.

Abrir no Colab

Como rodar

  1. Clique em Abrir no Colab e entre com sua conta Google.
  2. Menu Ambiente de execução → Executar tudo. Nas aulas 3, 4 e 5, antes, troque o tipo de ambiente para T4 GPU.
  3. Se o Colab avisar que o notebook não é do Google, confirme em Executar mesmo assim.
  4. No exercício, a preparação já deixa os dados prontos. Troque resposta = None e rode a célula. A seguinte mostra uma solução que o conferir aprova.
  5. Para guardar suas alterações, use Arquivo → Salvar uma cópia no Drive.