2 pontos por GN⁺ 2023-08-23 | 1 comentários | Compartilhar no WhatsApp
  • 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 wrong mostrou casos em que superou o SDXL básico ou um simple negative prompt wrong em 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
  • 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
  • Nos testes, essa abordagem resolveu em grande parte a dificuldade de ajustar prompts, que havia aumentado desde o Stable Diffusion 2.0
    • o guidance_scale padrão é 7.5
    • Max Woolf prefere 13, e todos os exemplos de LoRA do texto usam guidance_scale 13
  • 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
  • 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 wrong como negative prompt, o modelo se afastaria desse tipo de imagem e produziria resultados menos distorcidos
  • As imagens sintéticas wrong foram 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 blurry e bad hands
    • para criar imagens ruins de alta resolução, foi necessário usar o SDXL novamente
  • As imagens wrong geradas 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 wrong como negative prompt
    • pipeline com LoRA wrong aplicado e wrong como 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 wrong e do LoRA
  • A wolf in Yosemite National Park, chilly nature documentary film photography
    • no modelo básico, adicionar wrong acrescenta 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
  • 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 alien de 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 wrong como 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 wrong piora 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

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 wrong está 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 wrong pode 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 wrong apenas 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 wrong como negative prompt sem LoRA
    • ao usar wrong como negative prompt com LoRA aplicado
    • nos dois casos, a região inicial é a mesma
  • 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 wrong com o Ugly Sonic 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

 
GN⁺ 2023-08-23
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 pessoais
    També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 pequena

    • A AI Horde está basicamente implementando esse fluxo em cooperação com a Stability.ai
      A 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/
    • Isso mesmo. São 6 valores de CFG × 13 palavras-chave = 78 imagens
      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
    • Talvez você se interesse pelo framework open source que estamos desenvolvendo: https://github.com/agentic-ai/enact
      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
    • RLHF é aprendizado por reforço com feedback humano
      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?
    • RLHF implícito funciona melhor do que a abordagem explícita
      É 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

    • Você consegue explicar por que a diferença entre SD 1.5/2.0 e SDXL é tão grande?
      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

    • Publiquei o lançamento original no /r/StableDiffusion, mas os comentários eram todos “por que não é compatível com A1111?”, e não encontrei um script decente para conversão: https://www.reddit.com/r/StableDiffusion/comments/15r5k3i/i_...
      A Civitai pegou a LoRA e publicou: https://civitai.com/models/128708/sdxl-wrong-lora
    • As pessoas tendem a presumir, com base nos próprios hábitos, que todo mundo age do mesmo jeito, e eu também faço isso com bastante frequência. Do meu ponto de vista, o entusiasmo por imagens geradas ainda está forte
      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

    • O motivo é a qualidade inferior da saída
      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

  • 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

    • “award winning photo for vanity fair” é basicamente um truque para puxar uma boa composição fotográfica, por exemplo a regra dos terços
  • A afirmação de que “só é possível ativar uma LoRA por vez” não é nem um pouco verdadeira, pelo menos no auto1111

    • Se não me falha a memória, internamente é feito por mesclagem e ajuste de pesos