paint-brush
Criando sua própria I.A. Gerador de Imagens com Difusão Latentepor@lanolinoil
3,835 leituras
3,835 leituras

Criando sua própria I.A. Gerador de Imagens com Difusão Latente

por Lanolinoil9m2022/08/16
Read on Terminal Reader
Read this story w/o Javascript

Muito longo; Para ler

Execute seus próprios prompts de texto para imagem com CUDA, muito espaço em disco e uma quantidade insana de memória. Você precisa de um sistema Linux com uma placa habilitada para CUDA para fazer isso funcionar até o fim. Existem 2 técnicas de geração de imagem possíveis com difusão latente. Vamos instalar e dar uma olhada nos modelos txt-2img e txt2-img que configuraremos. O modelo RAD usa um banco de dados de imagens e denis e o aprimora para uma referência configurável. Isso parece significar que é menos bom como propósito geral, mas pode ser usado com um conjunto de treinamento específico.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Criando sua própria I.A. Gerador de Imagens com Difusão Latente
Lanolinoil HackerNoon profile picture

Homebrew DALL-E

Nesta postagem, veremos como configurar a execução de seu próprio gerador de imagens de IA. Você precisa de um sistema Linux com uma placa habilitada para CUDA para fazer isso funcionar até o fim. Eu consegui o script txt-2img básico funcionando no Windows. Infelizmente, para os modelos de difusão aumentada de recuperação lançados em julho, você precisa de scann para indexar o conjunto de dados openimages, que está disponível apenas no Linux. WSL funcionou bem para mim.


cão leão - modelo rdm

cão leão - modelo rdm

cão leão - modelo rdm

cão leão - modelo rdm

Aqui está mais ou menos o que eu presumo que você precisará:

  • Linux (WSL bem)
  • 11.3 Gráficos CUDA
  • = 32GB RAM

  • 50 GB de espaço em disco (~ 30 GB sem openimages)
  • Placa da série 3xxx (estou apenas supondo aqui. Tudo isso está sendo feito com um 3090 FE)

Difusão Latente

Eu tropecei aleatoriamente no repositório de difusão latente enquanto navegava em subreddits de IA. Algumas postagens mencionaram isso e eu não sabia o que era, então fui pesquisar no Google.


Não sou um cientista da computação, matemático ou qualquer uma das coisas que seriam necessárias para realmente entender o que está acontecendo aqui. O artigo sobre os novos modelos RAD é compreensível e interessante, mas ainda não fiz muita pesquisa além disso.

imagem-20220807154208076

Text-to-image vs. RAD

Existem 2 técnicas de geração de imagem possíveis com difusão latente. Vamos instalar e dar uma olhada em ambos.


Acredito que o modelo txt2-img que configuraremos primeiro é o que estamos acostumados com outras ferramentas de geração de imagem on-line - ele cria um clipe de imagem de super baixa resolução que é uma boa correspondência de prompt e reduz e aumenta a escala.


O modelo RAD usa um banco de dados configurável de imagens como referência E faz a difusão como estamos acostumados. Isso parece significar que é menos bom como um gerador de uso geral, mas pode ser usado com um conjunto de treinamento específico que você poderia criar de maneira viável. Vou tentar isso no futuro.


O RAD também gera imagens de 768X768, o que é bastante impressionante.

melão gigante na praia

Melão gigante na praia


Instruções de instalação

Text-to-Image

  • Certifique-se de ter o CUDA 11.3 instalado e conda funciona em seu shell. Você pode obter Conda aqui

  • (Re)instale o Pytorch agora , para que você não acabe no inferno da dependência mais tarde. Eu fiz isso via pip , mas o conda também pode funcionar.

  • Clone o repositório em uma unidade com muito espaço livre

  • cd no repositório e execute:

     conda env create -f environment.yaml conda activate ldm

    Isso configurará o ambiente inicial. Se você receber erros com o Pytorch posteriormente e precisar reinstalá-lo, volte para o environment.yaml e reinstale usando as versões de pacote corretas.

  • Baixe o modelo e você está pronto para ir, desde que suas dependências de tocha estejam todas configuradas corretamente.

 mkdir -p models/ldm/text2img-large/ wget -O models/ldm/text2img-large/model.ckpt https://ommer-lab.com/files/latent-diffusion/nitro/txt2img-f8-large/model.ckpt

Você deve ser capaz de amostrar imagens agora usando:

 python scripts/txt2img.py --prompt "my cool image"

Certifique-se de ver as opções que você pode definir no README.


Você pode usar este script bash para facilitar a execução de tudo a partir de um shell. Você pode incluir isso em seu arquivo ~/.bashrc e reabrir seu shell. Certifique-se de alterar os 3 caminhos para atender às suas necessidades. Veremos o PLMS mais tarde.


 function txt2img() { if [ $# -eq 0 ]; then echo "Usage: diffuse '[prompt]' [--plms]" exit 1 fi cd /mnt/c/diffusion/latent-diffusion; conda activate ldm; if [ $2 = '--plms' ]; then python scripts/txt2img.py --prompt $1 --outdir '/mnt/g/My Drive/AI Image Tests/text2img' --plms --n_iter 4 --ddim_eta 0.0 else python scripts/txt2img.py --prompt $1 --outdir '/mnt/g/My Drive/AI Image Tests/text2img' --n_iter 4 --ddim_eta 0.0 fi }


As imagens são 512X512 por padrão. Você pode usar este notebook de Júpiter para melhorar as imagens com resultados muito bons.

Solução de problemas

  • Se você receber comandos de execução de erros de memória CUDA, tente diminuir o tamanho do lote. Use o htop para solucionar problemas/exibir o uso de memória.
  • Se estiver usando o WSL, certifique-se de que toda a sua RAM esteja disponível para Linux.
  • Se você receber erros relacionados à tocha, provavelmente precisará reinstalar o Pytorch. Isso provavelmente causará outros problemas com os pacotes. Verifique o ambiente.yaml e instale manualmente as versões corretas do pacote com pip e/ou conda (fiz os dois e não tenho certeza de qual fez tudo funcionar)

imagem-20220807155754576

imagem-20220807155807229


RDM

Você pode ler mais sobre o RDM aqui . Como dito antes, combina essencialmente um banco de dados de imagens com descrições de Clip com o processo de difusão existente, pelo que entendi. Esta parte leva muito mais tempo para começar a funcionar.


Observe que este modelo, especialmente ao usar o treinamento openimages, é melhor para recriar coisas reais e não parece muito bom (ainda) e criar as imagens estranhas com as quais estamos acostumados a partir dos modelos de difusão.


  • Faça o modelo Text-to-Image funcionar primeiro

  • Instale novos pacotes e baixe o modelo de treinamento.

     pip install transformers==4.19.2 scann kornia==0.6.4 torchmetrics==0.6.0 pip install git+https://github.com/arogozhnikov/einops.git mkdir -p models/rdm/rdm768x768/ wget -O models/rdm/rdm768x768/model.ckpt https://ommer-lab.com/files/rdm/model.ckpt
  • Teste tudo está funcionando até agora com

     python scripts/knn2img.py --prompt "I'm a computer"
  • Se tudo correu bem, você deve ver um texto de sucesso em seu shell. Agora precisamos baixar todos os índices/modelos de imagem. O zip do openimages é de 11 GB. Os dados do ArtBench são bem pequenos.

     mkdir -p data/rdm/retrieval_databases wget -O data/rdm/retrieval_databases/artbench.zip https://ommer-lab.com/files/rdm/artbench_databases.zip wget -O data/rdm/retrieval_databases/openimages.zip https://ommer-lab.com/files/rdm/openimages_database.zip unzip data/rdm/retrieval_databases/artbench.zip -d data/rdm/retrieval_databases/ unzip data/rdm/retrieval_databases/openimages.zip -d data/rdm/retrieval_databases/ mkdir -p data/rdm/searchers wget -O data/rdm/searchers/artbench.zip https://ommer-lab.com/files/rdm/artbench_searchers.zip unzip data/rdm/searchers/artbench.zip -d data/rdm/searchers


Estamos prontos para usar os modelos Artbench agora (que funcionam muito bem em meus testes limitados), mas o que realmente queremos é usar o modelo massivo de imagens abertas como nossa referência. Baixamos os dados, mas precisamos criar o índice.


Se você quiser testar o banco de dados Artbench, execute

 python scripts/knn2img.py --prompt "A blue pig" --use_neighbors --knn 20 

imagem-20220807155912575

imagem-20220807155927854


Índice Openimages

A menos que você tenha um supercomputador, o terrível gerenciamento de memória no multiprocessamento python (pelo que posso dizer) nos impedirá de usar os 4 arquivos que descompactamos com o script do repositório para indexá-los. Tudo o mais que tentei, os processos ficariam sem memória.


Felizmente, só precisamos concatenar os arquivos. Você pode excluir os arquivos de peças antigas depois, se desejar. Também precisamos mover os arquivos de peça para fora da pasta openimages.

 cd data/rdm/retrieval_databases/openimages/ cat 2000000x768_part1.npz 2000000x768_part2.npz 2000000x768_part3.npz 2000000x768_part4.npz > 2000000x768.npz mv 2000000x768_* ~/temp cd ../../../../

Agora, quando executarmos o script de treinamento, não devemos ficar sem memória. Eu acho que isso é algum problema em sua função de vários arquivos no script de treinamento.

 python scripts/train_searcher.py
  • Precisamos alterar o tamanho do lote em scripts/knn2img.py para não ficarmos sem memória da GPU. Pode ser necessário diminuir para 1, mas consegui definir para 2 em um 3090.

  • Abra scripts/knn2img.py em um editor

  • Vá para a linha 243 ou encontre “n_samples”

  • Altere o valor padrão para 1 ou 2 e salve

  • Você também pode fazer isso usando o parâmetro de linha de comando, mas como nunca funcionará para mim, eu queria alterar o valor padrão. Observe que, se você atualizar o repositório no futuro, isso provavelmente será substituído.


Agora podemos gerar imagens RDM usando o banco de dados openimages:

 python scripts/knn2img.py --prompt "A blue pig" --database openimages --use_neighbors --knn 20


Aqui está um script ~/.bashrc para executá-lo convenientemente. Novamente, certifique-se de alterar os 3 caminhos para atender às suas necessidades:

 function diffuse() { if [ $# -eq 0 ]; then echo "Usage: diffuse '[prompt]' [--plms]" exit 1 fi cd /mnt/c/diffusion/latent-diffusion; conda activate ldm; if [ $2 = '--plms' ]; then python scripts/knn2img.py --database openimages --prompt $1 --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20 --plms else python scripts/knn2img.py --database openimages --prompt $1 --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20 fi }

Acelerando as coisas

Você também pode executar prompts em lotes criando um arquivo (neste caso prompts.txt ) e apontando o script para ele com o parâmetro –from-file como este

 python scripts/knn2img.py --database openimages --from-file ./prompts.txt --use_neighbors --outdir '/mnt/g/My Drive/AI Image Tests/RDM' --knn 20

amostra de prompts.txt

 prompt 1 prompt 2 prompt 3


Isso deve economizar muito tempo se você estiver executando muitas consultas, pois o modelo só é carregado uma vez. O modelo de texto para imagem não tem essa opção.

carro esportivo no deserto

carro esportivo no deserto

carro esportivo no deserto


Teste inicial e PLMS

Abaixo estão alguns resultados iniciais de ambos os modelos com PLMS ativado e desativado. O PLMS deve tornar as coisas mais rápidas. Por enquanto, não mediremos o aumento de velocidade, mas analisaremos subjetivamente a qualidade/resultados da imagem.

Como o modelo RDM fará apenas 2 fotos por vez para o meu sistema, incluí as duas fotos em vez de uma grade para esse modelo.

Certamente farei testes mais específicos no futuro e esses modelos serão incluídos em futuras postagens de comparação.


Uma casa de madeira em uma colina, fotografia de paisagem

Texto para imagem

sem plms

com plms

imagem-20220807150052836

imagem-20220807153545252


RDM

sem plms

com plms

imagem-20220807145854952

imagem-20220807145920778

imagem-20220807145911367

imagem-20220807145931866


Um sinal de parada roxo


Texto para imagem

sem plms

com plms

imagem-20220807154729984

imagem-20220807153711466

RDM

sem plms

com plms

imagem-20220807150500598

imagem-20220807153000850

imagem-20220807151421393

imagem-20220807153013778


toca da raposa, arte digital

Texto para imagem

sem plms

com plms

imagem-20220807155228088

imagem-20220807155634227


RDM

sem plms

com plms

imagem-20220807151441359

imagem-20220807152859265

imagem-20220807152235267

imagem-20220807152911615


ganhando o grande jogo, fotografia premiada

Texto para imagem

sem plms

com plms

imagem-20220807160007336

imagem-20220807160228471

RDM

sem plms

com plms

imagem-20220807151456027

imagem-20220807152928304

imagem-20220807152216729

imagem-20220807152940229


um carro esportivo dirigindo em dunas de areia

Texto para imagem

sem plms

com plms

imagem-20220807160557241

imagem-20220807160838768

RDM

sem plms

com plms

imagem-20220807151401781

imagem-20220807152825508

imagem-20220807152200386

imagem-20220807152839511


Um gerador de imagens para chamar de seu

E aí está - sem mais créditos ou limites mensais, apenas a pura geração de imagens de IA por conta própria. Depois que eu descobrir algumas configurações de ajuste e criar meu próprio banco de dados de treinamento de imagem, provavelmente falaremos sobre isso novamente.


Esperançosamente, com alguns ajustes e novos lançamentos/modelos, isso se aproximará do fator WOW que o DALL-E tem.

panda em uma capa vermelha


Publicado também aqui .