Ayuda:Generar imágenes con VQGAN+CLIP

De Bestiario del Hypogripho
(Redirigido desde «Generar imágenes con VQGAN»)

Este artículo tiene contenido abordado desde la perspectiva de la "vida real".     Este artículo se compone de contenidos recopilados por Jakeukalane.  Este artículo se compone de contenidos recopilados por Avengium (Ángel Montero Lamas).  Este artículo está ilustrado con imágenes de Khang Le, de Jakeukalane, de licencia Creative Commons y nadie más.  Este artículo tiene bibliografía real que sustenta su contenido en todo o en parte.  Este artículo es de dificultad intraficcional negligible o nula (0). Debería ser apto para todo público. 

VQGAN es una red generativa antagónica. Las Redes Neuronales Generativas Antagónicas (o Adversarias), también conocidas como GANs (Generative Adversarial Networks, en inglés), son una clase de algoritmos de inteligencia artificial que se utilizan en el aprendizaje no supervisado, implementadas por un sistema de dos redes neuronales que compiten mutuamente en una especie de juego de suma cero. Fueron presentadas por Ian Goodfellow et al. en 2014.

Esta técnica puede generar imágenes que parecen auténticas a observadores humanos. Por ejemplo, una imagen sintética de un gato que consiga engañar al discriminador (una de las partes funcionales del algoritmo), es probable que lleve a una persona cualquiera a aceptarlo como una fotografía real. La diferencia de VQGAN con redes GAN anteriores es que permite salidas en alta resolución.

CLIP (Contrastive Language Image Pretraining) es otra inteligencia artificial que permite transformar textos en imágenes. Es decir, en VQGAN+CLIP, CLIP introduce entradas de texto a VQGAN. Aquí te explicamos cómo usarlo.

VQGAN+CLIP en Google Colaboratory

Entrando en VQGAN+CLIP (z+quantize method con augmentations).ipynb realizada en Google Colaboratory por Katherine Crowson puedes arrancar un modelo VQGAN preformateado con unos valores y combinado con un modelo CLIP. Aquí te explicamos cómo hacerlo funcionar. Si prefieres una explicación en vídeo lee los enlaces externos de esta página. El canal Cogitare en YouTube te muestra cómo usarlo y el canal Dot CSV cómo funciona de manera técnica. En el canal de discord de DotCSV siguen proponiendo correcciones diariamente al notebook.

Pasos previos

  • 2) Arriba a la derecha pulsa en Conectar para que se te asigne una máquina.
Botón de Play.
Las celdas se pueden ejecutar una tras otra, sin esperar a que acabe la anterior[1]. Cuando una celda está en espera se muestra así.
  • 3) En la página hay círculos negros con una flecha con apariencia de "Play". Pulsa en estos botones para ejecutar cada una de las celdas.



  • 4) Pulsa en la celda con el texto: Licensed under the MIT License.
  • 5) Pulsa en la celda con el texto: !nvidia-smi. Aquí aparecen los datos del PC remoto que va a ejecutar el modelo VQGAN+CLIP. La VRAM puede ser como ésta: 0MiB / 15109MiB. A más VRAM, más poder de renderizado. Con menos de 15109MiB podría no merecer la pena usar la máquina (tardando de media: 1 iteración 4 segundos, es decir, cuatro veces más que una de 15 GiB de RAM).
  • 6) Pulsa en la celda con el texto: Instalación de bibliotecas. Verás que en esa celda, aparecen barras de progreso. Eso son las instalaciones y descargas en curso. Espera a que acabe de descargar[1].
  • 7) Pulsa en la celda con el texto: Selección de modelos a descargar. Puedes elegir descargar otros modelos pero los dos modelos por defecto imagenet_1024, imagenet_16384 son buenos. Time total, time spent, time left indican cuánto tiempo falta de descarga. Espera a que acabe de descargar.
  • 8) Pulsa en la celda con el texto: Carga de bibliotecas y definiciones.
  • 9) Pulsa en la celda con el texto: Parámetros.

A la derecha de la celda parámetros hay una caja de texto que permite personalizarlos de manera más sencilla. Cada vez que modifiques los Parámetros vuelve a ejecutar la celda para que se actualice.

Parámetros

Nombre del parámetro Texto por defecto Descripción
textos A fantasy world Este parámetro es el texto que VQGAN+CLIP va a interpretar como concepto de la imagen. Si se escribe "fuego", dibujará fuego, y si se escribe "agua", representará agua. Más información en la sección "texto y contexto".
ancho 480 El ancho de cada imagen que VQGAN+CLIP generará dentro de esa página de Colaboratory. Se recomienda no modificarlo (más allá de 600) puesto que la máquina virtual tiene una memoria limitada. Es mejor utilizar después bigjpg. Puedes cambiar la proporción para que no sea cuadrada (Una ayuda aquí: Calculadora de proporciones).
alto 480 El alto de cada imagen que VQGAN+CLIP generará dentro de esa página de Colaboratory. Se recomienda no modificarlo (más allá de 600) puesto que la máquina virtual tiene una memoria limitada. Es mejor utilizar después bigjpg. También puedes cambiar la proporción.
modelo imagenet_16384 Este parámetro decide qué modelo de VQGAN se va a ejecutar. Es un desplegable que permite seleccionar un modelo. El que selecciones tiene que haber sido descargado previamente. El número indica la cantidad de modelos que contiene por lo que imagenet_16384 es mejor que imagenet_1024 (aunque más pesado).
intervalo_imagenes 50 Esto indica al programa cada cuantas iteraciones imprime el resultado en la página. Si se escribe 50, imprimirá los resultados de las iteraciones 0, 50, 100, 150, 200, etc.
imagen_inicial None Para usar una imagen inicial, sólo debes subir un archivo al entorno del Colab (en la sección a la izquierda), y luego modificar imagen_inicial: poniendo el nombre exacto del archivo. Ejemplo: sample.png. Ver Subir imágenes.
imagenes_objetivo None Una o más imágenes que la IA tomará como "meta", cumpliendo la misma función que ponerle un texto. Es decir, la IA intentará imitar la imagen o imágenes. Se separan con |.
seed -1 La semilla de esa imagen. -1 indica que la semilla será aleatoria cada vez. Al elegir -1 sólo verás en la interfaz de Colaboratory la semilla elegida en la celda "Hacer la ejecución", tal que así: Using seed: 7613718202034261325 (ejemplo). Si quieres averiguar las iteraciones y semillas de las imágenes que has descargado, están en los comentarios de la imagen. En Linux los visores normales incorporan los comentarios. En Windows los visores por defecto no pueden ver los metadatos, pero con Jeffrey's Image Metadata Viewer los puedes ver[r 1][r 2].
max_iteraciones -1 El número máximo de iteraciones antes de que el programa pare. Por defecto es -1, eso significa que el programa no va a parar a menos que no se cuelgue o se pare por otra razón. Se recomienda cambiarlo por un valor como 500, 600, 1000 o 3000. Un número más alto a veces no es necesario (la variabilidad desciende a mayor número de iteraciones). Recuerda que hacer estos cálculos es muy costoso energéticamente (y si dejas demasiado tiempo la sesión realizando cálculos tendrás una limitación en Google Colaboratory).

Texto y contexto

Idioma

La IA está entrenada mucho más en inglés por lo que muchas veces el contexto es mejor introduciendo la entrada en inglés. Esto se puede apreciar en las Imágenes al poner como entrada greek temples in space el resultado es mejor que con Templos griegos en el espacio.

Entradas separadas

Separar conceptos con barras verticales (también llamadas plecas o tuberías) ( | ) produce dos entradas distintas de texto, cada una con una "valor de pérdida"[r 3] independiente.

En la celda de ejecución se pueden ver separadas por comas y entrecomilladas.

  • Texto: Cosmic egg.
  • Name='cosmic egg'. (esto es lo que ejecuta el programa).
  • Texto: Bronze | space
  • Name='bronze' , 'space'.

Va a producir un resultado diferente de:

  • Texto: Bronze, space.
  • Name='bronze, space'.

Usar adjetivos

Se pueden utilizar adjetivos para variar la imagen sin variar los objetos que queremos que dibuje.

  • Según artista.
    • "Al estilo de Van Gogh" / "Beksinski style" / "estilo Dalí" / "Monet style" / "Katsuhiro Otomo style" (también se pueden mezclar).
  • Según programa de renderizado (imita el resultado, no es que realmente esté usando esos motores gráficos[r 4]):
    • "rendered in Vray" / "rendered in povray" / "rendered in rtx" / "rendered in Unreal Engine"[r 5][r 6].
  • Según estilo de pintura:
    • 4k / acrylic painting style / anime / cell shading / coffee paint / collage / comic / detailed oil painting / graphite drawing / gouache/ flat colors / full of color / hyperrealistic / impressionism / ink drawing / isometric / lineart / lowpoly / minimalistic / photorealistic / pointillism / tilt-shift photography / Vector Art / watercolor.
  • Según películas:
    • "in Ghost in the Shell style" / "in Star Wars style" / "in Ghibli style". (cuanta más relación tenga el texto de entrada con la película más se parecerá).
  • Materiales:
    • Fog / fire / lava, etc.
  • Otros adjetivos interesantes:
    • dismal / grim / liminal / surprising.
  • etc.

Asignar pesos

También se pueden utilizar porcentajes y CLIP interpretará los decimales (0.1, 0.5, 0.8) como pesos de ese concepto en el dibujo (1 sería el total). También se pueden usar "porcentajes" (pero sin el símbolo de porcentaje). Se pueden usar pesos negativos para eliminar un color, por ejemplo.

  • No interesa poner pesos inferiores a -1.
  • Los pesos son relativos entre ellos (se recalcula el total y no tiene porqué coincidir con los números que se han puesto). Por eso se recomienda que sumen 100% —o 1— (más que nada para nosotros mismos saber los pesos reales).

Ejemplo de pesos con decimales:

  • Texto: rubber:0.5 | rainbow:0.5. Equivalente a rubber:50 | rainbow:50.
    • Mal hecho: "0.5 rubber | 0.5 rainbow". (La asignación de pesos va después del concepto y después de :).
    • Mal hecho: "awesome:100 adorable:300". (No está separado por |)
    • Mal hecho: "rubber:50% | rainbow:50%". (Los % no son signos admitidos).

Otros ejemplo de pesos (total 100):

  • Texto: sky:35 | fire:35 | torment:20 | dinosaurs:10

Ejemplo:

  • Texto: fantasy world | pink:-1
  • Resultado: No tiene rosa.

Nota: Eliminar una palabra puede cambiar por completo la imagen, con resultados inesperados. Si se es muy específico se pueden conseguir los resultados deseados, pero aún así la imagen cambiará mucho.

Por ejemplo para quitar el logo de Unreal:

  • Texto: ... | logo of unreal:-1. Podría dar un resultado satisfactorio.

Mientras:

  • Texto: ... | logo:-1. Dará un resultado totalmente diferente al ser demasiado poco específico.

Otros consejos

  • Para imágenes astronómicas se consigue mejor resultado cuando se asignan pesos a los parámetros, así se definen mucho mejor los elementos (por ejemplo una galaxia).
  • Los textos demasiado cortos suelen salir mal pero si son muy específicos no tanto.
  • La IA deforma la cara de la gente cuando le pones el nombre de alguien en específico.
    • Los humanos son el punto débil de la IA.
    • Un truco que parece funcionar bien es usar como punto de partida una imagen de una cara humana producida por Artbreeder (una página web que también usa IAs con GAN).

Subir imágenes

Para usar una imagen inicial primero tienes que subirla.

  1. Ve a la parte izquierda y pulsa en "Archivos"
  2. Selecciona el icono que representa la subida "Subir al almacenamiento de sesión".
  3. Carga la imagen que quieras desde tu sistema de archivos (ponle un nombre reconocible).
  4. La imagen sólo permanecerá durante la sesión, luego se borrará.
  5. Después hay que modificar el apartado imagen_inicial o imagenes_objetivo poniendo el nombre exacto del archivo. En el apartado de imagenes_objetivo se pueden poner varias imágenes, usando | como separador.

Otras técnicas

Adaptar las imágenes a formas concretas

Para adaptar la imagen final a una forma concreta se pueden usar imágenes de inicio con máscaras de color haciendo esa forma. (Opcional, puede ser simplemente un cuadrado de color blanco, aunque será más preciso si se parte de la iteración 0).

Puedes añadir y descargar máscaras desde el Drive colaborativo de DotHub.

Guiar a la IA a un resultado

  • Cuando se llega a una iteración en que se desvía de lo que se quiere. Se puede parar y usar ese último frame como nueva imagen_inicial, modificando un poco la descripción. De ese modo hasta cierto punto se puede "guiar" a la IA hacia lo que se quiere.

Post-ejecución

Una vez hayas decidido los parámetros:

  1. Pulsa en la celda con el texto: Hacer la ejecución...
  2. Espera a que vayan apareciendo imágenes en ese celda.
  3. Cuando quieras guardar una imagen pulsa el botón derecho + Guardar imagen y guarda con el nombre que quieras.

Generar un vídeo

Se presiona su correspondiente "Play". Tarda bastante. Cuando termina a veces no carga y no es evidente dónde está el vídeo generado. Está en Archivos (barra lateral izquierda).

Preguntas frecuentes de VQGAN+CLIP

¿Cómo parar la ejecución del programa?

Por defecto max_iteraciones es -1, eso significa que no va a parar de hacer iteraciones. Si quieres parar el proceso puedes pulsar el botón circular de fondo gris con una X blanca con tooltip "borrar resultado". Antes de borrar asegúrate de guardar lo que quieras.

El atajo para detener una celda es Control+M I[2].

A veces una celda se queda "colgada". Entonces se puede borrar en el botón de eliminar (símbolo de la papelera). Para restaurarla usa Control+M Z[2].

¿Cómo sé si una celda se ha ejecutado?

Si te posicionas en el botón de "Play" de una celda se ve si se ha ejecutado y el resultado de la ejecución.

Subo una imagen pero sale distorsionada desde el inicio

Eso es porque 480x480 es una imagen cuadrada. Si subes una imagen con una proporción diferente a 1:1, se distorsionará desde el principio. Calcula la proporción de la imagen que vas a subir y utiliza la misma proporción en los campos ancho y alto si quieres que no se produzca esta distorsión.

A veces pongo un valor, pero no lo toma

Eso es porque no has vuelto a ejecutar la celda. Cualquier cambio en los campos de Parámetros necesita que la celda vuelva a ejecutarse.

He puesto un valor límite pero quiero continuar con más iteraciones

No es necesario volver a iterar desde el principio para continuar con un resultado (aunque tendrías que conocer el seed o haberlo averiguado mediante la herramienta Steganography Online), puedes usar como imagen_inicial la última imagen iterada. Ver Guiar a la IA a un resultado.

He dejado abierto toda la noche VQGAN y ahora no conecta a una máquina con GPU

Aunque "no esté haciendo nada" que la conexión exista ya gasta tiempo asignado con lo que si dejas la máquina parada durante un tiempo largo la próxima vez no te asignarán una máquina con GPU.

Solución:

  1. Evita dejar la máquina conectada más tiempo del necesario.
  2. Espera el tiempo suficiente (1 día o así) a que pase la limitación.
  3. Utiliza otra cuenta de gmail diferente.
  4. Si tienes una paciencia infinita, puedes usar la máquina sólo con CPU. Tarda del orden de 30 veces más.

No sé si tengo que volver a ejecutar todo desde el principio (la máquina se ha desconectado)

Aunque a veces conserva los paquetes y definiciones en memoria aunque haya pasado mucho tiempo, otras veces no y hay que volver a empezar desde el principio. Se puede comprobar fácilmente mirando si la celda se ha ejecutado en la sesión actual. Ver ¿Cómo sé si una celda se ha ejecutado? o intentando ejecutar la celda Parámetros y mirando el error.

¿Qué modelo me conviene?

Bestiario borrador.jpg ADVERTENCIA DE FALTA DE CONTENIDO: Esta sección es un borrador, que se encuentra (evidentemente) incompleto.
Sé paciente

Los modelos no tienen ventajas evidentes entre ellos. Han sido entrenados con conjuntos de imágenes diferentes por lo que producirán resultados diferentes, no necesariamente mejores o peores.

  • ImageNet: El proyecto ImageNet es una gran base de datos visual diseñada para su uso en la investigación de software de reconocimiento visual de objetos. El proyecto ha anotado a mano más de 14 millones de imágenes para indicar qué objetos se representan y en al menos un millón de las imágenes, también se proporcionan cuadros delimitadores. Contiene más de 20.000 categorías con una categoría típica, como "globo" o "fresa", que consta de varios cientos de imágenes (vía wikipedia en inglés).
    • imagenet_1024 (913.57 MiB - FID[3]: 8.0): Utiliza el conjunto de datos (=dataset) de ImageNet con un "codebook" de 1024 elementos.
    • imagenet_16384 (934.68 MiB -FID[3]: 4.9): Utiliza el conjunto de datos de ImageNet con un "codebook" de 16384 elementos[r 7].

Frente a lo que pudiera suponerse, que uno tenga un codebook más grande no significa exactamente que se más potente, simplemente le permite capturar más características de las imágenes. Eso puede ser bueno o no, dependiendo de qué tipo de resultados quieras conseguir. El de 1024 es un poco "más libre" por así decir a la hora de generar imágenes. Tiende a crear cosas más abstractas, más caóticas, y más artísticas. Su "visión del mundo" tiene menos categorías, lo que le obliga a abstraer más.

Se puede ver una comparativa entre algunas imágenes de 1024 vs 16384 en este colab: Reconstruction usage.

  • COCO-Stuff (Proyecto - 7.86 GiB - FID[3]: 20.4): COCO-Stuff es una modificación con "augmentos" del un conjunto de datos (=dataset) COCO de Microsoft, con imágenes cotidianas (calles, personas, animales, interiores...).
  • faceshq (3.70 GiB). Especializado en caras.
  • Wikiart: Las imágenes del conjunto de datos de WikiArt se obtuvieron de WikiArt.org. Licencia: Solo para fines de investigación no comerciales. Es decir, es un conjunto entrenado con cuadros de arte por lo que los resultados generalmente serán pinturas. Un resultado similar se podría conseguir en los conjuntos de datos de imagenet usando estilos de pintores famosos.
  • wikiart_1024 (913.75 MiB): Versión de wikiart con un codebook de 1024 elementos.
  • wikiart_16384 (958.75 MiB): Versión de wikiart con un codebook de 16384 elementos.
  • s-flckr (3.97 GiB ): Conjunto desde Flickr.

Descargar todos los pasos

Si queremos descargar todos los pasos, hemos generado demasiadas imágenes y nos resulta muy tedioso guardarlas de una o en una o si, simplemente, hemos borrado o detenido la celda donde estaban las imágenes, aún se pueden descargar.

Los pasos intermedios que se generan (aunque no se muestren) se quedan en la carpeta /steps. Si queremos descargar todos los pasos, no es realizable el hacerlo a mano, por lo que los vamos a introducir en un único archivo y así descargarlos más fácilmente.

  • Esto se aplica después de haber generado imágenes.
  • Si la máquina se ha desconectado, no habrá archivos en /steps por lo que este procedimiento será inútil. Sí que puede que se conserven las imágenes que se muestran en la interfaz principal, por lo que se podrían seguir guardando una a una.
Abrir nuevas entradas para comandos

Para introducir una nueva entrada nos vamos con el ratón justo en el borde de una celda y al pasar por encima aparecerán dos pestañas: + Código y + Texto. Pulsamos + Código. Otra opción es usar Control+M B[2].

Introducir un comando para añadir a un archivador

2) Pegamos en esa celta este código. Genera un archivador (sin comprimir) de todas las imágenes generadas (no sólo de las iteraciones que se muestran):

!zip a -0 -r archivo.zip steps
  • ! indica la ejecución de un programa.
  • zip es el nombre del programa.
  • a: significa que vamos a añadir a un archivador.
  • -0: no comprime, así es más rápido, simplemente introduce todos los datos en un único archivo.
  • -r: se aplica recursivamente.
  • archivo.zip: es el nombre del archivo comprimido. Podría ser cualquier otro nombre, con la extensión .zip.
  • steps/*: Indica la ruta y los archivos a los que afecta el comando.

3) Imaginando que tenemos miles de imágenes (porque hayamos seleccionado por ejemplo 3000 iteraciones de límite) sería mejor seleccionar un rango tal que así (por ejemplo):

!zip a archivo2000.7z steps/2*50.png
  • Al usar * estamos seleccionando los archivos que cumplan el patrón 2 (cualquier cosa)50.png (* es un comodín).
  • Esto comprimiría de 100 en 100, las iteraciones 2050, 2150, 2250, 2350, ..., hasta la imagen 2950.

Se puede jugar con estos valores, cambiando los nombres de archivos afectados afectados usando comodines o no para obtener diferentes archivos.

  • Para descargarlo/s nos iremos al panel izquierdo, Archivos y veremos el/los archivo/s generado/s ahí. Pulsando en los tres puntos verticales → Descargar empezará el proceso de descarga.

Importante: Si tenemos muchos archivos y poco espacio puede fallar (especialmente si se combina con utilizar modelos muy pesados, como COCO-stuff o después de haber generado un vídeo). Si ese fuera el caso y no fuéramos a usar de nuevo la máquina con ese modelo podríamos borrar el modelo en concreto para hacer espacio o el vídeo, una vez descargado.

Solución de errores de VQGAN+CLIP

Si la celda ha dado error, el botón de play se muestra en rojo.

Aquí se citan algunos de los errores que te puedes encontrar y cómo solucionarlos.

name 'textos' is not defined

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-6-b687f6112952> in <module>()
      2 device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
      3 print('Using device:', device)
----> 4 if textos:
      5     print('Using texts:', textos)
      6 if imagenes_objetivo:

NameError: name 'textos' is not defined

Solución: Has pulsado en Hacer la ejecución... antes de cargar los parámetros. Detén la celda Hacer la ejecución.. y pulsa en ejecutar la celda de Parámetros. Después pulsa de nuevo en "Hacer la ejecución..." de nuevo.

name 'argparse' is not defined

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-8-9ad04e66b81c> in <module>()
     29 
     30 
---> 31 args = argparse.Namespace(
     32     prompts=textos,
     33     image_prompts=imagenes_objetivo,

NameError: name 'argparse' is not defined

Solución: Esto significa que no has ejecutado la celda "Carga de bibliotecas y definiciones". (Por supuesto también puede ser que se haya caducado la máquina virtual).

No module named 'taming.modules.misc'

---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-11-b687f6112952> in <module>()
     13 print('Using seed:', seed)
     14 
---> 15 model = load_vqgan_model(args.vqgan_config, args.vqgan_checkpoint).to(device)
     16 perceptor = clip.load(args.clip_model, jit=False)[0].eval().requires_grad_(False).to(device)
     17 

12 frames
/usr/lib/python3.7/importlib/_bootstrap.py in _find_and_load_unlocked(name, import_)

ModuleNotFoundError: No module named 'taming.modules.misc'

---------------------------------------------------------------------------
NOTE: If your import is failing due to a missing package, you can
manually install dependencies using either !pip or !apt.

To view examples of installing some common dependencies, click the
"Open Examples" button below.
---------------------------------------------------------------------------

Solución: Uno de los paquetes necesarios para ejecutar el programa falla. Ejecuta de nuevo la celda de instalación de paquetes e inténtalo de nuevo.

  • Si elegías el modelo "faceshq" te podía salir este error. Este error ya ha sido corregido (2020-06-11).

FileNotFoundError: [Errno 2] No such file or directory

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-10-f0ccea6d731d> in <module>()
     13 print('Using seed:', seed)
     14 
---> 15 model = load_vqgan_model(args.vqgan_config, args.vqgan_checkpoint).to(device)
     16 perceptor = clip.load(args.clip_model, jit=False)[0].eval().requires_grad_(False).to(device)
     17 

1 frames
/usr/local/lib/python3.7/dist-packages/omegaconf/omegaconf.py in load(file_)
    181 
    182         if isinstance(file_, (str, pathlib.Path)):
--> 183             with io.open(os.path.abspath(file_), "r", encoding="utf-8") as f:
    184                 obj = yaml.load(f, Loader=get_yaml_loader())
    185         elif getattr(file_, "read", None):

FileNotFoundError: [Errno 2] No such file or directory: '/content/wikiart_16384.yaml' (alternativa: Orange.png)

Solución: Esto puede significar dos cosas:

  1. Has elegido un modelo que no has descargado antes. Comprueba que el modelo elegido se haya descargado. También puede ser que la máquina haya caducado (es decir, se ha borrado todo). En este último caso tendrías que ejecutar todo desde el principio.
  2. Has puesto un nombre en imagen_inicial que no se corresponde con la imagen que has subido. Este programa detecta como diferentes las mayúsculas de las minúsculas por lo que Orange.png es diferente que orange.png. Pon el nombre correcto en imagen_inicial.
  • Si por accidente has subido una imagen con un nombre muy complicado puedes cambiarle el nombre desde la propia interfaz.

RuntimeError: CUDA out of memory

RuntimeError                              Traceback (most recent call last)
<ipython-input-13-f0ccea6d731d> in <module>()
    131     with tqdm() as pbar:
    132         while True:
--> 133             train(i)
    134             if i == max_iteraciones:
    135                 break

8 frames
/usr/local/lib/python3.7/dist-packages/taming/modules/diffusionmodules/model.py in nonlinearity(x)
     29 def nonlinearity(x):
     30     # swish
---> 31     return x*torch.sigmoid(x)
     32 
     33 

RuntimeError: CUDA out of memory. Tried to allocate [...] (GPU 0; [...] total capacity; [...] already allocated; [...] free; [...] reserved in total by PyTorch)

Solución: Esto puede significar varias cosas:

  1. Has elegido unas dimensiones de imagen demasiado grandes. El tamaño 480x480px es suficiente (aunque en teoría podría soportar hasta 800x800px). Para ampliar las dimensiones de la imagen utiliza las herramientas enlazadas en Ampliar imágenes.
  2. Te has quedado sin memoria por usarlo mucho tiempo. Tendrás que iniciar una nueva sesión.
  3. Google te ha asignado una GPU de baja memoria (<15109MiB). Tendrás que iniciar una nueva sesión.

ValueError: could not convert string to float

ValueError                                Traceback (most recent call last)
<ipython-input-8-f0ccea6d731d> in <module>()
     45 
     46 for prompt in args.prompts:
---> 47     txt, weight, stop = parse_prompt(prompt)
     48     embed = perceptor.encode_text(clip.tokenize(txt).to(device)).float()
     49     pMs.append(Prompt(embed, weight, stop).to(device))

<ipython-input-5-32991545ebb9> in parse_prompt(prompt)
    129     vals = prompt.rsplit(':', 2)
    130     vals = vals + ['', '1', '-inf'][len(vals):]
--> 131     return vals[0], float(vals[1]), float(vals[2])
    132 
    133 

ValueError: could not convert string to float: ' los leones la levantan y[...]'

Solución: El texto contenía dos puntos :, carácter ilegal si no es en una sentencia determinada (red:-1, por ejemplo).

RuntimeError [...] is too long for context length X

RuntimeError                              Traceback (most recent call last)
<ipython-input-10-f0ccea6d731d> in <module>()
     46 for prompt in args.prompts:
     47     txt, weight, stop = parse_prompt(prompt)
---> 48     embed = perceptor.encode_text(clip.tokenize(txt).to(device)).float()
     49     pMs.append(Prompt(embed, weight, stop).to(device))
     50 

/content/CLIP/clip/clip.py in tokenize(texts, context_length)
    188     for i, tokens in enumerate(all_tokens):
    189         if len(tokens) > context_length:
--> 190             raise RuntimeError(f"Input {texts[i]} is too long for context length {context_length}")
    191         result[i, :len(tokens)] = torch.tensor(tokens)
    192 

RuntimeError: Input [...] is too long for context length 77

Solución. El texto introducido es muy largo. Introduce un texto más corto. Tiene que ser menor de 350 caracteres[r 8].

WARNING:root:kernel restarted

Aunque intentes reconectar, o volver a ejecutar las celdas, la máquina parece que se ha quedado muerta. Por (por ejemplo) el error WARNING:root:kernel [...] restarted.

Solución: Forzar la finalización de la sesión, yendo a la pestaña superior al lado de ConectarGestionar sesionesFinalizar.

Ejemplos

Imágenes

  • Sin entrada de imagen:
  • Con entrada de imagen:

Ejemplos de vídeo

Véase también

Referencias

Las Referencias aluden a las relaciones de un artículo con la "vida real".
  1. Nota: A veces no introduce los metadatos XMP correctamente. Creo que es porque en la instalación falla algún paquete (pero no produce ningún otro error apreciable). Nos hemos puesto en contacto con los creadores del notebook para saber qué problema es. ¡Corregido!. Las imágenes generadas en estos días (del 9 al 12 de junio), aunque no tengan metadatos XMP, como también se añaden metadatos mediante esteganografía aún pueden consultarse. Estos metadatos se pueden visualizar mediante la librería stegano de python (Steganography Online).
  2. Nota 2: Aunque la semilla sea idéntica los resultados aún así variarán un poco debido a las "aumentaciones". Las aumentaciones son variaciones pseudoaleatorias introducidas en cada iteración. Se pueden desactivaraún no sé cómo, lo que haría que fuera un poco más rápido, pero a costa de perder calidad.
  3. Hinge loss o pérdida de articulación, es un tipo de función de pérdida específico para las inteligencias artificiales. Ver hinge loss.
      Traducción semiautomática: En el aprendizaje automático, la "pérdida de articulación" es una función de pérdida que se utiliza para entrenar clasificadores. La pérdida de articulación se utiliza para la clasificación de "margen máximo", sobre todo para las máquinas de vectores de soporte (SVM).
  4. Es decir, la IA se ha entrenado con muchas imágenes, algunas de las cuales estaban etiquetadas con "rendered en X" por lo que imita esos resultados
  5. Vía Aran Komatsuzaki.
  6. Si solo se incluye "unreal engine" puede aparecer el logo de Unreal Engine flotando por la imagen.
  7. Es decir, el número de elementos que utiliza el modelo para definir una única imagen Ver ¡Esta IA crea ARTE con tus TEXTOS! (y tú puedes usarla 👀) [Minuto 7:30].
  8. Como tal no hay límite de caracteres, sino de tokens (que son un grupo de caracteres), pero los tokens varían dependiendo de lo que escribas. Según tengo entendido, son máximo 75 tokens aproximadamente 350 caracteres.
  1. 1,0 1,1 Antes de tener dominio del programa se recomienda esperar a que termine cada celda de ejecutar (para no saltarse pasos). Pero en realidad no es necesario. Se puede programar de principio a fin (incluso vídeo) rellenando los parámetros correctos. Obviamente, si la máquina caduca, el vídeo no podrá descargarse, por lo que hay que echarle un ojo de vez en cuando.
  2. 2,0 2,1 2,2 Estos atajos se activan pulsando primero las dos teclas unidas por el + y después la letra adicional.
  3. 3,0 3,1 3,2 La puntuación de distancia de inicio de Frechet, o FID para abreviar, es una métrica que calcula la distancia entre los vectores de características calculados para imágenes reales y generadas. Vía: How to Implement the Frechet Inception Distance (FID) for Evaluating GANs.

Enlaces externos

Información

Vídeos

Información técnica

Otras guías

Redes sociales

Docker

Otras herramientas

Recursos para imágenes de inicio

Ampliación de imágenes

Otras herramientas de imágenes

Visores de metadatos

Generadores de entradas de texto

Notebooks

Agradecimientos

Agradecimiento especial a Eleiber#8347 por contestar mis dudas y proporcionar correcciones. También a Abulafia#3734 por explicarme técnicas y a elchampi#0893 por compartir sus dudas. Y a muchos usuari@s del discord de DotHub que han compartido sus técnicas o dudas.

⚜️

DarenGa by nosoyridley.png
El contenido de este artículo fue recopilado por la persona siguiente:
Avengium
Revisa las fuentes antes de cambiar cosas.
Dussiano por asralore.png
El contenido de este artículo fue recopilado por la persona siguiente:
Jakeukalane
Revisa las fuentes antes de cambiar cosas.