2 puntos por GN⁺ 2023-08-23 | 1 comentarios | Compartir por WhatsApp
  • Stable Diffusion XL 1.0 es un modelo open source capaz de generar imágenes de 1024x1024 por defecto, y gracias al soporte de diffusers y al modelo refiner, bajó la barrera de entrada para experimentos personales
  • Dreambooth LoRA entrena solo un pequeño adaptador, sin reentrenar todo el modelo, por lo que permite agregar conceptos específicos rápidamente y compartirlos con facilidad
  • El experimento central consistió en entrenar asociando imágenes distorsionadas y de baja calidad creadas por SDXL con wrong, y luego comparar si usarlas como negative prompt mejoraba los resultados generados
  • El LoRA wrong mostró casos en los que mejoró la iluminación, las texturas, el layout, la representación de manos y brazos, y la fidelidad al prompt en varios prompts, frente a SDXL base o un simple negative prompt wrong
  • Al seleccionar malas imágenes para enseñarle al modelo qué direcciones evitar, el enfoque se acerca a un negative LoRA y a RLHF; todavía queda margen de mejora en la generación de datos y el tiempo de entrenamiento

SDXL 1.0 y entorno del experimento

  • Stability AI presentó el mes pasado Stable Diffusion XL 1.0 y lo distribuyó como open source
  • SDXL es uno de los modelos open source que puede generar imágenes en resolución 1024x1024 de forma nativa, sin rodeos adicionales, lo que permite producir más detalle
  • El modelo se compone de dos partes
    • base model: se encarga de la generación básica de imágenes
    • refiner model: mejora mucho los detalles y, como no agrega sobrecarga de velocidad, se recomienda usarlo junto con el base siempre que sea posible
  • diffusers de Hugging Face soporta SDXL y optimizaciones de rendimiento, por lo que se puede experimentar cambiando apenas un poco el código de ejemplo
  • El experimento se realizó en una Spot instance de Google Cloud Platform con una GPU NVIDIA L4
    • El costo total fue de US$0.24 por hora
    • Generar una imagen de 1024x1024 tardó alrededor de 22 segundos
    • En una GPU de gama media solo se puede generar una imagen a la vez
    • A menor resolución es más rápido, pero los resultados son mucho peores, así que no se recomienda

Pesos de prompt en diffusers y Dreambooth LoRA

  • diffusers soporta dos funciones que no se habían usado en experimentos anteriores con Stable Diffusion
  • Los pesos de prompt usan compel para ajustar de forma más matemática la importancia de palabras o frases
    • Al agregar varios + o - a una palabra, se sube o baja su importancia en el embedding resultante
    • Se puede reforzar la expresión de un medio específico encerrando una frase entre paréntesis, como San Francisco landscape by Salvador Dali, (oil on canvas)+++
  • En las pruebas, este método alivió la mayor parte de la dificultad para ajustar prompts que apareció desde Stable Diffusion 2.0
    • El guidance_scale predeterminado es 7.5
    • Max Woolf prefiere 13, y todos los ejemplos de LoRA del artículo usan guidance_scale 13
  • Dreambooth es una técnica para enseñarle a Stable Diffusion un concepto específico usando pocas imágenes originales y una palabra clave disparadora
  • LoRA entrena solo un pequeño adaptador para el modelo visual, en lugar de todo el modelo Stable Diffusion
    • Puede entrenarse en unos 10 minutos en una sola GPU barata
    • La calidad del modelo final + LoRA es similar a la de un fine-tuning completo
    • Se guarda como un archivo binario pequeño, fácil de compartir
    • Muchas veces, lo que suele llamarse fine-tuning de Stable Diffusion en realidad es la creación de un LoRA
    • Solo se puede activar un LoRA a la vez, y aunque es posible fusionar varios LoRA, es una tarea delicada

El potencial de SDXL comprobado con el LoRA de Ugly Sonic

  • Antes de que LoRA se usara ampliamente, se empleaba textual inversion para enseñar conceptos al text encoder, pero el entrenamiento podía tardar mucho y los resultados podían ser difíciles de manejar
  • Anteriormente se había entrenado con textual inversion al personaje de meme Ugly Sonic, que no estaba en el dataset original de Stable Diffusion, pero los resultados fueron irregulares
  • Para comprobar el potencial de SDXL, se volvió a entrenar Ugly Sonic usando LoRA
  • El LoRA de Ugly Sonic entrenado genera imágenes mucho mejores y más consistentes que antes con diversos prompts

Diseño del experimento con el LoRA wrong

  • Se repitió con SDXL LoRA un experimento anterior de textual inversion relacionado con negative prompts, entrenando imágenes distorsionadas y de baja calidad asociadas al prompt wrong
  • El objetivo era comprobar si, al usar wrong como negative prompt, el modelo podía alejarse de ese tipo de imágenes y producir imágenes menos distorsionadas
  • Las imágenes sintéticas wrong se generaron con el propio SDXL
    • Se escribió un Jupyter Notebook generador de imágenes wrong
    • Se usaron distintos pesos de prompt para hacer más distinguibles tipos de malas imágenes como blurry o bad hands
    • Fue necesario usar SDXL otra vez para crear imágenes de alta resolución y baja calidad
  • Las imágenes wrong generadas parecen portadas de álbumes punk rock de los 2000 o tienen características de uncanny valley: a primera vista se ven normales, pero al mirarlas de cerca resultan inquietantes
  • sdxl-wrong-lora se carga en el SDXL base model
    • El refiner no necesita LoRA
    • También se publicó un Jupyter Notebook para la comparación

Método de comparación y resultados representativos

  • Se compararon tres opciones
    • Pipeline base + refiner sin LoRA
    • Pipeline sin LoRA con wrong como negative prompt
    • Pipeline con el LoRA wrong aplicado y wrong como negative prompt
  • Todas las generaciones usaron la misma seed para mantener una composición fotográfica similar y facilitar la comparación del efecto del negative prompt wrong y del LoRA
  • A wolf in Yosemite National Park, chilly nature documentary film photography
    • Al agregar wrong al modelo base, se añadieron algunas hojas y profundidad a la imagen del bosque
    • El LoRA mejoró más la iluminación, las sombras y los detalles de las hojas, y cambió la composición para que el lobo mirara a la cámara
  • An extreme close-up of a wolf in Yosemite National Park, chilly nature documentary film photography
    • El resultado con LoRA fue mejor en textura, vitalidad y nitidez
    • Solo agregar el prompt wrong también cambió el punto de vista
  • a large delicious hamburger (in the shape of five-dimensional alien geometry)++++, professional food photography
    • Incluso tras varios intentos de prompt engineering, no logró manejar bien la hamburguesa con geometría alienígena de cinco dimensiones
    • El SDXL base produjo un resultado que parece haber tomado alien más literalmente de lo esperado
    • El LoRA generó una hamburguesa más “alienígena”, difícil de comer para una persona, y una puesta en escena más brillante
  • lossless PDF scan of the front page of the January 2038 issue of the Wall Street Journal featuring a cover story about (evil robot world domination)++
    • La legibilidad del texto mejoró frente a Stable Diffusion 2.0, pero fue similar en los tres casos
    • El LoRA mejoró una composición de página más moderna, layouts de artículos más variados y el grosor relativo de la tipografía del titular
    • El modelo base, incluso con el negative prompt wrong, produjo una página monótona que parecía papel marrón antiguo
  • USA President Taylor Swift (signing papers)++++, photo taken by the Associated Press
    • En SDXL base, el brazo derecho era muy poco realista, y al agregar solo wrong empeoró
    • Con LoRA, el problema del brazo se corrigió y el color de la chaqueta se acercó más a un blanco claro en lugar de un blanco amarillento
    • Sin embargo, crear personas con SDXL 1.0 sigue siendo complicado y poco confiable, con la advertencia de no mirar las manos en detalle

Cambios vistos en ejemplos adicionales

  • realistic human Shrek blogging at a computer workstation, hyperrealistic award-winning photo for vanity fair
    • Las manos y la iluminación mejoraron, y los detalles de la ropa y el fondo se volvieron más interesantes
  • pepperoni pizza in the shape of a heart, hyperrealistic award-winning professional food photography
    • Se ven mejor los detalles del pepperoni y las burbujas causadas por el calor, se reduce el exceso de pepperoni en los bordes y la masa parece más crujiente
  • presidential painting of realistic human Spongebob Squarepants wearing a suit, (oil on canvas)+++++
    • Spongebob recupera la nariz y el traje tiene más botones
  • San Francisco panorama attacked by (one massive kitten)++++, hyperrealistic award-winning photo by the Associated Press
    • El LoRA realmente muestra un intento de seguir el prompt
  • hyperrealistic death metal album cover featuring edgy moody realistic (human Super Mario)++, edgy and moody
    • Las proporciones de Mario se acercan más a las del personaje del juego, y la iluminación del personaje se vuelve más filosa y sombría

Material publicado y cómo reproducirlo

  • El LoRA wrong está publicado en Hugging Face
  • No se puede garantizar su eficacia en interfaces distintas de diffusers
  • El notebook usado para generar imágenes está publicado en un repositorio de GitHub
  • El Colab Notebook para SDXL 1.0 + refiner + LoRA wrong normal puede ejecutarse en una GPU T4 gratuita
  • Las versiones en alta resolución de las imágenes generadas usadas en el artículo pueden verse en el código fuente del post

Por qué funcionó el LoRA wrong

  • La expectativa era que el LoRA wrong simplemente aumentara la calidad y nitidez de la imagen, pero los resultados reales se acercaron más a hacer que SDXL se comportara de forma más fiel a la intención del prompt
  • Técnicamente, el negative prompt define una región del espacio latente donde comienza el proceso de difusión
    • Cuando se usa el negative prompt wrong sin LoRA
    • Cuando se aplica el LoRA y se usa el negative prompt wrong
    • En ambos casos, la región inicial es la misma
  • Intuitivamente, se interpreta que el LoRA reconfiguró las zonas indeseables del espacio latente de alta dimensión para que se parecieran más a la región inicial, reduciendo la probabilidad de que la generación normal llegue a esas zonas y mejorando el resultado
  • Entrenar SDXL con malas imágenes para mejorarlo puede verse técnicamente como una forma de RLHF
    • OpenAI mejora los modelos con interacciones positivas de usuarios y reduce implícitamente los comportamientos negativos
    • Este experimento va en la dirección de aumentar implícitamente los comportamientos positivos usando imágenes que el usuario eligió como malas
  • Dreambooth LoRA no requiere tantos datos de entrada como los grandes modelos de lenguaje

Margen de desarrollo restante y próximos experimentos

  • Todavía hay mucho por mejorar en negative LoRA
    • Se pueden refinar más los parámetros de generación del synthetic dataset
    • Se puede entrenar el LoRA durante más tiempo
  • También se probará si fusionarlo con otros LoRA mejora el rendimiento
    • En particular, se menciona como ejemplo la combinación del LoRA wrong con el LoRA de Ugly Sonic
  • SDXL también soporta un modelo diffusers para ControlNet
    • ControlNet permite controlar con fuerza la forma general y la composición de las imágenes generadas
    • ControlNet también puede usarse junto con LoRA
  • Como razón para investigar mejoras en la calidad de generación de imágenes con IA, se destaca el periodismo de IA transparente
    • Esto incluye publicar prompts reproducibles y Jupyter Notebooks
    • Se considera que, en el entorno actual de venture capital, las nuevas mejoras de la industria en generación de imágenes con IA podrían no hacerse públicas
    • También se expresa la postura de no apoyar ni tolerar que se reemplace a artistas profesionales con IA

1 comentarios

 
GN⁺ 2023-08-23
Opiniones de Hacker News
  • El concepto de RLHF personalizado es realmente interesante.
    A medida que aumente la interacción con un sistema específico de IA generativa, parece que se acumularán suficientes datos de interacción como para ajustar de forma significativa las salidas hacia los gustos personales. Ojalá la UI mejore para que este proceso sea lo más transparente posible.
    Desde el punto de vista de convertirlo en producto, parece fácil agregar feedback de “me gusta/no me gusta” a todas las imágenes generadas, y añadir una etiqueta de texto opcional para sobrescribir wrong. Cuando se acumule suficiente feedback humano, o ejecutando un trabajo batch cada noche, se podría reentrenar una nueva LoRA ajustada a las preferencias personales.
    También se puede recopilar feedback humano en una búsqueda de árbol implícita, donde se generan N imágenes candidatas a partir de un prompt, se elige una y se la refina. De forma más explícita, podría haber una UI para ordenar/puntuar rápidamente un lote, o una papelera donde se descarten las imágenes que no gustan en cada etapa de mejora iterativa, para luego reunir ese feedback negativo e incorporarlo en actualizaciones de LoRA por proyecto o globales.
    También me da curiosidad hasta dónde podría llegar el ciclo de iteración mínimo si se crea un bucle de feedback muy corto que responda a pulsaciones de teclas justo después de generar la imagen. Si alguien se queda varias horas pegado al dispositivo y reúne unas 10 mil preferencias a razón de una por segundo, ¿podría hacer que el modelo produzca imágenes que personalmente le gusten mucho más? Aunque suena bastante intenso, como algo de Clockwork Orange.
    No vi en el artículo cuántas imágenes wrong había, pero al revisar el código parece que no eran muchas: 13 keywords y unas 6 por keyword. Si con solo unas 100 muestras de feedback ajustaron el modelo a este nivel, es una cantidad sorprendentemente pequeña.

    • AI Horde está implementando básicamente este flujo en colaboración con Stability.ai.
      AI Horde es un clúster distribuido open source operado con GPUs aportadas por voluntarios, y Stability.ai aporta parte de sus recursos de GPU para ejecutar pruebas A/B.
      Si se piden imágenes con el modelo SDXL desde Lucid Creations, la UI de AI Horde, o desde ArtBot creado por terceros, se reciben 2 imágenes. Una se genera con SDXL v1.0 y la otra con un modelo actualizado, pero no se sabe cuál es cuál.
      El usuario solo tiene que elegir cuál de las dos imágenes le gusta más, y los resultados vuelven a Stability.ai para ser analizados e incorporados en futuros modelos de imágenes.
      Además, AI Horde y LAION colaboran de forma similar para aportar evaluaciones estéticas personalizadas con el mismo objetivo.
      https://aihorde.net/
      https://dbzer0.com/blog/stable-diffusion-xl-beta-on-the-ai-h...
      https://dbzer0.itch.io/lucid-creations
      https://tinybots.net/artbot
      https://laion.ai/blog/laion-stable-horde/
    • Correcto. Son 6 valores de CFG × 13 keywords = 78 imágenes.
      Sin embargo, algunas no son tan útiles. Por ejemplo, “random text” a veces parece producir resultados como los de una app de SMS antigua.
      LoRA funciona bien con solo 4 o 5 imágenes, pero eso era con Stable Diffusion, más antiguo y pequeño. Por eso usé más imágenes para SDXL y entrené la LoRA un poco más. Como comparación, la LoRA de Ugly Sonic usó unas 14 imágenes, y probablemente quedó sobreajustada.
    • Puede que te interese el framework open source que estamos desarrollando: https://github.com/agentic-ai/enact
      Todavía está en una etapa temprana, pero la idea central es que muchos flujos de IA generativa, ya sean de texto o de imágenes, con un solo modelo o con una cadena de modelos, necesitan alinearse mediante algún tipo de señal de feedback, así que tiene sentido crear infraestructura básica para soportarlo. Una de las primeras demos era justamente un flujo de este tipo, usando mejora de prompts como sustituto barato en lugar de ajustar pesos reales del modelo.
      A grandes rasgos, buscamos construir infraestructura central a nivel de Python que permita escribir flujos fácilmente en Python casi nativo y rastrear la ejecución de flujos generativos, incluida la ejecución de “componentes humanos” como evaluadores. También soporta viaje en el tiempo/rebobinado/re-ejecución, UI automática con gradio y FastAPI, aunque estos dos últimos todavía son muy experimentales.
      A mediano plazo, queremos que sea fácil envolver cualquier flujo generativo en un flujo de “evaluación humana”, desplegarlo automáticamente como API o UI de gradio, y luego ajustarlo con varias técnicas como RLHF, fine-tuning o pruebas A/B de subcomponentes generativos.
      Por ahora estamos concentrados en definir bien el “esqueleto”, pero la guía de inicio rápido https://github.com/agentic-ai/enact/blob/main/examples/quick... y el README https://github.com/agentic-ai/enact/tree/main#why-enact muestran bastante bien la dirección. Estamos buscando gente que quiera probarlo o contribuir.
    • RLHF significa aprendizaje por refuerzo a partir de feedback humano.
      ¿No se entrenan ya estos sistemas con feedback humano para puntuar más alto lo bueno y más bajo lo malo?
    • El RLHF implícito funciona mejor que el método explícito.
      Es parecido al Mom test: si le pides a alguien que evalúe algo, la propia pregunta influye en la evaluación.
      Se puede usar un flujo de upscaling, pero no tiene por qué estar limitado como Midjourney basado en Discord. Se pueden mostrar todas las imágenes en tamaño completo y también detectar acciones como si el usuario copió/guardó/hizo clic derecho.
  • Crear arte con Stable Diffusion se volvió un pasatiempo realmente divertido
    La diferencia entre SD 1.5/2.0 y SDXL es enorme, y es impresionante lo rápido que mejora la calidad

    • ¿Podrías explicar en qué es tan grande la diferencia entre SD 1.5/2.0 y SDXL?
      Todavía no he probado SDXL, pero usé muchísimo 1.5
      Hasta ahora lo entendía como mayor resolución y mayor “calidad”, pero usé realistic vision 3 durante mucho tiempo y nunca tuve problemas de calidad. Con upscaling tampoco necesitaba más resolución
  • Hace unos 5 años, entre algunos científicos de datos se puso de moda guardar un registro de todas las pulsaciones de teclas en la PC, y ahora que veo que esos datos realmente se volvieron bastante útiles, me da un poco de envidia
    Tengo una colección de 30 mil imágenes de mi anime favorito, y hace 5 años incluso las ordené competitivamente por puntuación estética; parece que serviría bastante para algo así

  • Muy genial. Pronto pienso probar esta idea por mi cuenta. Yo también soy algo científico :)
    Hace unos días hice algo interesante. Usé el SDXL Base Model con Diffusers para generar imágenes mezclando prompts de varios estilos; luego entrené un LoRA con esas imágenes y volví a generar usando ese LoRA y los prompts que había usado para crear el set de entrenamiento
    Como resultado, el efecto se reforzó: quedó más glitchy, más raro y con una sensación de alta resolución
    Los resultados están en https://imgur.com/gallery/vUobKPK
    Naturalmente, pienso entrenar otro LoRA con estas generaciones y repetir el proceso
    Pensándolo bien, es una forma bastante buena de esquivar el límite de 77 tokens de Diffusers y desarrollar muchos más estilos
    El LoRA se puede probar en https://replicate.com/galleri5/nammeh. Se necesita una cuenta de GitHub
    Pronto también lo subiré a CivitAI

  • Estaría bueno que subieras el LoRa a civitai.com y también al Reddit de Stable Diffusion
    Los resultados se ven bastante buenos y tengo ganas de probarlo. No sabía que el entusiasmo por las imágenes generadas se había enfriado; como yo lo sigo usando regularmente, siempre me parece que sigue siendo tema de conversación

    • Publiqué el lanzamiento original en /r/StableDiffusion, pero todos los comentarios eran “¿por qué no es compatible con A1111?”, y no encontré un script decente para convertirlo: https://www.reddit.com/r/StableDiffusion/comments/15r5k3i/i_...
      Civitai tomó el LoRA y lo publicó: https://civitai.com/models/128708/sdxl-wrong-lora
    • La gente tiende a asumir que todos actúan según sus propios hábitos, y yo también lo hago bastante seguido. Desde mi punto de vista, el entusiasmo por las imágenes generadas sigue fuerte
      Si SDXL no me entusiasmó demasiado, fue porque no sentí que hubiera un salto enorme en calidad de imagen. Que el tamaño se haya duplicado está bien, pero también es un problema porque no siempre quiero generar imágenes de 1024x1024
      Sigo usando modelos SD 1.5 entrenados por terceros, y sus resultados son muy buenos; además tengo unas 5 formas de hacer upscaling, y al menos una agrega detalles nuevos al ampliar
  • En un tema un poco relacionado, aunque todavía no sé bien por qué, los LoRA que hice para Stable Diffusion XL solo funcionan bien cuando incluyo prompts negativos bastante comunes
    Lo afiné con 6 fotos de mi cara, pero si uso solo prompts positivos, el personaje generado no se parece mucho a mí. En cambio, si agrego negativos generales como “low quality”, de repente la descripción de mi cara se vuelve casi exacta
    Entrené varios modelos, y siguió pasando con distintas tasas de aprendizaje y cantidades de épocas de entrenamiento
    Al final, siento que este fenómeno de alguna manera estará conectado con la causa de lo que minimaxir observó en este artículo

  • No estoy de acuerdo con que el lanzamiento de SDXL haya pasado en general sin hacer mucho ruido porque se enfrió el entusiasmo por la IA de imágenes generadas
    Según la gente con la que hablé, había dos razones. Primero, mayores requisitos de VRAM y cómputo. Segundo, la percepción de que la calidad de los resultados era inferior a la de los modelos SD1.5 especializados
    Estoy seguro de que, si cualquiera de esas dos cosas hubiera sido distinta, habría tenido mucha más popularidad
    Pero, en definitiva, la mayoría está esperando a ver si los modelos SDXL especializados realmente pueden superar a los modelos 1.5 especializados

    • La razón es que la calidad de salida es baja
      Para la mayoría de la gente que se acercó de forma casual, lo veo más como un juguete para probar un rato. Los fans entusiastas de SD… probablemente estén creando cosas hardcore
      XL es flojo para porno. Stability se asustó de lo que había creado y quiso cubrirse por el lado de la “seguridad”. No podía ser que el porno de Kate Middleton o Emma Watson se viera demasiado convincente
      La gente seguirá usando 1.5 hasta que aparezca algo mejor, especialmente algo mejor para porno
  • Este concepto no es nuevo. En civit.ai hay muchos negative embeddings que se ponen en el prompt negativo para corregir manos y mala anatomía

  • Tal vez sea por haber crecido en el campo contradictorio de los 90 de “contracultura vs. contracultura que también es contracultura pero sale en MTV”, pero cuando veo que un prompt termina con referencias tipo etiquetas como “award winning photo for vanity fair”, me nace un deseo profundo de no sumarme a esta ola de imágenes generadas
    Siento algo parecido con cualquier sufijo estándar de etiquetas que usen los autores de prompts en estos artículos

    • “award winning photo for vanity fair” es más bien un truco para evocar una buena composición fotográfica, por ejemplo la regla de los tercios
  • La afirmación de que “solo se puede activar un LoRA a la vez” no es cierta en absoluto, al menos en auto1111

    • Si no recuerdo mal, internamente se hace mediante fusión y ajuste de pesos