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.
Aqui está mais ou menos o que eu presumo que você precisará:
= 32GB RAM
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.
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.
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.
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.
htop
para solucionar problemas/exibir o uso de memória.pip
e/ou conda
(fiz os dois e não tenho certeza de qual fez tudo funcionar) 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
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 }
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.
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 |
---|---|
RDM
sem plms | com plms |
---|---|
Um sinal de parada roxo
Texto para imagem
sem plms | com plms |
---|---|
RDM
sem plms | com plms |
---|---|
toca da raposa, arte digital
Texto para imagem
sem plms | com plms |
---|---|
RDM
sem plms | com plms |
---|---|
ganhando o grande jogo, fotografia premiada
Texto para imagem
sem plms | com plms |
---|---|
RDM
sem plms | com plms |
---|---|
um carro esportivo dirigindo em dunas de areia
Texto para imagem
sem plms | com plms |
---|---|
RDM
sem plms | com plms |
---|---|
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.
Publicado também aqui .