Solo una nota: lancé Dream Factory, una actualización significativa de esto. Tiene una GUI (opcional), verdadera compatibilidad simultánea con múltiples GPU, una galería integrada con soporte completo de metadatos EXIF y muchas otras características nuevas.
Dejé de admitir VQGAN y Disco Diffusion para centrarme en Stable Diffusion, por lo que si quieres VQGAN y/o Disco Diffusion debes seguir con esto por ahora. De lo contrario, animo a todos a migrar a Dream Factory. Continuaré corrigiendo errores en este repositorio, pero probablemente no agregaré nuevas funciones en el futuro.
Para automatizar la creación local de grandes lotes de obras de arte generadas por IA. ¡Ponga su(s) GPU(s) a trabajar produciendo obras de arte generadas por IA las 24 horas del día, los 7 días de la semana con la capacidad de automatizar grandes colas de mensajes que combinan temas, estilos/artistas seleccionados por el usuario y más! Más información sobre qué modelos están disponibles después de las fotografías de muestra.
Algunas imágenes de ejemplo que he creado a través de este proceso (éstas están cuidadosamente seleccionadas y nítidas):
Tenga en cuenta que no creé ni entrené los modelos utilizados en este proyecto, ni participé en la codificación original. Simplemente modifiqué las versiones originales de colab para que se ejecuten localmente y agregué algo de soporte para la automatización. Modelos actualmente admitidos, con enlaces a sus implementaciones originales:
Necesitarás una GPU Nvidia, preferiblemente con una cantidad decente de VRAM. 12 GB de VRAM son suficientes para imágenes de salida de 512 x 512, según el modelo y la configuración, y 8 GB deberían ser suficientes para 384 x 384 (¡8 GB deben considerarse un mínimo razonable!). Para generar imágenes de 1024x1024, necesitará ~24 GB de VRAM o más. Generar imágenes pequeñas y luego ampliarlas mediante ESRGAN o algún otro paquete también proporciona muy buenos resultados.
Debería ser posible ejecutarlo en una GPU AMD, pero necesitarás estar en Linux para instalar la versión ROCm de Pytorch. No tengo una GPU AMD para instalar en una máquina Linux, así que no lo he probado yo mismo.
Estas instrucciones se probaron en una computadora de escritorio con Windows 10 con una GPU Nvidia 3080 Ti (12 GB de VRAM) y también en un sistema Ubuntu Server 20.04.3 con una antigua GPU Nvidia Tesla M40 (24 GB de VRAM).
[1] Instale Anaconda, abra la terminal raíz y cree un nuevo entorno (y actívelo):
conda create --name ai-art python=3.9
conda activate ai-art
[2] Instale Pytorch:
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
Tenga en cuenta que puede personalizar su instalación de Pytorch utilizando la herramienta en línea que se encuentra aquí.
[3] Instale otros paquetes de Python necesarios:
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] Clona este repositorio y cambia a su directorio:
git clone https://github.com/rbbrdckybk/ai-art-generator
cd ai-art-generator
Tenga en cuenta que los usuarios de Linux pueden necesitar comillas simples alrededor de la URL en el comando de clonación.
[5] Clonar repositorios adicionales requeridos:
git clone https://github.com/openai/CLIP
git clone https://github.com/CompVis/taming-transformers
[6] Descargue los archivos de punto de control del modelo VQGAN predeterminados previamente entrenados:
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"
Tenga en cuenta que los usuarios de Linux deben reemplazar las comillas dobles en los comandos curl con comillas simples.
[7] (Opcional) Descargue modelos previamente entrenados adicionales:
No son necesarios modelos adicionales, pero le brindan más opciones. Aquí hay una buena lista de modelos previamente entrenados disponibles.
Por ejemplo, si también quisieras el modelo FFHQ (entrenado en caras):
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) Pruebe VQGAN+CLIP:
python vqgan.py -s 128 128 -i 200 -p "a red apple" -o output/output.png
Deberías ver output.png creado en el directorio de salida, que debería parecerse vagamente a una manzana.
[9] Instale paquetes para difusión guiada por CLIP (si solo está interesado en VQGAN+CLIP, puede omitir todo desde aquí hasta el final):
pip install ipywidgets omegaconf torch-fidelity einops wandb opencv-python matplotlib lpips datetime timm
conda install pandas
[10] Repositorios de clones para difusión 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] Descargue los modelos necesarios para la difusión 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"
Tenga en cuenta que los usuarios de Linux deben reemplazar nuevamente las comillas dobles en los comandos curl con comillas simples y reemplazar las barras invertidas de mkdir con barras diagonales.
[12] (Opcional) Pruebe la difusión guiada por CLIP:
python diffusion.py -s 128 128 -i 200 -p "a red apple" -o output.png
Deberías ver output.png creado en el directorio de salida, que debería parecerse vagamente a una manzana.
[13] Repositorio de clonación de Difusión estable (si no estás interesado en SD, puedes omitir todo desde aquí hasta el final):
git clone https://github.com/rbbrdckybk/stable-diffusion
[14] Instale dependencias adicionales requeridas por Stable Diffusion:
pip install diffusers
[15] Descargue el archivo de punto de control previamente entrenado de 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"
Si el comando curl no descarga el punto de control, se bloquea tras un inicio de sesión. Deberá registrarse aquí (solo requiere correo electrónico y nombre) y luego podrá descargar el archivo del punto de control aquí.
Después de la descarga, deberá colocar el archivo .ckpt en el directorio creado anteriormente y nombrarlo model.ckpt .
[16] (Opcional) Prueba de difusión estable:
La forma más sencilla de probar SD es crear un archivo de solicitud simple con !PROCESS = stablediff y un solo asunto. Consulte example-prompts.txt y la siguiente sección para obtener más información. Suponiendo que primero crea un archivo de solicitud simple llamado test.txt , puede probar ejecutando:
python make_art.py test.txt
Las imágenes deben guardarse en el directorio de salida si se realiza correctamente (organizadas en subdirectorios nombrados para la fecha y el archivo de solicitud).
[17] Configure ESRGAN/GFPGAN (si no planea mejorar las imágenes, puede omitir esto y todo lo demás):
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 ..
¡Ya terminaste!
Si recibe errores además de VRAM de GPU insuficiente mientras ejecuta y no ha actualizado su instalación por un tiempo, intente actualizar algunos de los paquetes más importantes, por ejemplo:
pip install transformers -U
Básicamente, sólo necesitas crear un archivo de texto que contenga los temas y estilos que deseas utilizar para generar imágenes. Si tiene 5 temas y 20 estilos en su archivo de solicitud, se creará un total de 100 imágenes de salida (20 imágenes de estilo para cada tema).
Eche un vistazo a example-prompts.txt para ver cómo deberían verse los archivos de aviso. Puedes ignorar todo excepto las áreas [temas] y [estilos] por ahora. Las líneas que comienzan con '#' son comentarios y serán ignoradas, y las líneas que comienzan con '!' son directivas de configuración y se explican en la siguiente sección. Por ahora, simplemente modifica los temas y estilos de ejemplo con lo que quieras usar.
Después de haber completado el archivo example-prompts.txt a tu gusto, simplemente puedes ejecutar:
python make_art.py example-prompts.txt
Dependiendo de su hardware y configuración, cada imagen tardará desde unos segundos hasta algunas horas (en hardware más antiguo) en crearse. Si puede ejecutar Stable Diffusion, lo recomiendo encarecidamente para obtener mejores resultados, tanto en velocidad como en calidad de imagen.
Las imágenes de salida se crean en el directorio salida/[fecha actual]-[nombre de archivo rápido]/ de forma predeterminada. El directorio de salida contendrá un archivo JPG para cada imagen con el nombre del tema y el estilo utilizado para crearla. Entonces, por ejemplo, si tiene "un mono en una motocicleta" como uno de sus temas y "por Picasso" como estilo, la imagen de salida se creará como salida/[fecha actual]-[nombre de archivo rápido]/a -monkey-on-a-motorcycle-by-picasso.jpg (los nombres de archivo variarán un poco según el proceso utilizado).
Puede presionar CTRL+SHIFT+P en cualquier momento para pausar la ejecución (la pausa entrará en vigor cuando la imagen actual termine de renderizarse). Presione CTRL+MAYÚS+P nuevamente para reanudar la pausa. Útil si estás ejecutando esto en tu computadora principal y necesitas usar tu GPU para otra cosa por un tiempo. También puede presionar CTRL+MAYÚS+R para recargar el archivo de solicitud si lo ha cambiado (la cola de trabajo actual se descartará y se creará una nueva a partir del contenido de su archivo de solicitud). Tenga en cuenta que la entrada del teclado solo funciona en Windows.
La configuración utilizada para crear cada imagen se guarda como metadatos en cada archivo JPG de salida de forma predeterminada. Puede volver a leer la información de los metadatos utilizando cualquier utilidad EXIF o simplemente haciendo clic derecho en el archivo de imagen en el Explorador de Windows y seleccionando "propiedades" y luego haciendo clic en el panel de "detalles". El campo "comentarios" contiene el comando utilizado para crear la imagen.
Se pueden incluir directivas en su archivo de avisos para modificar la configuración de todos los avisos que le siguen. Estas directivas de configuración se especifican colocándolas en su propia línea dentro del área [asunto] del archivo de solicitud, en el siguiente formato:
![configuración a cambiar] = [nuevo valor]
Para [configuración para cambiar] , las directivas válidas son:
Algunos ejemplos:
!PROCESS = vqgan
Esto establecerá el proceso actual de generación de imágenes de IA. Las opciones válidas son vqgan para VQGAN+CLIP, difusión para difusión guiada por CLIP (Disco Diffusion) o stablediff para difusión estable.
!CUDA_DEVICE = 0
Esto obligará a utilizar la GPU 0 (el valor predeterminado). Útil si tiene varias GPU: puede ejecutar varias instancias, cada una con su propio archivo de solicitud que especifica una ID de GPU única.
!WIDTH = 384
!HEIGHT = 384
Esto establecerá el tamaño de la imagen de salida en 384x384. Un tamaño de salida mayor requiere más VRAM de GPU. Tenga en cuenta que para la difusión estable estos valores deben ser múltiplos de 64.
!TRANSFORMER = ffhq
Esto le indicará a VQGAN que use el transformador FFHQ (algo mejor en caras), en lugar del predeterminado (vqgan_imagenet_f16_16384). Puede seguir el paso 7 en las instrucciones de configuración anteriores para obtener el transformador ffhq, junto con un enlace a varios otros.
Lo que especifique aquí DEBE existir en el directorio de puntos de control como un archivo .ckpt y .yaml.
!INPUT_IMAGE = samples/face-input.jpg
Esto utilizará samples/face-input.jpg (o cualquier imagen que especifique) como imagen inicial, en lugar del ruido aleatorio predeterminado. Las imágenes de entrada deben tener la misma relación de aspecto que las imágenes de salida para obtener buenos resultados. Tenga en cuenta que cuando se utiliza con Difusión estable, el tamaño de la imagen de salida será el mismo que el de la imagen de entrada (se ignorarán los ajustes de alto/ancho).
!SEED = 42
Esto utilizará 42 como valor inicial de entrada, en lugar de un número aleatorio (el valor predeterminado). Útil para la reproducibilidad: cuando todos los demás parámetros son idénticos, el uso del mismo valor inicial debería producir una imagen idéntica en varias ejecuciones. Establezca en nada o -1 para restablecer el uso de un valor aleatorio.
!INPUT_IMAGE =
Establecer cualquiera de estos valores en nada lo devolverá a su valor predeterminado. Entonces, en este ejemplo, no se utilizará ninguna imagen inicial.
!STEPS = 50
Establece el número de pasos (similar a las iteraciones) cuando se utiliza Difusión estable en 50 (el valor predeterminado). Los valores más altos toman más tiempo y pueden mejorar la calidad de la imagen. Los valores superiores a 100 rara vez producen diferencias notables en comparación con valores inferiores.
!SCALE = 7.5
Establece la escala de guía cuando se utiliza Difusión estable en 7,5 (el valor predeterminado). Los valores más altos (hasta cierto punto, más allá de ~25 resultados pueden ser extraños) harán que la salida se adhiera más a su mensaje.
!SAMPLES = 1
Establece el número de veces que se tomarán muestras cuando se utiliza Difusión estable en 1 (el valor predeterminado). Los valores superiores a 1 provocarán que se creen varias imágenes de salida para cada mensaje con un ligero ahorro de tiempo por imagen. No se requiere ningún costo en GPU VRAM para incrementar esto.
!STRENGTH = 0.75
Establece la influencia de la imagen inicial en 0,75 (el valor predeterminado). Solo es relevante cuando se utiliza Difusión estable con una imagen de entrada. Los valores válidos están entre 0 y 1, donde 1 corresponde a la destrucción completa de la imagen de entrada y 0 corresponde a dejar la imagen inicial completamente intacta. Los valores entre 0,25 y 0,75 tienden a dar resultados interesantes.
!SD_LOW_MEMORY = no
¿Utilizar un repositorio bifurcado con requisitos de memoria de GPU mucho más bajos cuando se utiliza Difusión estable (sí/no)? Configurar esto en Sí cambiará al uso de una versión de SD con memoria optimizada que le permitirá crear imágenes de mayor resolución con mucha menos memoria GPU (las imágenes de 512x512 solo deberían requerir alrededor de 4 GB de VRAM). La desventaja es que la inferencia es mucho más lenta en comparación con el repositorio oficial predeterminado. A modo de comparación: en un RTX 3060, se tarda unos 12 segundos en crear una imagen de 512x512 con la configuración predeterminada; con !SD_LOW_MEMORY = yes , la misma imagen tarda más de un minuto. Se recomienda mantener esto desactivado a menos que tenga menos de 8 GB de VRAM de GPU o quiera experimentar creando imágenes más grandes antes de ampliarlas.
!USE_UPSCALE = no
¿Mejorar automáticamente las imágenes creadas con Stable Diffusion (sí/no)? Utiliza ESRGAN/GFPGAN (ver configuraciones adicionales a continuación).
!UPSCALE_AMOUNT = 2
¿Cuánto escalar cuando !USE_UPSCALE = yes . El valor predeterminado es 2,0x; los valores más altos requieren más VRAM y tiempo.
!UPSCALE_FACE_ENH = no
Si se debe utilizar o no GFPGAN (frente a ESRGAN predeterminado) al realizar la ampliación. GFPGAN proporciona los mejores resultados con rostros, pero puede proporcionar resultados ligeramente peores si se usa en sujetos que no son rostros.
!UPSCALE_KEEP_ORG = no
¿Conservar la imagen original sin modificar al ampliar (sí/no)? Si se establece en no (el valor predeterminado), se eliminará la imagen original. Si se establece en sí, la imagen original se guardará en un subdirectorio /original de la carpeta de salida de la imagen.
!REPEAT = no
Cuando finalicen todos los trabajos en el archivo de solicitud, ¿reiniciar nuevamente en la parte superior del archivo (sí/no)? El valor predeterminado es no, lo que simplemente finalizará la ejecución cuando se completen todos los trabajos.
TODO: finalizar ejemplos de configuración y agregar consejos/ejemplos de uso, documentar random_art.py