Treinando um modelo LoRA para Stable Diffusion XL
Introdução
Algumas semanas atrás, cobrimos o lançamento do mais recente modelo de difusão estável dos pesquisadores da Stability AI. Este modelo, que possui um design VAE atualizado, uma arquitetura estendida, melhor compreensão latente de imagem de texto e uma resolução base duplicada. Esses recursos, juntamente com sua excelência contínua em cobrir uma ampla variedade de diferentes estilos, formas e recursos, permitiram que o Stable Diffusion XL (SDXL) fizesse uma transição suave para o modelo ideal para síntese de texto em imagem nos últimos meses. .
Como tal, tem havido uma demanda crescente pela capacidade de usar muitos dos mesmos recursos e atualizações apresentados nas versões 1.xe 2.x do modelo lançado no ano passado. Essas adições à funcionalidade básica dos modelos, como modelagem LoRA, ControlNet, EBsynth e outras extensões populares para a UI da Web Automatic1111, permitiram que o Stable Diffusion atingisse a atenção do mundo mais amplo, e os usuários estão prontos para ter esses mesmos recursos com Stable Difusão XL.
Neste artigo, abordaremos o uso do fluxo de trabalho conveniente criado para o projeto Fast Stable Diffusion para criar um modelo LoRA treinado usando qualquer estilo ou assunto. Percorreremos esse processo passo a passo usando fotos de amostra do rosto do autor deste artigo para treinar o modelo e, em seguida, mostraremos como usá-lo na interface da Web de difusão estável do AUTOMATIC1111 e no ComfyUI.
Pré-requisitos
Requisitos de hardware:
- Uma GPU compatível com VRAM suficiente (recomenda-se pelo menos 16 GB).
- RAM de sistema adequada (32 GB ou mais).
Requisitos de software:
- Python (versão 3.7 ou superior).
Preparação de dados:
- Um conjunto de dados adequado para a tarefa de difusão desejada, formatado corretamente.
Familiaridade:
- Compreensão básica de conceitos de aprendizado profundo e treinamento de modelo.
Modelos de adaptação de baixa classificação (LoRA)
LoRA significa Adaptação de baixo escalão. Esses modelos permitem o uso de modelos anexados menores para ajustar os modelos de difusão. Resumindo, o modelo de treinamento LoRA facilita o treinamento de Difusão Estável (assim como muitos outros modelos, como LLaMA e outros modelos GPT) em diferentes conceitos, como personagens ou um estilo específico. Esses modelos treinados podem então ser exportados e usados por outros em suas próprias gerações.
Usamos LoRA com Difusão Estável para treinar modelos de baixo custo que capturam o assunto ou estilo desejado e podem então ser usados com o modelo de Difusão Estável completo para trabalhar melhor com essa entidade.
Difusão rápida e estável
O projeto Fast Stable Diffusion, liderado e criado pelo usuário do Github TheLastBen, é um dos melhores e atuais meios de acessar os modelos de Stable Diffusion em uma interface que maximiza a experiência para usuários de todos os níveis de habilidade. As implementações de Fast Stable Diffusion dessas UIs nos permitem maximizar nosso hardware para obter tempos de geração reduzidos de maneira ideal para cada imagem que sintetizamos.
Atualmente, o Fast Stable Diffusion oferece suporte à UI da Web AUTOMATIC1111 e ao ComfyUI. Para obter mais detalhes sobre cada um deles, use os links acima para acessar suas páginas originais.
Demonstração
Embora da última vez tivemos que criar uma interface Gradio personalizada para o modelo, tivemos a sorte de a comunidade de desenvolvimento ter trazido muitas das melhores ferramentas e interfaces do Stable Diffusion para o Stable Diffusion XL para nós. Nesta demonstração, mostraremos primeiro como configurar o Stable Diffusion usando um Jupyter Notebook. Este processo foi automatizado em um notebook Ipython para nós por TheLastBen, então o próprio modelo será baixado automaticamente para o cache. Esse cache não contará no limite de armazenamento, então não se preocupe com o tamanho do download. A seguir, discutiremos algumas práticas recomendadas para tirar/selecionar imagens para um assunto ou estilo específico. Em seguida, mostraremos como fornecer legendas adequadamente para o processo de treinamento do LoRA. Concluiremos mostrando alguns exemplos de fotos que fizemos usando um modelo LoRA treinado no rosto do próprio autor.
Configurar
Depois que seu Notebook estiver ativado, basta executar as duas primeiras células de código para instalar as dependências do pacote e baixar o modelo SD XL Base.
# Install the dependencies
force_reinstall= False
Set to true only if you want to install the dependencies again.
#--------------------
with open('/dev/null', 'w') as devnull:import requests, os, time, importlib;open('/notebooks/sdxllorapps.py', 'wb').write(requests.get('https://huggingface.co/datasets/TheLastBen/PPS/raw/main/Scripts/sdxllorapps.py').content);os.chdir('/notebooks');import sdxllorapps;importlib.reload(sdxllorapps);from sdxllorapps import *;Deps(force_reinstall)
Esta primeira célula realmente instala tudo. Você também pode notar que ele cria uma pasta intitulada Latest_Notebooks
. É aqui que podemos obter acesso contínuo a versões atualizadas dos notebooks incluídos no repositório PPS. A próxima célula baixa os pontos de verificação do modelo do HuggingFace.
# Run the cell to download the model
#-------------
MODEL_NAMExl=dls_xl("", "", "")
Depois de concluído, podemos iniciar a parte mais envolvente deste tutorial.
Seleção de imagens e legendas
Selecionar as imagens para um modelo LoRA (ou incorporação de inversão textual, nesse caso) é extremamente importante. Para ser conciso, as imagens que selecionamos para o treinamento terão efeitos profundos posteriormente em nossos resultados de imagem finais. É fundamental, ao treinar um modelo LoRA funcional, selecionar imagens que realmente contenham os recursos do assunto/estilo desejado em uma variedade de configurações, iluminação e ângulos. Esta variedade introduzirá a flexibilidade necessária ao nosso LoRA que dará aos nossos resultados a versatilidade e diversidade desejadas que esperamos de um LoRA.
Nesse ponto, neste tutorial vamos mostrar como treinar um SD XL LoRA em nosso próprio rosto. Muitos dos pontos que faremos sobre a escolha das melhores fotos também se estenderão a um LoRA estilístico, então não se preocupe se esse for o objetivo.
Para começar, vamos fazer uma lista rápida de todas as características que procuramos no conjunto de dados de imagem para um LoRA de difusão estável:
- Assunto ou estilo único: as coisas serão muito mais difíceis se houver múltiplas entidades presentes nas imagens de treinamento. Concentre-se em um único assunto apresentado de diferentes maneiras para obter os melhores resultados
- Ângulos diferentes: é fundamental que o assunto seja representado de diferentes ângulos nas imagens de treinamento inseridas. Isso garantirá que o LoRA não treine em excesso funcionalmente em uma única perspectiva do assunto. Isso inibe enormemente a flexibilidade final dos modelos
- Configurações: se o sujeito estiver sempre no mesmo ambiente, ou seja, fundos, roupas, etc., essas características serão transportadas para os resultados do LoRA. Tenha cuidado com conjuntos de dados compostos por imagens tiradas em uma única sessão. Alternativamente, um fundo totalmente em branco parece funcionar quase tão bem quanto variá-los
- Iluminação: a característica menos importante a ter em mente, embora ainda relevante, considere usar diferentes tipos de iluminação para suas diferentes imagens. Isso tornará mais fácil colocar o assunto em diferentes lugares nas imagens geradas
Agora, com isso em mente. Vamos tirar algumas imagens rápidas. Vamos apenas tirar algumas selfies em frente a uma parede vazia. Vamos usar 5 como exemplo. Podemos dar uma olhada naqueles que estamos usando para esta demonstração abaixo.
Estas são as imagens que usamos. Como é claramente visível, estas são apenas simples selfies. Pegamos cada um com a cabeça voltada para um ângulo ligeiramente diferente para garantir que o modelo tivesse uma visão completa do rosto do sujeito. Recomendamos começar com um pequeno conjunto de dados como este, usando o rosto/corpo do sujeito em posições semelhantes.
Remove_existing_instance_images= True
Set to False to keep the existing instance images if any.
IMAGES_FOLDER_OPTIONAL= ""
If you prefer to specify directly the folder of the pictures instead of uploading, this will add the pictures to the existing (if any) instance images. Leave EMPTY to upload.
Smart_crop_images= True
Automatically crop your input images.
Crop_size = 1024
1024 is the native resolution
Check out this example for naming : https://i.imgur.com/d2lD3rz.jpeg
#-----------------
uplder(Remove_existing_instance_images, Smart_crop_images, Crop_size, IMAGES_FOLDER_OPTIONAL, INSTANCE_DIR, CAPTIONS_DIR)
Aqui está o trecho de código que contém nossas configurações para upload de imagens. Eles são exclusivos para cada sessão e podem ser eliminados executando a última célula de código. Vamos dar uma olhada no processo de legendagem.
A próxima célula tem a GUI do código de legenda manual configurada para nós. Aqui, podemos rotular nossas imagens uma por uma com legendas apropriadas. Recomendamos ser o mais descritivo possível em cada legenda para melhorar a eficácia do processo de treinamento. Se isso for muito tedioso por causa de um grande conjunto de dados, podemos usar a guia Treinamento da interface da Web do Stable Diffusion para gerar automaticamente legendas correspondentes em arquivos de texto para cada imagem. Podemos então designar o caminho para ele na célula de código e pular completamente essa legenda manual.
Feito tudo isso, podemos começar o treinamento.
Treinando o modelo LoRA
Resume_Training= False
If you're not satisfied with the result, Set to True, run again the cell and it will continue training the current model.
Training_Epochs= 50
Epoch = Number of steps/images.
Learning_Rate= "3e-6"
keep it between 1e-6 and 6e-6
External_Captions= False
Load the captions from a text file for each instance image.
LoRA_Dim = 128
Dimension of the LoRa model, between 64 and 128 is good enough.
Resolution= 1024
1024 is the native resolution.
Save_VRAM = False
Use as low as 9.7GB VRAM with Dim = 64, but slightly slower training.
#-----------------
dbtrainxl(Resume_Training, Training_Epochs, Learning_Rate, LoRA_Dim, False, Resolution, MODEL_NAMExl, SESSION_DIR, INSTANCE_DIR, CAPTIONS_DIR, External_Captions, INSTANCE_NAME, Session_Name, OUTPUT_DIR, 0.03, Save_VRAM)
Aqui temos a célula de código para execução do treinamento LoRA. Existem algumas variáveis específicas definidas aqui que podemos alterar para afetar o processo de treinamento. Primeiro, se executarmos o treinamento e ele não funcionar da maneira que desejamos, podemos retomar o treinamento usando a variável Resume_Training
. Em seguida, a contagem de Training_Epochs
nos permite estender o número total de vezes que o processo de treinamento analisa cada imagem individual. Podemos ajustar a taxa de aprendizagem conforme necessário para melhorar a aprendizagem em processos de treinamento mais longos ou mais curtos, dentro dos limites. Por fim, altere LoRA_Dim
para 128 e certifique-se de que a variável Save_VRAM
seja a chave para mudar para True
. Caso contrário, será difícil executar na GPU gratuita.
Depois de escolhermos nossas configurações, podemos executar a célula. Posteriormente, o ponto de verificação do modelo será salvo automaticamente nos lugares certos para o ComfyUI ou AUTOMATIC1111 Web UI.
Agora que concluímos o treinamento, podemos acessar o ComfyUI ou o Stable Diffusion Web UI para executar nosso LoRA. Isso simplificará o teste do modelo e a iteração em nosso procedimento de treinamento.
Executando o modelo LoRA com Stable Diffusion XL
Agora que concluímos o treinamento, podemos acessar o ComfyUI ou o Stable Diffusion Web UI para executar nosso LoRA. Isso simplificará o teste do modelo e a iteração em nosso procedimento de treinamento.
User = ""
Password= ""
Add credentials to your Gradio interface (optional).
Download_SDXL_Model= True
#-----------------
configf=test(MDLPTH, User, Password, Download_SDXL_Model)
!python /notebooks/sd/stable-diffusion-webui/webui.py $configf
Usaremos a UI AUTOMATIC1111 para este exemplo, então role para baixo até a penúltima célula de código e execute-a. Isso configurará automaticamente a UI da Web para nós e criará um link compartilhável pelo qual podemos acessar a UI da Web a partir de qualquer navegador da web. Clique no link e abra a UI da Web.
A partir daqui, podemos clicar no pequeno símbolo vermelho e preto com um círculo amarelo abaixo do botão gerar para abrir o menu suspenso LoRA e selecionar a guia LoRA. Em seguida, selecione nosso LoRA recém-treinado (“Exemplo-Sessão” se o nome da sessão não foi alterado). Em seguida, digite um prompt de teste com LoRA no final. Aqui estão alguns exemplos de fotos que tiramos usando o prompt “um bruxo com uma túnica e cajado coloridos, um homem ruivo com sardas vestido como Merlin lora:Exemplo-Sessão:.6”.
Como podemos ver, as características centrais do sujeito original são mantidas neste novo contexto fornecido pelo modelo SD. Teste vários assuntos de treinamento diferentes e depois solicite os melhores resultados!
Pensamentos finais
O modelo Stable Diffusion XL mostra-se muito promissor. Este projeto, que nos permite treinar modelos LoRA em SD XL, leva essa promessa ainda mais longe, demonstrando como o SD XL está facilmente preparado para substituir os modelos 1.5 como a metodologia de fato para modelagem de difusão de imagens.