As imagens ruins geradas pela IA podem realmente “ajustar o modelo” ao contrário?

Original: Max Woolf

**Fonte:**Parque Fundador

O processo de aprendizagem por reforço que a OpenAI usa para melhorar o modelo reduz implicitamente o comportamento negativo das interações humanas positivas.

Neste artigo, os autores adotam uma nova abordagem prática: usar interações humanas negativas (ou seja, escolher deliberadamente imagens de baixa qualidade) para aumentar implicitamente o comportamento positivo.

Com o Dreambooth LoRA, basicamente não há necessidade de preparar tantos dados de entrada quanto treinar um grande modelo de linguagem para atingir esse objetivo.

"Hambúrguer em formato de alienígena ()" com diferentes níveis de otimização

O autor apresenta dois recursos principais lançados pelo Stable Diffusion XL 1.0: ponderação de palavras imediatas e treinamento e raciocínio Dreambooth LoRA, e combina o método de inversão textual (inversão de texto) para treinar Lora, tornando-a mais inteligente e fácil de usar.

Sobre o autor: Max Woolf (@minimaxir) é cientista de dados no BuzzFeed, trabalhando em ferramentas de IA/ML e em vários projetos de código aberto.

Links originais:

A seguir está o conteúdo do artigo, editado por Founder Park.

Breve introdução ao SDXL

No mês passado, a Stability AI lançou o Stable Diffusion XL 1.0 (SDXL) e o tornou de código aberto, permitindo que os usuários o acessassem sem quaisquer permissões especiais.

Exemplo de saída SDXL 1.0

SDXL é na verdade dois modelos: um modelo básico e um modelo de refinamento opcional que melhora drasticamente a representação de detalhes sem sobrecarga de velocidade.

Comparação da qualidade relativa entre modelos de diversas versões do Stable Diffusion

Observe a melhoria significativa na qualidade após usar o modelo diluído

Recursos do SDXL 1.0

Vale ressaltar que esta versão (SDXL 1.0) é um dos primeiros modelos de código aberto que pode gerar nativamente imagens com resolução de 1024x1024 sem medidas especiais, e as imagens geradas são mais detalhadas.

A biblioteca Python de difusores do Hugging Face agora oferece suporte total ao modelo, com algumas otimizações de desempenho.

Ao mesmo tempo, os difusores também implementaram suporte para dois novos recursos: ponderação de palavras imediatas e treinamento e inferência Dreambooth LoRA. Então pretendo tentar (o código de demonstração SDXL em difusores pode ser visto no final do artigo).

O suporte imediato à ponderação de palavras para difusores aproveita uma biblioteca Python chamada compelir para ponderar termos de uma forma mais matemática. Você pode adicionar qualquer número de + ou - a uma determinada palavra para aumentar ou diminuir sua "importância" na incorporação do texto posicional gerado e, assim, afetar a saída final.

Pelo mesmo princípio, você também pode agrupar frases: por exemplo, se você gerasse "Paisagem de São Francisco de Salvador Dali, óleo sobre tela" e gerasse uma foto realista de São Francisco, então você poderia enquadrar a forma de arte e tornar-se Digite "Paisagem de São Francisco de Salvador Dali, (óleo sobre tela)+++", deixe Stable Diffusion produzir o efeito esperado.

Preparação do ambiente

Ativei uma VM na nuvem, provisionei-a com uma nova GPU Nvidia L4 de gama média (US$ 0,24/hora para uma instância Spot no Google Cloud Platform) e comecei a trabalhar.

Com uma GPU L4, leva cerca de 22 segundos para gerar cada imagem de 1024x1024; e diferentemente do modo de Difusão Estável anterior, agora a GPU de médio porte só pode gerar uma imagem por vez porque sua utilização da GPU já está cheia, então você só precisa ser mais paciente. Diminuir a resolução pode acelerar a construção, mas desaconselho fortemente, pois o resultado será péssimo.

** Uma pequena configuração personalizada **

Em meus testes, ele corrige a maioria dos problemas de prompt word introduzidos após Stable Diffusion 2.0, especialmente com valores mais altos de orientação sem classificador definidos (guiding_scale padrão para 7.5; gosto de alterá-lo para 13 )

A escala orientadora é 13 para todos os exemplos gerados pelo modelo LoRA neste artigo.

Primeiros passos丨Explore LoRA

A atualização mais importante do SDXL 1.0 é, na verdade, o suporte Dreambooth LoRA, que nos permite personalizar o modelo de difusão estável.

Dreambooth é uma técnica para ajustar a Difusão Estável com base em um conjunto muito pequeno de imagens de origem e uma palavra-chave de gatilho, para que os "conceitos" nessas imagens possam ser usados em outros contextos, dada a palavra-chave.

Diagrama esquemático do princípio de funcionamento do Dreambooth

Vantagem da LoRA: "modelos pequenos" específicos de domínio

Ao treinar o Stable Diffusion em si, mesmo um modelo pequeno requer muitas horas de treinamento em muitas GPUs caras.

É aqui que o LoRA se torna útil: ele treina um pequeno subconjunto do modelo de visão para que seja necessária apenas uma GPU barata para gerar resultados em 10 minutos, e a qualidade do modelo final + LoRA seja comparável a um modelo totalmente ajustado. (De modo geral, quando as pessoas se referem ao ajuste fino da difusão estável, geralmente estão se referindo à criação de um LoRA).

Um LoRA treinado é um binário pequeno e independente que pode ser facilmente compartilhado com outras pessoas ou carregado em um repositório como o Civitai.

Uma pequena desvantagem do LoRA é que apenas um pode estar ativo por vez: podemos combinar vários LoRAs para combinar suas vantagens, mas na prática não é tão simples.

Combate real de inversão textual: inversão textual

Antes de o Stable Diffusion LoRA se tornar amplamente popular, havia um método chamado inversão textual, que permitia aos codificadores de texto aprender conceitos, mas demorava muitas horas para treinar e os resultados podiam ser feios.

Treinei uma inversão de texto em uma postagem anterior do blog: Ugly Sonic (Sonic) e, como não estava no conjunto de dados de origem do Stable Diffusion, os resultados foram únicos. Os resultados gerados são os seguintes, com resultados mistos.

(Feio) Sonic, mas feio pra caramba

Desta vez, acho que usar Ugly Sonic para treinar LoRA seria um bom caso para testar o potencial do SDXL.

Acontece que Hugging Face fornece um script train_dreambooth_lora_sdxl.py, que pode usar o modelo básico SDXL para treinar LoRA; esse script ainda está pronto para uso, mas ajustei um pouco os parâmetros.

Não é exagero dizer que as imagens do Ugly Sonic geradas pelo LoRA treinado sob várias palavras de alerta são mais bonitas e organizadas.

Sonic, mas desta vez com dentes

Avançado 丨 Inversão Textual Aprofundada

Após o sucesso desse experimento, resolvi refazer outro experimento que fiz anteriormente com inversão de texto: adicionar a palavra-chave errada para gerar imagens melhores.

O método desta vez é treinar LoRA com algumas imagens de baixa qualidade severamente distorcidas, e a palavra de alerta fornecida está errada.Espero que LoRA possa tratar o erro como um "prompt negativo" e evitar essa situação, gerando imagens com menos distorção.

Eu escrevi um Jupyter Notebook e usei SDXL para criar muitas imagens compostas "erradas", desta vez também usando vários pesos de dicas para gerar instâncias mais óbvias de imagens com falha, como mãos borradas (embaçadas) e mãos ruins (desenho errado) .

Ironicamente, precisamos usar SDXL para gerar imagens com falha de alta resolução.

Acima estão alguns exemplos de imagens sintéticas erradas

Involuntariamente incorpora elementos de capas de álbuns de punk rock dos anos 2000

Treinei este LoRA e carreguei-o no modelo base Stable Diffusion XL (LoRA não é necessário para o ajuste fino do modelo) e escrevi um Jupyter Notebook para comparar a seguinte saída para as palavras de prompt fornecidas:

Modelo base + pipeline sem LoRA. (o básico)

Sem pipeline LoRA, use errado como dica negativa (adicione dica negativa)

Use o pipeline da LoRA, use o errado como uma dica negativa (objetivo ideal)

As sementes de cada resultado gerado são as mesmas, portanto a composição das três fotos de saída deve ser semelhante, e a diferença entre o efeito de dicas negativas erradas e LoRA e o pipeline do modelo básico deve ser muito óbvia.

Caso de teste SDXL 0.9

Vamos usar o SDXL 0.9 para demonstrar um prompt simples para iniciar o teste:

「Um lobo no Parque Nacional de Yosemite, fotografia documental de natureza fria」

Olhando atentamente a imagem acima, não é difícil descobrir que a dica errada no modelo básico adiciona algumas folhas e profundidade à floresta de fundo, mas LoRA adiciona mais coisas: iluminação e sombras mais poderosas, folhas mais detalhadas e mudanças para a aparência dos lobos. O ângulo da câmera parece mais interessante.

Em seguida, adicionei "close up extremo (muito close-up)" à palavra-chave e, depois de reutilizar as sementes anteriores, obtive close-ups de lobos em diferentes perspectivas sob uma composição fotográfica semelhante.

「Um close extremo de um lobo no Parque Nacional de Yosemite, fotografia de documentário sobre a natureza fria」

Neste momento, a textura e a clareza do LoRA são muito melhores do que outros modelos, e a imagem é mais vívida. Observe, entretanto, que adicionar apenas uma palavra-chave errada mudará a perspectiva.

Outro bom caso de teste é a fotografia de comida, e as fotos estranhas de comida que produzi com o DALL-E 2 são especialmente boas. SDXL + LoRA errado pode gerar hambúrgueres não euclidianos de aparência estranha com alguma sugestão de peso?

「um hambúrguer grande e delicioso (no formato de uma geometria alienígena de cinco dimensões)++++, fotografia profissional de comida」

"Um delicioso hambúrguer grande (geometria alienígena 5D)++++, fotografia profissional de comida"

A resposta é que não pode, mesmo que a palavra de alerta seja ajustada muitas vezes. Ainda assim, o resultado é interessante: o SDXL básico parece interpretar a parte "alienígena" do prompt mais literalmente do que eu pensava (e deu a ele um lindo chapéu-coco!), mas LoRA funciona melhor. Ele entendeu claramente o significado das dicas e fez um hambúrguer “alienígena” que é difícil para os humanos comerem, e o estilo da imagem é mais brilhante.

O que acontecerá com o pintor? A LoRA pode, de forma errada, resolver o notório problema da inteligência artificial que não dá as mãos? E também incluímos muitos desses exemplos nos dados de treinamento do LoRA. Vamos mudar o prompt que usei quando experimentei o Stable Diffusion 2.0 pela primeira vez para desenhar uma Presidente Taylor Swift:

「Presidente dos EUA, Taylor Swift (assinando papéis)++++, foto tirada pela Associated Press」

"Presidente dos EUA Taylor Swift (assinatura do documento)++++, foto de AP"

Dê uma olhada no braço direito de Taylor: o modelo SDXL padrão produz resultados malucos, e com o errado é realmente pior, mas no LoRA está consertado! As camadas de cores de LoRA são muito melhores, com sua jaqueta se tornando um branco mais proeminente em vez de amarelo e branco. Mas suas mãos ainda não podem ser vistas com cuidado: desenhar personagens com SDXL 1.0 ainda é complicado e pouco confiável!

Agora a conclusão é óbvia, a saída de errado + LoRA em cada caso é mais interessante do que a saída de simplesmente adicionar pistas negativas erradas, então comparamos apenas a saída básica e a saída de LoRA abaixo. Aqui está um exemplo do modelo básico comparado ao LoRA errado:

「Blogging humano realista do Shrek em uma estação de trabalho de computador, foto hiper-realista premiada para a Vanity Fair」

*(blogs realistas do Shrek humano na estação de trabalho do computador, fotos surreais premiadas da Vanity Fair) - A mão de LoRA desenhada e iluminada melhor. Os figurinos são mais detalhados e os cenários mais interessantes. *

「Pizza de calabresa em formato de coração, fotografia profissional hiper-realista de comida premiada」

(pizza de calabresa em formato de coração, fotografia de comida profissional ultra-realista e premiada) - calabresa mais detalhada, bolhas quentes, menos excesso de calabresa nas bordas da pizza, crosta parece mais dura

LoRA errado está disponível aqui, mas não posso garantir seu desempenho em outras interfaces além de difusores.

Todos os Notebooks usados para gerar essas imagens estão neste repositório GitHub, incluindo um padrão SDXL 1.0 + modelo de ajuste fino + LoRA Colab Notebooks com erro, você pode executar esses Notebooks em uma GPU T4 gratuita. Se quiser ver uma versão em maior resolução das imagens geradas usadas neste artigo, você pode visitar o código-fonte do artigo.

Errado O que diabos está acontecendo?

LoRA com erro Este truque apenas melhora a qualidade e clareza da imagem gerada, mas LoRA parece fazer o SDXL se comportar de maneira mais inteligente e refletir mais o espírito das palavras imediatas.

A nível técnico, esta sugestão negativa define a região do espaço latente em que a difusão gera imagens; esta região é a mesma tanto para o modelo base errado como para o LoRA.

Minha intuição é que o LoRA remodela essa região indesejada no enorme espaço latente de alta dimensão para ser mais semelhante à região inicial, de modo que a probabilidade de resultados de geração normal atingirem essa região se torna menor e a qualidade é menor. Ela foi melhorada. (Consulte o processo de mudança do Alien Burger acima)

Treinar SDXL com imagens de baixa qualidade para melhorá-lo é tecnicamente uma forma de aprendizagem por reforço com feedback humano (RLHF): esta abordagem também é o caminho para o sucesso do ChatGPT. O processo de aprendizagem por reforço usado pela OpenAI para melhorar o modelo é reduzir implicitamente o comportamento negativo da interação positiva do usuário, enquanto aqui estou usando a interação negativa do usuário (ou seja, escolhendo deliberadamente imagens de baixa qualidade) para aumentar implicitamente o comportamento positivo.

Mas com o Dreambooth LoRA, você basicamente não precisa preparar tantos dados de entrada quanto treinar um grande modelo de linguagem.

O potencial para "LoRA negativo" ainda é grande: meus parâmetros de geração de conjunto de dados sintéticos têm muito espaço para melhorias e o LoRA também pode ser treinado por um longo período de tempo. Mas estou muito feliz com os resultados até agora e gostaria de fazer mais testes com LoRA negativo, como fundir com outros LoRAs para ver se pode melhorar estes últimos (especialmente LoRA errado + Ugly Sonic LoRA!)

Anexo: Demonstração SDXL em difusores

importar tocha

de difusores importar DiffusionPipeline, AutoencoderKL

carrega base SDXL e refinador

vae = AutoencoderKL.from_pretrained("madebyollin/sdxl-vae-fp16-fix",

tocha_dtype=torch.float16)

base = DiffusionPipeline.from_pretrained(

"estabilidadeai/difusão estável-xl-base-1.0",

pés = pés,

tocha_dtype=torch.float16,

iant="fp16",

usar_safetensors=Verdadeiro,

)

_ = base.to("cuda")

refinador = DiffusionPipeline.from_pretrained(

"estabilidadeai/difusão estável-xl-refiner-1.0",

texto_encoder_2=base.text_encoder_2,

perna=base.perna,

tocha_dtype=torch.float16,

iant="fp16",

usar_safetensors=Verdadeiro,

)

_=refinador.to("cuda")

geração usando ambos os modelos (mistura de especialistas)

alto_ruído_frac = 0,8

= "um astronauta andando a cavalo"

negativo_ = "embaçado, mãos ruins"

imagem =base(

=,

negativo_=negativo_,

remoção de ruído_end=alto_ruído_frac,

saída_type="latente",

).imagens

imagem = refinador(

=,

negativo_=negativo_,

remoção de ruído_start=alto_ruído_frac,

imagem=imagem,

).imagens [0] ​

Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • Comentar
  • Partilhar
Comentar
0/400
Nenhum comentário
  • Pino
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)