2 puntos por GN⁺ 2024-02-14 | 1 comentarios | Compartir por WhatsApp
  • Stable Cascade es la base de código oficial de Stability AI y ofrece scripts de entrenamiento e inferencia, además de varios checkpoints de modelos de generación de imágenes basados en la arquitectura Würstchen
  • La diferencia clave es que opera en un espacio latente (latent space) mucho más pequeño que Stable Diffusion, codificando imágenes de 1024x1024 como 24x24 en lugar de 128x128, lo que reduce la velocidad de inferencia y el costo de entrenamiento
  • El modelo está compuesto por una cascada de 3 etapas: Stage A, Stage B, Stage C; Stage A y B se encargan de la compresión de imagen, y Stage C de generar una representación latente de 24x24 a partir de un prompt de texto
  • Entre las funciones disponibles están texto a imagen, variaciones de imagen, imagen a imagen, ControlNet, LoRA, reconstrucción de imágenes, entrenamiento desde cero y fine-tuning, y también se puede acceder desde diffusers 🤗
  • La base de código está en una etapa inicial de desarrollo, por lo que puede haber errores inesperados o código de entrenamiento e inferencia no optimizado; el código usa licencia MIT y los pesos del modelo siguen la Stability AI Non-Commercial Research Community License

El problema que Stable Cascade busca resolver

  • Stable Cascade es la base de código oficial de Stable Cascade y ofrece scripts de entrenamiento e inferencia, además de varios modelos disponibles para usar
  • El modelo está basado en la arquitectura Würstchen
  • La principal diferencia frente a modelos como Stable Diffusion es que funciona en un espacio latente mucho más pequeño
    • Stable Diffusion usa un factor de compresión de 8 y codifica una imagen de 1024x1024 como 128x128
    • Stable Cascade logra un factor de compresión de 42 y puede codificar una imagen de 1024x1024 como 24x24
    • El modelo condicionado por texto se entrena en este espacio latente altamente comprimido
  • Un espacio latente pequeño permite una inferencia más rápida y un entrenamiento más barato
  • Una versión anterior de esta arquitectura logró una reducción de costo de 16 veces frente a Stable Diffusion 1.5

Rendimiento y eficiencia

  • Stable Cascade se presenta como un modelo adecuado para casos de uso donde la eficiencia es importante
  • También permite métodos de extensión conocidos como fine-tuning, LoRA, ControlNet, IP-Adapter y LCM
  • En sus propias evaluaciones, Stable Cascade muestra el mejor desempeño en casi todas las comparaciones, tanto en alineación con el prompt como en calidad estética
  • La evaluación humana se realizó mezclando parti-prompts y aesthetic prompts
    • Stable Cascade se comparó con 30 pasos de inferencia
    • Los modelos comparados fueron Playground v2 con 50 pasos, SDXL con 50 pasos, SDXL Turbo con 1 paso y Würstchen v2 con 30 pasos
  • El modelo más grande incluye 1.4 mil millones de parámetros más que Stable Diffusion XL, pero aun así muestra tiempos de inferencia más rápidos

Estructura del modelo en 3 etapas

  • Como su nombre lo indica, Stable Cascade está compuesto por 3 modelos en cascada que generan imágenes: Stage A, Stage B, Stage C
  • Stage A y Stage B cumplen la función de comprimir imágenes, de forma similar al VAE de Stable Diffusion
  • Stage C recibe un prompt de texto y genera una pequeña representación latente de 24 x 24
  • Stage A es un VAE, y Stage B y Stage C son modelos de difusión
  • Este lanzamiento ofrece los siguientes checkpoints
    • Stage C: versiones de 1 mil millones y 3.6 mil millones de parámetros
    • Stage B: versiones de 700 millones y 1.5 mil millones de parámetros
    • Stage A: 20 millones de parámetros, fijo por su tamaño pequeño
  • Se recomienda fuertemente usar la versión de 3.6 mil millones de Stage C, ya que la mayor parte del fine-tuning se concentró en esa versión
  • Ambas versiones de Stage B dan buenos resultados, pero la versión de 1.5 mil millones destaca más en la reconstrucción de detalles pequeños y finos
  • Para obtener los mejores resultados, se sugiere usar las variantes más grandes de cada etapa

Funciones de inferencia y notebooks

  • El modelo puede ejecutarse con los notebooks de la sección inference
  • Esa sección incluye detalles sobre descarga de modelos, requisitos de cómputo y tutoriales de uso
  • Text-to-Image

    • text_to_image.ipynb ofrece las funciones básicas de texto a imagen, variaciones de imagen e imagen a imagen
    • Las variaciones de imagen entienden embeddings de imagen y pueden generar variantes de una imagen dada; en el ejemplo no se proporciona ningún prompt
    • Imagen a imagen funciona aplicando ruido a una imagen hasta cierto punto y luego generando desde ese punto de inicio
    • En el ejemplo, la imagen de la izquierda se ruidiza al 80% y se usa el caption A person riding a rodent.
    • También se puede acceder al modelo desde la biblioteca diffusers 🤗 a través de la documentación de stable-cascade en Hugging Face
  • ControlNet

    • controlnet.ipynb cubre cómo usar los ControlNet ofrecidos para Stable Cascade o ControlNet entrenados por el propio usuario
    • Los ControlNet de este lanzamiento incluyen Inpainting / Outpainting, Face Identity, Canny y Super Resolution
    • Face Identity ControlNet se lanzará más adelante
    • Todo puede usarse desde el mismo notebook, cambiando la configuración según cada ControlNet
  • LoRA

    • Stable Cascade ofrece su propia implementación para entrenar y usar LoRA
    • LoRA puede usarse para hacer fine-tuning del modelo condicionado por texto, Stage C
    • Se pueden agregar y entrenar nuevos tokens, y añadir capas LoRA al modelo
    • lora.ipynb muestra cómo usar una LoRA entrenada
  • Reconstrucción de imágenes

    • reconstruct_images.ipynb muestra cómo codificar y decodificar imágenes, así como las ventajas del método de alta compresión
    • El Diffusion Autoencoder de Stable Cascade permite trabajar en un espacio muy comprimido
    • Stage A y Stage B pueden usarse en modelos propios, de forma similar a como se usa el VAE de Stable Diffusion para entrenar otros modelos
    • El batch de ejemplo 4 x 3 x 1024 x 1024 se codifica como 4 x 16 x 24 x 24
    • El factor de compresión espacial es 1024 / 24 = 42.67
    • Después puede volver a decodificarse como 4 x 3 x 1024 x 1024 con Stage A y Stage B
    • Se indica que los resultados de reconstrucción son muy cercanos al original incluso en detalles pequeños, y que una reconstrucción así no sería posible con un VAE estándar u otros métodos similares

Entrenamiento, app y licencia

  • El código de entrenamiento incluye entrenamiento de Stable Cascade desde cero, fine-tuning, ControlNet y LoRA
  • Los métodos detallados de entrenamiento están disponibles en la training folder
  • La base de código está en una etapa inicial de desarrollo
    • Puede haber errores inesperados
    • El código de entrenamiento e inferencia podría no estar completamente optimizado
    • Si hay interés, planean seguir publicando actualizaciones con mejoras y optimizaciones recientes
    • Están abiertos a recibir ideas, feedback y contribuciones de actualización
  • Para ejecutar la app de Gradio, primero instala lo siguiente
  • Desde la raíz del proyecto, ejecuta la app de Gradio con el siguiente comando
    • PYTHONPATH=./ python3 gradio_app/app.py
  • El código se distribuye bajo la MIT LICENSE
  • Los pesos del modelo disponibles en Hugging Face se distribuyen bajo la STABILITY AI NON-COMMERCIAL RESEARCH COMMUNITY LICENSE

1 comentarios

 
GN⁺ 2024-02-14
Opiniones en Hacker News
  • Después de usarlo unas horas, parece que el cumplimiento del prompt mejoró mucho.
    Por ahora la calidad parece inferior a la de algunos modelos SDXL, pero voy a reservarme el juicio hasta probarlo unos días más.
    También es rápido; se siente aproximadamente 2 a 3 veces más rápido que SDXL no turbo.

    • Siempre elegiría el cumplimiento del prompt por encima de la calidad.
      Si para forzar una apariencia o profundidad específicas hay que recurrir a ControlNet, OpenPose y hasta depth maps, la solución para cada generación termina siendo demasiado personalizada.
      Al probarlo directamente, vi mejoras en cómo sigue el prompt, y las imágenes también me gustaron más visualmente.
    • Me pregunto cuánta VRAM necesita.
      Dicen que el modelo más grande tiene 1,400 millones de parámetros más que SDXL, y SDXL ya exige bastante VRAM.
    • ¿Se puede ejecutar también en CPU?
  • Muy impresionante.
    Según entiendo, Stability AI actualmente recibe inversión de riesgo, pero parece inevitable que queme muchísimo dinero y tampoco está claro si su modelo de negocio es sostenible.
    Tal vez merezca recibir financiamiento gubernamental para investigación.

    • Stability AI ya viene quemando mucho dinero desde hace tiempo, y por eso parece que los modelos más recientes como Stable Cascade ya no son open source con licencias comercialmente amigables.
      Se reportó que, al momento del acuerdo con Intel, gastaba alrededor de 8 millones de dólares al mes en facturas y sueldos, mientras que sus ingresos eran solo una fracción de eso.
      Hubo una publicación de Mostaque en X que decía que los ingresos de agosto fueron de 1.2 millones de dólares y que ese mes iban camino a 3 millones por software y servicios, pero luego fue eliminada.
      https://fortune.com/2023/11/29/stability-ai-sale-intel-ceo-r...
    • Recuerdo haber visto antes un comentario del fundador de Stability AI, Emad, en algún lugar de HN, sobre cuál era exactamente el modelo de negocio y hacia dónde iba.
      Hoy la búsqueda de HN no me está dando buenos resultados, así que no encuentro el comentario específico que recuerdo.
      Si alguien puede encontrarlo, su página de usuario está aquí: https://news.ycombinator.com/user?id=emadm
    • Creo que Stability debería recibir subsidios de investigación.
    • Los investigadores no pertenecen a stability.ai, sino a universidades de Alemania y Canadá.
      Entonces me pregunto cómo funciona esta estructura.
      ¿Es trabajo exclusivo para stability.ai?
  • Viendo el commit, la licencia cambió de MIT a una licencia propia personalizada: https://github.com/Stability-AI/StableCascade/commit/209a526...
    ¿Es legalmente posible usar un snapshot anterior al cambio de licencia bajo la licencia MIT existente?

    • La intención parece bastante clara: querían usar una licencia no comercial, así que si alguien realmente lo llevara al extremo, podría terminar en tribunales.
      En general, los tribunales miran el panorama completo, consideran la intención y entienden que puede haber errores administrativos.
      Sin embargo, podría haber una excepción si alguna empresa afirmara que invirtió muchos recursos confiando en la licencia anterior.
      El momento del commit parece bastante importante. Si el repositorio estuvo en MIT solo durante unas horas antes de hacerse público, sería difícil que una empresa argumente que hizo una inversión sustancial.
    • Sí se puede.
      Ese commit puede seguir usándose como se quiera bajo la licencia MIT que tenía al momento de publicarse.
      Es parecido a comprar un ebook: aunque después salga una segunda edición solo en tapa dura, todavía puedes leer el ebook de la primera edición.
    • La arquitectura del modelo, el código de entrenamiento y demás siguen siendo MIT, y parece que los pesos, que son el resultado de entrenarlo en un enorme clúster de GPU, junto con el dataset usado, están bajo la nueva licencia.
    • El código es MIT y el modelo tiene una licencia no comercial.
      Son obras distintas bajo licencias distintas.
      Stability AI dijo que esta licencia no comercial se debe a que es una vista previa técnica, como SDXL 0.9.
    • La licencia MIT no es viral como la GPL.
      Puedes cerrar una base de código con licencia MIT, pero no puedes cambiar retroactivamente la licencia del código antiguo que ya fue publicado.
      El commit inicial de Stability tenía una licencia MIT, así que puedes hacer fork de ese commit y usarlo como quieras.
      La parte complicada es que hicieron un commit cambiando la licencia de MIT a propietaria, pero sin cambios de código.
      Eso posiblemente no sea válido, porque no se puede distribuir la misma base de código bajo dos licencias contradictorias entre sí.
      Solo se puede aplicar la nueva licencia a los cambios agregados a la base de código después del cambio de licencia.
      No diría que sea “ilegal”, pero como ya distribuyeron el mismo software bajo una licencia abierta, sostener que es software propietario probablemente no aguantaría en tribunales.
  • Aquí hay un playground optimizado: https://www.fal.ai/models/stable-cascade

    • “sign in to run” parece una oportunidad de marketing perdida.
      Especialmente en un campo tan competitivo como este, y el público de HN probablemente prefiera ejecutarlo por su cuenta si le piden registrarse solo para probar la generación de una imagen.
  • Como otros generadores de imágenes que he probado, este tampoco logra hacer bien las teclas de piano [1].
    Parece que haría falta otro enfoque para poder contar los grupos de teclas negras.
    [1] https://fal.ai/models/stable-cascade?share=13d35b76-d32f-45c...

    • Creo que esto va más allá.
      En mi caso, cuando generaba imágenes relacionadas con básquetbol, la mayoría tenía más de una pelota.
      No soy experto, pero parece que el entrenamiento no capta, o solo capta parcialmente, restricciones básicas de la vida cultural humana, como que todas las teclas de un piano deben ser iguales o que en un partido solo hay una pelota.
    • Al igual que con las manos humanas, la coherencia es un problema que se resuelve aumentando el tamaño del modelo y el entrenamiento.
  • Este modelo fue construido sobre la arquitectura Würstchen
    Hay un video de uno de los autores que explica muy bien cómo funciona este modelo
    https://www.youtube.com/watch?v=ogJsCPqgFMk

    • Es un buen video y, en resumen, va así :)
      Gemini Advanced> Summarize this video: https://www.youtube.com/watch?v=ogJsCPqgFMk
      Este video trata sobre el método de entrenamiento de un modelo de difusión de texto a imagen llamado Würstchen
      Es mucho más eficiente que métodos existentes como Stable Diffusion 1.4, y puede producir resultados similares usando solo 1/16 del tiempo de entrenamiento y del cómputo
      La clave es un proceso de compresión en dos etapas
      En la primera etapa, un VQ-VAE comprime la imagen a un espacio latente 4 veces más pequeño que el espacio latente que usa Stable Diffusion, y en la segunda etapa un modelo de difusión vuelve a comprimir el espacio latente 10 veces
      Por eso, la tasa de compresión total es de 40 veces, mucho mayor que la compresión de 8 veces de Stable Diffusion
      Gracias al espacio latente comprimido, el modelo de difusión de texto a imagen de Würstchen puede entrenarse con un tamaño mucho menor y más rápido que los modelos de Stable Diffusion
      Würstchen puede entrenarse en una sola GPU con 24,000 horas-GPU, mientras que Stable Diffusion 1.4 necesita 150,000 horas-GPU
      Además de ser eficiente, puede crear imágenes de calidad similar a Stable Diffusion, y en imágenes de mayor resolución o con más detalle incluso puede ofrecer mejor calidad
      En general, Würstchen es un avance importante en el campo de la generación de texto a imagen, y al permitir entrenar modelos de forma más eficiente y barata puede ampliar sus usos a imágenes de marketing, ilustraciones de libros y avatares personalizados
  • ¿Hay algún método para generar varias imágenes del mismo modelo?
    Por ejemplo, crear imágenes de un modelo de auto rotado desde varios ángulos, pero manteniendo siempre el mismo auto generado

    • Creo que alguien con recursos debería entrenar Zero123 [1] con este backbone
      [1] https://zero123.cs.columbia.edu/
    • Sí se puede
      Se puede hacer un flujo imagen de entrada => embedding => N imágenes, y si se piensa incluso en el punto de vista de renderizado 3D, se puede aplicar ControlNet a esas N imágenes
      Referencia: “The model can also understand image embeddings, which makes it possible to generate variations of a given image (left). There was no prompt given here.”
  • Recuerdo que antes estuve experimentando con estos dos investigadores para encontrar la mejor forma de conectar condicionalmente Stage B con la representación latente
    Nos dimos por vencidos porque simplemente concatenar los canales de entrada con el upsample más cercano de la representación latente daba mejores resultados que una atención cruzada muy fancy con embeddings de posición 2D relativos
    Este modelo antes era conocido como Würstchen v3

  • ¿Funcionará en AMD?
    No pude encontrar si tiene soporte
    Los usuarios que ejecutan Stable Diffusion en AMD probablemente sufren una caída de rendimiento, así que en proyectos como este es una funcionalidad bastante importante

  • Lo más impresionante, en mi opinión, es la compresión
    Poder comprimir imágenes 42 veces es una ventaja enorme en dispositivos móviles, con malas conexiones a internet, o ambas cosas

    • Eso es una compresión espacial de 42 veces, y requiere 16 canales en lugar de los 3 canales de RGB
    • A estas alturas, seguramente alguien ya está creando un códec de video basado en IA rápido, que incluya un pequeño modelo preentrenado y funcione incluso en entornos con memoria limitada, como televisores
      La idea sería ofrecer resolución 8K con bajo ancho de banda