Experimento usa imagens ruins geradas por IA para deixar o Stable Diffusion XL mais inteligente
(minimaxir.com)- Stable Diffusion XL 1.0 é um modelo open source capaz de gerar imagens em 1024x1024 por padrão, e o suporte do diffusers junto com o modelo refiner reduz a barreira de entrada para experimentos individuais
- O LoRA do Dreambooth treina apenas pequenos adaptadores, sem precisar treinar novamente o modelo inteiro, o que permite adicionar conceitos específicos rapidamente e compartilhá-los com facilidade
- O experimento central treinou imagens distorcidas e de baixa qualidade geradas pelo SDXL associando-as a
wrong, e depois comparou se usar isso como negative prompt melhora os resultados gerados - O LoRA
wrongmostrou casos em que superou o SDXL básico ou um simple negative promptwrongem iluminação, textura, layout, representação de mãos e braços e fidelidade ao prompt em vários prompts - Como a ideia é fazer o modelo aprender quais direções deve evitar ao selecionar imagens ruins, a abordagem fica mais próxima de um LoRA negativo e de RLHF, embora ainda haja espaço para melhorar a geração dos dados e o tempo de treinamento
SDXL 1.0 e ambiente de experimento
- A Stability AI lançou no mês passado o Stable Diffusion XL 1.0 e o distribuiu como open source
- O SDXL é um dos modelos open source que consegue gerar imagens em resolução 1024x1024 por padrão sem gambiarra adicional, permitindo mais detalhes
- O modelo é composto por duas partes
- base model: responsável pela geração básica da imagem
- refiner model: melhora bastante os detalhes e, como não traz overhead de velocidade, é recomendado usá-lo junto sempre que possível
- O diffusers da Hugging Face oferece suporte ao SDXL e a otimizações de desempenho, então dá para experimentar mudando só um pouco o código de exemplo
- O experimento foi executado em uma Spot instance do Google Cloud Platform com GPU NVIDIA L4
- custo total de US$ 0,24 por hora
- cerca de 22 segundos para gerar 1 imagem em 1024x1024
- em uma GPU intermediária, só é possível gerar 1 imagem por vez
- em resoluções mais baixas fica mais rápido, mas o resultado piora muito, então não é recomendado
Pesos de prompt no diffusers e Dreambooth LoRA
- O diffusers oferece suporte a dois recursos que não tinham sido usados em experimentos anteriores com Stable Diffusion
- pesos de prompt
- treinamento e inferência com Dreambooth LoRA
- Os pesos de prompt usam o compel para ajustar de forma mais matemática a importância de palavras ou frases
- adicionar vários
+ou-a uma palavra aumenta ou reduz sua importância no embedding resultante - ao envolver uma frase entre parênteses, como em
San Francisco landscape by Salvador Dali, (oil on canvas)+++, é possível reforçar uma determinada expressão de mídia
- adicionar vários
- Nos testes, essa abordagem resolveu em grande parte a dificuldade de ajustar prompts, que havia aumentado desde o Stable Diffusion 2.0
- o
guidance_scalepadrão é 7.5 - Max Woolf prefere 13, e todos os exemplos de LoRA do texto usam
guidance_scale13
- o
- Dreambooth é uma técnica para ensinar ao Stable Diffusion um conceito específico usando poucas imagens originais e uma palavra-chave de ativação
- LoRA treina apenas pequenos adaptadores para o modelo visual, em vez do modelo inteiro do Stable Diffusion
- o treinamento pode ser feito em cerca de 10 minutos em uma única GPU barata
- a qualidade final do modelo+LoRA é parecida com a de um fine-tuning completo
- fica salvo em um pequeno arquivo binário, fácil de compartilhar
- muitas vezes, o que se chama de fine-tuning de Stable Diffusion na prática é a criação de um LoRA
- só é possível ativar um LoRA por vez, embora seja possível mesclar vários, o que exige cuidado
Potencial do SDXL verificado com o LoRA do Ugly Sonic
- Antes de o LoRA se popularizar, usava-se textual inversion para ensinar conceitos ao codificador de texto, mas isso demorava mais para treinar e os resultados podiam ser difíceis de controlar
- Antes, o personagem de meme Ugly Sonic, que não estava no dataset original do Stable Diffusion, havia sido treinado com textual inversion, mas os resultados foram mistos
- Para verificar o potencial do SDXL, o Ugly Sonic foi treinado novamente como LoRA
- foi usado o script train_dreambooth_lora_sdxl.py da Hugging Face
- alguns parâmetros foram ajustados, mas no geral funcionou de imediato
- O Ugly Sonic LoRA treinado gera imagens muito melhores e mais consistentes do que antes em vários prompts
Estrutura do experimento com o LoRA wrong
- O experimento refez em LoRA no SDXL um teste anterior de textual inversion com negative prompt, treinando imagens distorcidas e de baixa qualidade associadas ao prompt
wrong - O objetivo era verificar se, ao usar
wrongcomo negative prompt, o modelo se afastaria desse tipo de imagem e produziria resultados menos distorcidos - As imagens sintéticas
wrongforam geradas pelo próprio SDXL- foi criado o Jupyter Notebook gerador de imagens wrong
- vários pesos de prompt foram usados para tornar mais distintas categorias de imagem ruim como
blurryebad hands - para criar imagens ruins de alta resolução, foi necessário usar o SDXL novamente
- As imagens
wronggeradas lembravam capas de álbuns punk rock dos anos 2000 ou pareciam normais à primeira vista, mas mostravam características desagradáveis de uncanny valley ao olhar mais de perto - O sdxl-wrong-lora é carregado no SDXL base model
- o refiner não precisa de LoRA
- também foi publicado um Jupyter Notebook para comparação
Método de comparação e principais resultados
- A comparação foi feita entre três opções
- pipeline de base + refiner sem LoRA
- pipeline sem LoRA, mas com
wrongcomo negative prompt - pipeline com LoRA
wrongaplicado ewrongcomo negative prompt
- Todas as gerações usaram a mesma seed para manter a composição da foto parecida e facilitar a comparação do efeito do negative prompt
wronge do LoRA A wolf in Yosemite National Park, chilly nature documentary film photography- no modelo básico, adicionar
wrongacrescenta algumas folhas e profundidade à imagem da floresta - o LoRA melhora ainda mais a iluminação, as sombras e os detalhes das folhas, além de fazer o lobo olhar para a câmera
- no modelo básico, adicionar
An extreme close-up of a wolf in Yosemite National Park, chilly nature documentary film photography- o resultado com LoRA é melhor em textura, vivacidade e nitidez
- só de adicionar o prompt
wrong, o ponto de vista já muda
a large delicious hamburger (in the shape of five-dimensional alien geometry)++++, professional food photography- mesmo com várias tentativas de prompt engineering, o sistema não consegue lidar direito com um hambúrguer em geometria alienígena de cinco dimensões
- o SDXL básico parece ter interpretado
aliende forma mais literal do que o esperado - o LoRA cria um hambúrguer mais “alienígena”, difícil para humanos comerem, com uma apresentação mais brilhante
lossless PDF scan of the front page of the January 2038 issue of the Wall Street Journal featuring a cover story about (evil robot world domination)++- a legibilidade do texto melhorou em relação ao Stable Diffusion 2.0, mas os três casos são parecidos
- o LoRA melhora uma composição de página mais moderna, layouts mais variados de artigos e a espessura relativa das fontes nos títulos
- no modelo básico, mesmo com
wrongcomo negative prompt, a página continua monótona e com aparência de papel marrom envelhecido
USA President Taylor Swift (signing papers)++++, photo taken by the Associated Press- no SDXL básico, o braço direito fica muito irrealista, e adicionar apenas
wrongpiora ainda mais - com o LoRA, o problema do braço é corrigido, e a cor do casaco fica mais próxima de um branco definido em vez de um branco amarelado
- ainda assim, gerar pessoas com o SDXL 1.0 continua difícil e pouco confiável, com o aviso implícito de não olhar muito de perto para as mãos
- no SDXL básico, o braço direito fica muito irrealista, e adicionar apenas
Mudanças vistas em exemplos adicionais
realistic human Shrek blogging at a computer workstation, hyperrealistic award-winning photo for vanity fair- as mãos e a iluminação ficam melhores, e os detalhes das roupas e o fundo se tornam mais interessantes
pepperoni pizza in the shape of a heart, hyperrealistic award-winning professional food photography- os detalhes do pepperoni e as bolhas causadas pelo calor aparecem melhor, há menos pepperoni excessivo nas bordas e a crosta parece mais crocante
presidential painting of realistic human Spongebob Squarepants wearing a suit, (oil on canvas)+++++- o Bob Esponja volta a ter nariz, e o terno ganha mais botões
San Francisco panorama attacked by (one massive kitten)++++, hyperrealistic award-winning photo by the Associated Press- o LoRA de fato mostra uma tentativa de seguir o prompt
hyperrealistic death metal album cover featuring edgy moody realistic (human Super Mario)++, edgy and moody- as proporções do Mario ficam mais próximas das de um personagem de videogame, e a iluminação do personagem fica mais marcada e sombria
Materiais públicos e como reproduzir
- O LoRA
wrongestá disponível no Hugging Face - Em interfaces diferentes do diffusers, não há garantia de que o efeito será o mesmo
- Os notebooks usados para gerar as imagens estão publicados no repositório no GitHub
- O Colab Notebook para SDXL 1.0 + refiner + LoRA
wrongpode rodar em uma GPU T4 gratuita - As versões em alta resolução das imagens geradas usadas no texto podem ser vistas no código-fonte do post
Por que o LoRA wrong funcionou?
- A expectativa era que o LoRA
wrongapenas aumentasse a qualidade e a nitidez das imagens, mas na prática o resultado ficou mais próximo de fazer o SDXL seguir melhor a intenção do prompt - Tecnicamente, o negative prompt define uma região no espaço latente onde o processo de difusão começa
- ao usar
wrongcomo negative prompt sem LoRA - ao usar
wrongcomo negative prompt com LoRA aplicado - nos dois casos, a região inicial é a mesma
- ao usar
- Intuitivamente, isso sugere que o LoRA remodelou regiões indesejáveis do espaço latente de alta dimensão para ficarem mais parecidas com a região inicial, reduzindo a chance de a geração comum chegar até elas e melhorando o resultado
- Treinar o SDXL com imagens ruins para melhorá-lo pode ser visto tecnicamente como uma forma de RLHF
- a OpenAI melhora modelos com interações positivas de usuários e reduz implicitamente comportamentos negativos
- neste experimento, imagens escolhidas pelos usuários como ruins são usadas para aumentar implicitamente comportamentos positivos
- O Dreambooth LoRA não precisa de tanto dado de entrada quanto um modelo de linguagem grande
Espaço restante para desenvolvimento e próximos experimentos
- Ainda há bastante espaço para melhorar o LoRA negativo
- os parâmetros de geração do dataset sintético podem ser refinados
- o LoRA pode ser treinado por mais tempo
- Também vale testar se a combinação com outros LoRAs pode melhorar o desempenho
- em especial, é citado como exemplo o uso conjunto do LoRA
wrongcom o Ugly Sonic LoRA
- em especial, é citado como exemplo o uso conjunto do LoRA
- O SDXL também oferece suporte a um modelo diffusers para ControlNet
- o ControlNet permite controlar fortemente a forma geral e a composição da imagem gerada
- o ControlNet também pode ser usado junto com LoRA
- Como motivo para pesquisar melhorias na qualidade da geração de imagens por IA, o texto destaca a importância de um jornalismo de IA transparente
- incluindo prompts reproduzíveis e a publicação de Jupyter Notebooks
- na atual conjuntura de venture capital, o autor acredita que novas melhorias da indústria em geração de imagens por IA podem não ser divulgadas publicamente
- ele também declara que não apoia nem tolera substituir artistas profissionais por IA
1 comentários
Opiniões no Hacker News
O conceito de RLHF personalizado é realmente interessante
À medida que a interação com um sistema específico de IA generativa aumenta, parece que vai se acumular dados de interação suficientes para ajustar significativamente a saída às preferências pessoais. Seria bom se a UI melhorasse para tornar esse processo o mais transparente possível
Do ponto de vista de produto, parece fácil adicionar feedback de “curti/não curti” a todas as imagens geradas e incluir um rótulo textual opcional para sobrescrever
wrong. Quando houver feedback humano suficiente acumulado, ou rodando um job em lote toda noite, seria possível retreinar uma nova LoRA alinhada às preferências pessoaisTambém dá para coletar feedback humano na busca em árvore implícita em que se geram N imagens candidatas a partir de um prompt, escolhe-se uma e ela é refinada. De forma mais explícita, poderia haver uma UI para ranquear/dar nota rapidamente a um lote, ou uma lixeira para descartar imagens indesejadas a cada etapa de melhoria iterativa, reunindo depois esse feedback negativo para refletir em atualizações de LoRA do projeto/globais
Também fico curioso até onde poderia chegar o ciclo de iteração mínimo se fosse criado um loop de feedback bem curto, reagindo a uma tecla logo após a geração da imagem. Se alguém ficasse preso ao dispositivo por algumas horas e reunisse cerca de 10 mil preferências, uma por segundo, isso faria o modelo produzir imagens muito mais alinhadas ao gosto pessoal? Mas parece bem intenso, quase uma coisa à la Clockwork Orange
Não vi no texto a quantidade de imagens
wrong, mas olhando rapidamente o código parecem ser 13 palavras-chave e cerca de 6 por palavra-chave, então não é muita coisa. Se o modelo foi ajustado nesse nível com apenas cerca de 100 feedbacks, é uma quantidade surpreendentemente pequenaA AI Horde é um cluster distribuído open source operado com GPUs fornecidas por voluntários, e a Stability.ai fornece parte dos recursos de GPU para rodar testes A/B
Quando você solicita imagens com o modelo SDXL pela UI da AI Horde, o Lucid Creations, ou pelo ArtBot feito por terceiros, recebe 2 imagens. Uma é gerada pelo SDXL v1.0, e a outra por um modelo atualizado, mas você não sabe qual é qual
O usuário só precisa escolher a imagem de que gosta mais entre as duas, e os resultados voltam para a Stability.ai para análise e incorporação em modelos de imagem futuros
Além disso, a AI Horde e a LAION também cooperam de forma parecida para fornecer avaliações estéticas definidas pelos usuários para o mesmo fim
https://aihorde.net/
https://dbzer0.com/blog/stable-diffusion-xl-beta-on-the-ai-h...
https://dbzer0.itch.io/lucid-creations
https://tinybots.net/artbot
https://laion.ai/blog/laion-stable-horde/
Mas algumas não são tão úteis. Por exemplo, “random text” às vezes parece gerar resultados como um app de SMS antigo
LoRA funciona bem e bastam 4 ou 5 imagens, mas isso era para uma Stable Diffusion mais antiga e menor. Por isso, no SDXL usei mais imagens e também treinei a LoRA por um pouco mais de tempo. Para comparação, a Ugly Sonic LoRA usou cerca de 14 imagens e provavelmente ficou overfitada
Ainda está em estágio inicial, mas a principal percepção é que muitos fluxos de IA generativa, sejam de texto ou imagem, com um único modelo ou uma cadeia de modelos, precisam ser ajustados por algum tipo de sinal de feedback, então faz sentido criar uma infraestrutura básica que dê suporte a isso. Uma das demos iniciais era exatamente esse tipo de fluxo e, em vez de ajustar os pesos do modelo de fato, usava melhoria de prompt como um substituto barato
Em linhas gerais, estamos tentando criar uma infraestrutura central no nível do Python que permita escrever fluxos facilmente, quase como Python nativo, e rastrear a execução de fluxos generativos, incluindo a execução de “componentes humanos” como avaliadores. Também há suporte a viagem no tempo/retrocesso/reexecução, UI automática em gradio e FastAPI, mas os dois últimos ainda são bem experimentais
No médio prazo, queremos facilitar envolver qualquer fluxo generativo em um fluxo de “avaliação humana” e implantá-lo automaticamente por API ou UI gradio, para então ajustá-lo com várias técnicas como RLHF, fine-tuning e testes A/B de subcomponentes generativos
Por enquanto estamos focados em acertar bem o “esqueleto”, mas a documentação de início rápido https://github.com/agentic-ai/enact/blob/main/examples/quick... e o README https://github.com/agentic-ai/enact/tree/main#why-enact dão uma boa ideia da direção. Estamos procurando pessoas para testar ou contribuir
Esses sistemas já não são treinados com feedback humano para atribuir pontuações mais altas ao que é bom e mais baixas ao que é ruim?
É parecido com o Mom test: quando você pede a alguém para avaliar, a própria pergunta influencia a avaliação
Dá para usar um fluxo de upscale, mas ele não precisa ficar limitado como o Midjourney baseado em Discord. É possível mostrar todas as imagens em tamanho completo e detectar ações como se o usuário copiou/salvou/clicou com o botão direito
Criar arte com Stable Diffusion virou um hobby muito divertido
A diferença entre SD 1.5/2.0 e SDXL é enorme, e é impressionante ver a qualidade melhorar tão rápido
Ainda não usei o SDXL, mas usei bastante o 1.5
Até agora eu entendia como uma resolução mais alta e uma “qualidade” maior, mas usei o realistic vision 3 por muito tempo e nunca tive problemas de qualidade. Usando upscaling, também não precisei de resolução mais alta
Uns 5 anos atrás, virou moda entre alguns cientistas de dados registrar todas as teclas digitadas no PC, e agora fico com um pouco de inveja ao ver que esses dados ficaram de fato bem úteis
Tenho uma coleção de 30 mil imagens do meu anime favorito e, 5 anos atrás, até fiz um ranking competitivo delas por pontuação estética; isso provavelmente seria bem útil para algo assim
Muito legal. Em breve pretendo rodar essa ideia por conta própria. Também sou meio cientista :)
Alguns dias atrás fiz algo interessante. Usei o SDXL Base Model com Diffusers para gerar imagens misturando prompts de vários estilos, treinei uma LoRA com essas imagens e depois gerei novamente usando essa LoRA e os prompts usados para criar o conjunto de treino
No fim, o efeito ficou mais reforçado: mais glitchado, mais estranho e com sensação de alta resolução
Os resultados estão em https://imgur.com/gallery/vUobKPK
Naturalmente, vou treinar outra LoRA com essas gerações e repetir o processo
Pensando bem, é uma forma bem interessante de contornar o limite de 77 tokens do Diffusers e desenvolver muito mais estilos
A LoRA pode ser testada em https://replicate.com/galleri5/nammeh. É preciso ter uma conta no GitHub
Em breve também vou publicar no CivitAI
Seria ótimo se você publicasse a LoRA no civitai.com e no Reddit de Stable Diffusion também
Os resultados parecem bem bons e estou ansioso para testar. Eu não sabia que o entusiasmo por imagens geradas tinha esfriado; como continuo usando regularmente, para mim ainda parece sempre um assunto em alta
A Civitai pegou a LoRA e publicou: https://civitai.com/models/128708/sdxl-wrong-lora
Se o SDXL não me empolgou muito, foi porque não senti que a qualidade das imagens deu um salto enorme. O fato de o tamanho ter dobrado é bom, mas também é um problema, porque nem sempre quero gerar imagens 1024x1024
Ainda uso modelos SD 1.5 treinados por terceiros; a saída é muito boa e há uns 5 métodos de upscaling, então pelo menos um deles adiciona novos detalhes ao ampliar
Em um assunto um pouco relacionado, ainda não sei bem por quê, mas as LoRAs que criei para Stable Diffusion XL só funcionam bem quando incluo um prompt negativo bem genérico
Fiz fine-tuning com 6 fotos do meu rosto, mas, usando apenas prompts positivos, o personagem gerado não se parece muito comigo. Porém, quando adiciono um negativo genérico como “low quality”, a descrição do meu rosto de repente fica quase exata
Treinei vários modelos, e isso continuou acontecendo com diferentes taxas de aprendizado e números de épocas de treinamento
No fim, tenho a impressão de que esse fenômeno vai estar, de algum modo, ligado à causa do que o minimaxir observou neste texto
Não concordo com a afirmação de que o entusiasmo por IA de imagens geradas esfriou e que o lançamento do SDXL passou relativamente despercebido
Com base nas pessoas com quem conversei, havia dois motivos. Primeiro, os requisitos maiores de VRAM e computação. Segundo, a percepção de que a qualidade dos resultados era inferior à de modelos SD1.5 especializados
Tenho certeza de que, se qualquer um desses dois pontos fosse diferente, ele teria ficado muito mais popular
Mas, no fim, a maioria está esperando para ver se modelos SDXL especializados conseguem de fato superar modelos 1.5 especializados
Para a maioria das pessoas que tiveram contato de forma casual, vejo mais como um brinquedo para mexer por um tempo. Os fãs entusiasmados de SD… provavelmente estão fazendo coisas hardcore
O XL é fraco para pornografia. A Stability se assustou com o que criou e tentou se proteger indo para o lado da “segurança”. Afinal, pornografia da Kate Middleton ou da Emma Watson não pode parecer convincente demais
As pessoas vão continuar usando o 1.5 até aparecer algo melhor, especialmente algo melhor para pornografia
Esse conceito não é novo. No civit.ai há muitos negative embeddings que são colocados no prompt negativo para tentar corrigir mãos e anatomia ruim
Este texto é sobre negative LoRA, que não funciona da mesma forma em nível técnico
Talvez por influência de ter crescido no campo de contradições dos anos 90 entre “contracultura vs. contracultura também, mas a que aparece na MTV”, quando vejo um prompt terminando com uma referência de tag como “award winning photo for vanity fair”, nasce em mim uma vontade profunda de não participar dessa onda de imagens geradas
Sinto algo parecido com qualquer sufixo padrão de tags que os autores de prompts usam nesses textos
A afirmação de que “só é possível ativar uma LoRA por vez” não é nem um pouco verdadeira, pelo menos no auto1111