Apenas uma observação: lancei o Dream Factory, uma atualização significativa para isso. Ele tem uma GUI (opcional), suporte multi-GPU simultâneo verdadeiro, uma galeria integrada com suporte completo a metadados EXIF e muitos outros novos recursos.
Abandonei o suporte ao VQGAN e ao Disco Diffusion para focar no Stable Diffusion, então se você quiser o VQGAN e/ou o Disco Diffusion, você deve continuar com isso por enquanto. Caso contrário, encorajo todos a migrarem para o Dream Factory! Continuarei corrigindo bugs neste repositório, mas provavelmente não adicionarei novos recursos daqui para frente.
Para automatizar a criação local de grandes lotes de obras de arte geradas por IA. Coloque sua(s) GPU(s) para trabalhar produzindo obras de arte geradas por IA 24 horas por dia, 7 dias por semana, com a capacidade de automatizar grandes filas de prompts combinando assuntos, estilos/artistas selecionados pelo usuário e muito mais! Mais informações sobre quais modelos estão disponíveis após as fotos de amostra.
Alguns exemplos de imagens que criei por meio deste processo (escolhidas a dedo e nítidas):
Observe que não criei ou treinei os modelos usados neste projeto, nem estive envolvido na codificação original. Simplesmente modifiquei as versões originais do Colab para que sejam executadas localmente e adicionei algum suporte para automação. Modelos atualmente suportados, com links para suas implementações originais:
Você precisará de uma GPU Nvidia, de preferência com uma quantidade razoável de VRAM. 12 GB de VRAM são suficientes para imagens de saída de 512x512, dependendo do modelo e das configurações, e 8 GB devem ser suficientes para 384x384 (8 GB devem ser considerados um mínimo razoável!). Para gerar imagens de 1024x1024, você precisará de aproximadamente 24 GB de VRAM ou mais. Gerar imagens pequenas e depois aumentar a escala via ESRGAN ou algum outro pacote também fornece resultados muito bons.
Deve ser possível rodar em uma GPU AMD, mas você precisará estar no Linux para instalar a versão ROCm do Pytorch. Não tenho uma GPU AMD para instalar em uma máquina Linux, então não testei isso sozinho.
Estas instruções foram testadas em um desktop Windows 10 com uma GPU Nvidia 3080 Ti (VRAM de 12 GB) e também em um sistema Ubuntu Server 20.04.3 com uma GPU Nvidia Tesla M40 antiga (VRAM de 24 GB).
[1] Instale o Anaconda, abra o terminal root e crie um novo ambiente (e ative-o):
conda create --name ai-art python=3.9
conda activate ai-art
[2] Instale o Pytorch:
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
Observe que você pode personalizar a instalação do Pytorch usando a ferramenta online localizada aqui.
[3] Instale outros pacotes Python necessários:
conda install -c anaconda git urllib3
pip install transformers keyboard pillow ftfy regex tqdm omegaconf pytorch-lightning IPython kornia imageio imageio-ffmpeg einops torch_optimizer
[4] Clone este repositório e mude para seu diretório:
git clone https://github.com/rbbrdckybk/ai-art-generator
cd ai-art-generator
Observe que os usuários do Linux podem precisar de aspas simples no URL no comando clone.
[5] Clone repositórios adicionais necessários:
git clone https://github.com/openai/CLIP
git clone https://github.com/CompVis/taming-transformers
[6] Baixe os arquivos de ponto de verificação do modelo pré-treinado VQGAN padrão:
mkdir checkpoints
curl -L -o checkpoints/vqgan_imagenet_f16_16384.yaml -C - "https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fconfigs%2Fmodel.yaml&dl=1"
curl -L -o checkpoints/vqgan_imagenet_f16_16384.ckpt -C - "https://heibox.uni-heidelberg.de/d/a7530b09fed84f80a887/files/?p=%2Fckpts%2Flast.ckpt&dl=1"
Observe que os usuários do Linux devem substituir as aspas duplas nos comandos curl por aspas simples.
[7] (Opcional) Baixe modelos pré-treinados adicionais:
Modelos adicionais não são necessários, mas oferecem mais opções. Aqui está uma boa lista de modelos pré-treinados disponíveis.
Por exemplo, se você também quisesse o modelo FFHQ (treinado em rostos):
curl -L -o checkpoints/ffhq.yaml -C - "https://app.koofr.net/content/links/0fc005bf-3dca-4079-9d40-cdf38d42cd7a/files/get/2021-04-23T18-19-01-project.yaml?path=%2F2021-04-23T18-19-01_ffhq_transformer%2Fconfigs%2F2021-04-23T18-19-01-project.yaml&force"
curl -L -o checkpoints/ffhq.ckpt -C - "https://app.koofr.net/content/links/0fc005bf-3dca-4079-9d40-cdf38d42cd7a/files/get/last.ckpt?path=%2F2021-04-23T18-19-01_ffhq_transformer%2Fcheckpoints%2Flast.ckpt"
[8] (Opcional) Teste VQGAN+CLIP:
python vqgan.py -s 128 128 -i 200 -p "a red apple" -o output/output.png
Você deverá ver output.png criado no diretório de saída, que deve se parecer vagamente com uma maçã.
[9] Instale pacotes para difusão guiada por CLIP (se você estiver interessado apenas em VQGAN+CLIP, você pode pular tudo daqui até o final):
pip install ipywidgets omegaconf torch-fidelity einops wandb opencv-python matplotlib lpips datetime timm
conda install pandas
[10] Repositórios clones para difusão guiada por CLIP:
git clone https://github.com/crowsonkb/guided-diffusion
git clone https://github.com/assafshocher/ResizeRight
git clone https://github.com/CompVis/latent-diffusion
[11] Baixe os modelos necessários para difusão guiada por CLIP:
mkdir contentmodels
curl -L -o content/models/256x256_diffusion_uncond.pt -C - "https://openaipublic.blob.core.windows.net/diffusion/jul-2021/256x256_diffusion_uncond.pt"
curl -L -o content/models/512x512_diffusion_uncond_finetune_008100.pt -C - "http://batbot.tv/ai/models/guided-diffusion/512x512_diffusion_uncond_finetune_008100.pt"
curl -L -o content/models/secondary_model_imagenet_2.pth -C - "https://ipfs.pollinations.ai/ipfs/bafybeibaawhhk7fhyhvmm7x24zwwkeuocuizbqbcg5nqx64jq42j75rdiy/secondary_model_imagenet_2.pth"
mkdir contentmodelssuperres
curl -L -o content/models/superres/project.yaml -C - "https://heibox.uni-heidelberg.de/f/31a76b13ea27482981b4/?dl=1"
curl -L -o content/models/superres/last.ckpt -C - "https://heibox.uni-heidelberg.de/f/578df07c8fc04ffbadf3/?dl=1"
Observe que os usuários do Linux devem substituir novamente as aspas duplas nos comandos curl por aspas simples e substituir as barras invertidas mkdir por barras.
[12] (Opcional) Teste a difusão guiada por CLIP:
python diffusion.py -s 128 128 -i 200 -p "a red apple" -o output.png
Você deverá ver output.png criado no diretório de saída, que deve se parecer vagamente com uma maçã.
[13] Clone o repositório Stable Diffusion (se você não estiver interessado em SD, você pode pular tudo daqui até o final):
git clone https://github.com/rbbrdckybk/stable-diffusion
[14] Instale dependências adicionais exigidas pelo Stable Diffusion:
pip install diffusers
[15] Baixe o arquivo do ponto de verificação pré-treinado do Stable Diffusion:
mkdir stable-diffusionmodelsldmstable-diffusion-v1
curl -L -o stable-diffusion/models/ldm/stable-diffusion-v1/model.ckpt -C - "https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt"
Se o comando curl não baixar o ponto de verificação, ele estará protegido por um login. Você precisará se registrar aqui (requer apenas e-mail e nome) e então poderá baixar o arquivo do checkpoint aqui.
Após o download, você precisará colocar o arquivo .ckpt no diretório criado acima e nomeá-lo model.ckpt .
[16] (Opcional) Teste de difusão estável:
A maneira mais fácil de testar SD é criar um arquivo de prompt simples com !PROCESS = stablediff e um único assunto. Consulte example-prompts.txt e a próxima seção para obter mais informações. Supondo que você crie primeiro um arquivo de prompt simples chamado test.txt , você pode testar executando:
python make_art.py test.txt
As imagens devem ser salvas no diretório de saída se forem bem-sucedidas (organizadas em subdiretórios nomeados para a data e o arquivo de prompt).
[17] Configure ESRGAN/GFPGAN (se você não está planejando fazer upscale de imagens, você pode pular isso e tudo mais):
git clone https://github.com/xinntao/Real-ESRGAN
pip install basicsr facexlib gfpgan
cd Real-ESRGAN
curl -L -o experiments/pretrained_models/RealESRGAN_x4plus.pth -C - "https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth"
python setup.py develop
cd ..
Você terminou!
Se você estiver recebendo erros além de GPU VRAM insuficiente durante a execução e não atualizar sua instalação há algum tempo, tente atualizar alguns dos pacotes mais importantes, por exemplo:
pip install transformers -U
Basicamente, você só precisa criar um arquivo de texto contendo os assuntos e estilos que deseja usar para gerar as imagens. Se você tiver 5 assuntos e 20 estilos em seu arquivo de prompt, um total de 100 imagens de saída serão criadas (20 imagens de estilo para cada assunto).
Dê uma olhada em example-prompts.txt para ver como devem ser os arquivos de prompt. Você pode ignorar tudo, exceto as áreas [assuntos] e [estilos] por enquanto. As linhas que começam com '#' são comentários e serão ignoradas, e as linhas que começam com '!' são diretivas de configurações e são explicadas na próxima seção. Por enquanto, basta modificar os assuntos e estilos de exemplo com o que você gostaria de usar.
Depois de preencher example-prompts.txt conforme sua preferência, você pode simplesmente executar:
python make_art.py example-prompts.txt
Dependendo do seu hardware e configurações, cada imagem levará de alguns segundos a algumas horas (em hardware mais antigo) para ser criada. Se você pode executar o Stable Diffusion, eu o recomendo fortemente para obter os melhores resultados - tanto em velocidade quanto em qualidade de imagem.
As imagens de saída são criadas no diretório output/[data atual]-[nome do arquivo do prompt]/ por padrão. O diretório de saída conterá um arquivo JPG para cada imagem nomeada de acordo com o assunto e estilo usado para criá-la. Então, por exemplo, se você tiver "um macaco em uma motocicleta" como um de seus temas e "por Picasso" como estilo, a imagem de saída será criada como saída/[data atual]-[nome do arquivo do prompt]/a -monkey-on-a-motorcycle-by-picasso.jpg (os nomes dos arquivos variam um pouco dependendo do processo usado).
Você pode pressionar CTRL+SHIFT+P a qualquer momento para pausar a execução (a pausa entrará em vigor quando a imagem atual terminar de renderizar). Pressione CTRL+SHIFT+P novamente para retomar. Útil se você estiver executando isso em seu computador principal e precisar usar sua GPU para outra coisa por algum tempo. Você também pode pressionar CTRL+SHIFT+R para recarregar o arquivo de prompt se você o tiver alterado (a fila de trabalho atual será descartada e uma nova será criada a partir do conteúdo do seu arquivo de prompt). Observe que a entrada do teclado só funciona no Windows.
As configurações usadas para criar cada imagem são salvas como metadados em cada arquivo JPG de saída por padrão. Você pode ler as informações de metadados usando qualquer utilitário EXIF ou simplesmente clicando com o botão direito do mouse no arquivo de imagem no Windows Explorer e selecionando "propriedades" e clicando no painel "detalhes". O campo “comentários” contém o comando usado para criar a imagem.
As diretivas podem ser incluídas em seu arquivo de prompt para modificar as configurações de todos os prompts que o seguem. Essas diretivas de configurações são especificadas colocando-as em sua própria linha dentro da área [assunto] do arquivo de prompt, no seguinte formato:
![configuração a ser alterada] = [novo valor]
Para [setting to change] , as diretivas válidas são:
Alguns exemplos:
!PROCESS = vqgan
Isso definirá o processo atual de geração de imagens de IA. As opções válidas são vqgan para VQGAN+CLIP, difusão para difusão guiada por CLIP (Disco Diffusion) ou stablediff para difusão estável.
!CUDA_DEVICE = 0
Isso forçará o uso da GPU 0 (o padrão). Útil se você tiver várias GPUs - você pode executar várias instâncias, cada uma com seu próprio arquivo de prompt especificando um ID de GPU exclusivo.
!WIDTH = 384
!HEIGHT = 384
Isso definirá o tamanho da imagem de saída para 384x384. Um tamanho de saída maior requer mais GPU VRAM. Observe que para Difusão Estável esses valores devem ser múltiplos de 64.
!TRANSFORMER = ffhq
Isso dirá ao VQGAN para usar o transformador FFHQ (um pouco melhor nas faces), em vez do padrão (vqgan_imagenet_f16_16384). Você pode seguir a etapa 7 nas instruções de configuração acima para obter o transformador ffhq, junto com um link para vários outros.
Tudo o que você especificar aqui DEVE existir no diretório de pontos de verificação como um arquivo .ckpt e .yaml.
!INPUT_IMAGE = samples/face-input.jpg
Isso usará samples/face-input.jpg (ou qualquer imagem que você especificar) como imagem inicial, em vez do ruído aleatório padrão. As imagens de entrada devem ter a mesma proporção das imagens de saída para obter bons resultados. Observe que ao usar com Difusão Estável, o tamanho da imagem de saída será igual à imagem de entrada (suas configurações de altura/largura serão ignoradas).
!SEED = 42
Isso usará 42 como valor inicial de entrada, em vez de um número aleatório (o padrão). Útil para reprodutibilidade - quando todos os outros parâmetros são idênticos, usar o mesmo valor inicial deve produzir uma imagem idêntica em várias execuções. Defina como nada ou -1 para redefinir o uso de um valor aleatório.
!INPUT_IMAGE =
Definir qualquer um desses valores como nada retornará ao padrão. Portanto, neste exemplo, nenhuma imagem inicial será usada.
!STEPS = 50
Define o número de etapas (semelhante às iterações) ao usar a Difusão Estável como 50 (o padrão). Valores mais altos levam mais tempo e podem melhorar a qualidade da imagem. Valores acima de 100 raramente produzem diferenças perceptíveis em comparação com valores mais baixos.
!SCALE = 7.5
Define a escala de orientação ao usar Difusão Estável para 7,5 (o padrão). Valores mais altos (até certo ponto, além de ~25 resultados podem ser estranhos) farão com que a saída siga mais de perto o seu prompt.
!SAMPLES = 1
Define o número de vezes para amostragem ao usar Difusão Estável como 1 (o padrão). Valores acima de 1 farão com que diversas imagens de saída sejam criadas para cada prompt, com uma pequena economia de tempo por imagem. Não há custo em GPU VRAM necessário para incrementar isso.
!STRENGTH = 0.75
Define a influência da imagem inicial como 0,75 (o padrão). Relevante apenas ao usar Difusão Estável com uma imagem de entrada. Os valores válidos estão entre 0-1, com 1 correspondendo à destruição completa da imagem de entrada e 0 correspondendo a deixar a imagem inicial completamente intacta. Valores entre 0,25 e 0,75 tendem a dar resultados interessantes.
!SD_LOW_MEMORY = no
Usar um repositório bifurcado com requisitos de memória de GPU muito mais baixos ao usar Difusão Estável (sim/não)? Definir isso como sim mudará para o uso de uma versão SD com otimização de memória que permitirá criar imagens de resolução mais alta com muito menos memória GPU (imagens 512x512 devem exigir apenas cerca de 4 GB de VRAM). A desvantagem é que a inferência é muito mais lenta em comparação com o repositório oficial padrão. Para efeito de comparação: em um RTX 3060, uma imagem de 512x512 nas configurações padrão leva cerca de 12 segundos para ser criada; com !SD_LOW_MEMORY = yes , a mesma imagem leva mais de um minuto. Recomendamos manter isso desativado, a menos que você tenha menos de 8 GB de VRAM de GPU ou queira experimentar a criação de imagens maiores antes de aumentar a escala.
!USE_UPSCALE = no
Aprimorar automaticamente imagens criadas com Difusão Estável (sim/não)? Usa ESRGAN/GFPGAN (veja configurações adicionais abaixo).
!UPSCALE_AMOUNT = 2
Quanto escalar quando !USE_UPSCALE = yes . O padrão é 2,0x; valores mais altos requerem mais VRAM e tempo.
!UPSCALE_FACE_ENH = no
Se deve ou não usar GFPGAN (vs ESRGAN padrão) durante o upscaling. O GFPGAN fornece os melhores resultados com rostos, mas pode fornecer resultados um pouco piores se usado em assuntos que não sejam rostos.
!UPSCALE_KEEP_ORG = no
Manter a imagem original não modificada ao aumentar a escala (sim/não)? Se definido como não (o padrão), a imagem original será excluída. Se definido como sim, a imagem original será salva em um subdiretório /original da pasta de saída da imagem.
!REPEAT = no
Quando todos os trabalhos no arquivo de prompt forem concluídos, reinicie no início do arquivo (sim/não)? O padrão é não, o que simplesmente encerrará a execução quando todos os trabalhos forem concluídos.
TODO: conclua os exemplos de configurações e adicione dicas/exemplos de uso, documente random_art.py