Anifusion-SD

Dec 23 2022
TL; DR Este es un nuevo modelo similar a la difusión estable (ajustado desde SD2) para imágenes de anime, que admite una resolución de 768x768 y supera significativamente a algunos modelos de anime populares según nuestras evaluaciones. Los puntos de control son públicos (instrucciones de instalación), la demostración está disponible desde hace algún tiempo.

TL;RD

Este es un nuevo modelo similar a la difusión estable (ajustado desde SD2) para imágenes de anime, que admite una resolución de 768x768 y supera significativamente a algunos modelos de anime populares según nuestras evaluaciones. Los puntos de control son públicos ( instrucciones de instalación ), la demostración está disponible desde hace algún tiempo.

  • Introducción
  • Antecedentes
    - Modelos
    de difusión - Difusión latente
    - Difusión estable
    - Difusión Waifu
    - Difusión estable 2
  • Nuestro modelo: entrenamiento
    - Acondicionador
    - Problemas técnicos y optimizaciones
    - Actualización del conjunto de entrenamiento - Entrenamiento
    de mayor resolución
    - Cambios de muestreo
  • Resultados
  • Comparación con otros modelos de anime
  • Discusión
  • Referencias
  • Punteros

Después de mis experimentos con modelos de difusión de entrenamiento desde cero, varias personas señalaron que hay un montón de versiones de difusión estable ajustadas en los mismos conjuntos de datos o similares. En particular:

  • Waifu Diffusion : está utilizando un subconjunto relativamente pequeño de los datos, y solo alimenta el mensaje de la etiqueta en CLIP para el acondicionamiento), sin ninguna modificación de código a la Difusión estable original (esto es problemático en mi opinión). Sin embargo, parece ser el modelo de difusión de anime más popular en este momento. Lanzó el puesto de control para el público, a diferencia del próximo modelo;
  • NovelAI : esto lo hace una empresa real, no investigadores/ingenieros independientes. No lanzan el modelo, pero le proporcionan una interfaz paga. Aparentemente, también hubo algo de drama con la filtración de su punto de control y código, por lo que parece que tenían algunas pequeñas modificaciones al Stable Diffusion original;
  • Anything-v3 : este apareció un poco más tarde, no hay mucha información sobre el modelo, pero se sospecha que está ajustado por WaifuDiffusion (al menos, usa transformaciones rápidas similares antes de enviarlo a CLIP). Produce imágenes muy detalladas y atractivas, pero no es muy fiel al mensaje. Su espacio de salida es muy pequeño (carece de diversidad, todas las imágenes tienen el mismo estilo y son similares entre sí), y recuerda a los modelos GAN anteriores a la difusión. A diferencia de los otros modelos, este tampoco es capaz de generar NSFW, por lo que quizás se obtuvo ajustando un pequeño conjunto de datos de imágenes de alta calidad de un solo artista.

Sin embargo, dada la abundancia de modelos en esta área, al principio, decidí no molestarme en involucrarme y dejar que el progreso siguiera su curso. Pero ahora, se lanzó Stable Diffusion 2 y todavía no hay un progreso visible en los modelos de anime. Así que decidí probarlo. En esta publicación, describo cómo afiné Stable Diffusion 2 con un acondicionador personalizado y muestro los resultados. Por supuesto, también publico el modelo: según las pocas indicaciones que probé, era mejor que los modelos enumerados anteriormente. Las siguientes secciones se enfocan en los detalles técnicos, si no está interesado, puede pasar directamente a Resultados .

Antecedentes

Para comprender lo que está sucediendo y lo que ha cambiado, primero hagamos una breve descripción general de los modelos existentes.

Modelos de difusión

No entraré en detalles de los modelos de difusión, ya hay muchas buenas críticas en Internet. Para nuestros propósitos, es suficiente saber que la idea es descomponer el proceso de generación de imágenes en una secuencia de pasos de "eliminación de ruido". Durante el entrenamiento, la columna vertebral del modelo (en el caso de imágenes, generalmente un UNet) recibe una imagen corrupta y el paso de eliminación de ruido, y está tratando de deshacer un solo paso de corrupción. Durante la inferencia, comenzamos con un ruido aleatorio y aplicamos la columna vertebral repetidamente para "deshacer" todos los pasos de corrupción imaginarios. La matemática exacta detrás de esto debe ser precisa. En el momento de la inferencia, la mayoría de los modelos de difusión modernos modifican el proceso para reducir el número de pasos de muestreo (esto fue posible gracias a que alguien notó que el proceso es sospechosamente similar a resolver una ecuación diferencial estocástica con un método numérico y aplicó un solucionador DE más inteligente en cambio).

difusión latente

Podría decirse que esta es la idea más importante, utilizada en la mayoría de los modelos de difusión abierta. Empresas como Google u OpenAI pueden darse el lujo de entrenar y usar modelos de difusión en el espacio de píxeles original, porque tienen mucho hardware. Pero para un profano, entrenar (o incluso ejecutar) UNet en un espacio de 512x512 píxeles es muy costoso. La idea es entrenar un codificador automático que comprima la imagen desde el espacio original de 512x512x3 a un espacio latente (en el caso de Difusión estable, 64x64x4). El codificador automático se entrena como un VAE con regularización basada en KL, para mantener el espacio latente "agradable".

Luego, el modelo realiza la difusión en este espacio de 64x64x4, que obviamente es mucho más eficiente. La desventaja es que el VAE no es perfecto y se pierde parte de la información al comprimir la imagen. Pero en la práctica, funciona muy bien.

FWIW, son posibles enfoques alternativos, por ejemplo, Imagen genera una imagen de baja dimensión en el espacio de píxeles y luego la aumenta progresivamente. Sin embargo, esto no es relevante para el modelo que estamos describiendo en este artículo.

Difusión estable

Esto fue más un avance social que técnico. El modelo era un modelo de difusión latente "vainilla", entrenado en LAION y, a diferencia de la mayoría de los modelos de generación de imágenes anteriores, se lanzó al público. Esto hizo que la tecnología estuviera disponible para una amplia audiencia que no estaba familiarizada con el aprendizaje automático, lo que generó mucha creatividad, debates y personas que la ajustaron en varios conjuntos de datos (por ejemplo, los modelos de anime mencionados anteriormente).

Una elección interesante en la arquitectura que es muy relevante para nosotros es cómo el modelo se está acondicionando. Por lo general, los modelos se entrenan en los modos "incondicional" ( UNet (imagen corrupta) ~ imagen ) y condicional ( UNet (imagen corrupta, condición) ~ imagen ), y se usa una guía sin clasificador cuando se muestrea: en lugar de usar UNet ( imagen corrupta , condición ) al generar imágenes, utiliza C * UNet ( imagen corrupta, condición ) ( C — 1) * UNet ( imagen corrupta ) y Ces significativamente mayor que 1 (por ejemplo, 7). Esto no es muy intuitivo, pero mejora mucho tanto la calidad de la imagen como la pronta fidelidad de las imágenes generadas.

Lo que es relevante para nosotros es cómo se obtiene la condición . En Stable Diffusion, utilizan la última capa oculta de codificador de texto del modelo CLIP . Está congelado, es decir, los gradientes no se propagan hacia atrás durante el entrenamiento. Se puede considerar un modelo de codificador de lenguaje, con algunos sabores secundarios de imagen que sesgan la comprensión del lenguaje hacia la comprensión visual.

Difusión de Waifu

Esta es una difusión estable ajustada en imágenes de anime. Parece que usaron un subconjunto de Danbooru2021 (o algo similar) como su conjunto de entrenamiento. Usaron Stable Diffusion tal como está, sin ninguna modificación en el código (sin embargo, ajustaron la parte del decodificador de VAE para que funcionara un poco mejor con las imágenes de anime).

Como resultado, usan CLIP de manera similar como acondicionador, alimentándolo con una cadena con etiquetas como mensaje. Supongo que funcionó bastante mal, ya que también preprocesan las etiquetas (por ejemplo, reemplazan los guiones bajos con espacios). Pero incluso con eso, parece que la comprensión de CLIP del mensaje no es óptima.

Difusión estable 2

Esta es una versión incremental que volvió a entrenar el modelo (del mismo tamaño) desde cero y también reemplazó el acondicionador con OpenCLIP . También tiene algunas características adicionales interesantes, como img2img basado en profundidad y un modelo de mayor resolución (768x768 píxeles).

Nuestro modelo: la formación

El objetivo es ajustar Stable Diffusion 2 en las imágenes de anime, reemplazando el codificador con un modelo personalizado especializado para el conjunto de etiquetas como entrada, a diferencia del lenguaje natural de CLIP. Además de un mejor acondicionamiento, esto también permitiría la técnica de aumento rápido de Anifusion , que ayudó tanto a la calidad y la diversidad allí.

Acondicionador

Usamos el mismo enfoque que en Anifusion: el modelo de acondicionamiento es un transformador de tamaño BERT sin incrustaciones posicionales (para capturar la simetría de las indicaciones de etiquetas: el orden de las etiquetas no debería importar). Simplemente reemplazamos el acondicionador, manteniendo igual la parte de atención cruzada de la columna vertebral de difusión.

Una pregunta importante aquí es cómo inicializar el transformador de pesos. Comenzar con el acondicionador no entrenado y la UNet entrenada y entrenarlos juntos puede conducir a que el proceso de entrenamiento destruya o degrade significativamente los pesos de la UNet. Afortunadamente, no es difícil arreglar esto: podemos congelar UNet y ejecutar el entrenamiento solo para la parte del transformador durante algún tiempo.

Problemas técnicos y optimizaciones

Para que el entrenamiento sea eficiente, es importante ajustar el tamaño de lote a la RAM de video tanto como sea posible (por ejemplo, porque el costo de aplicar la lógica del optimizador se paga solo una vez por lote). Hay básicamente dos direcciones aquí.

Cambios en la canalización

El código de entrenamiento SD canónico ejecuta el codificador VAE en línea, analiza la imagen sin procesar y la codifica. Esta es la fruta pendiente más baja de la que deshacerse: los pesos VAE consumen VRAM, las variables intermedias de la aplicación de este codificador también consumen VRAM, el proceso de codificación lleva tiempo. En particular, si hacemos varias pasadas sobre los datos, no tiene sentido pagar el costo de codificar la misma imagen varias veces.

Afortunadamente, esta parte es fácil de optimizar: simplemente codificamos previamente todas las imágenes en el conjunto de entrenamiento. El beneficio adicional es que el conjunto de entrenamiento resultante es mucho más pequeño (en términos de tamaño de disco) que las imágenes originales de 512x512 en el espacio de píxeles.

Otra forma de ahorrar un poco de VRAM es deshabilitar EMA. La media móvil exponencial es un truco para mejorar ligeramente la calidad del modelo al promediar (aproximadamente) los pesos de un montón de últimos puntos de control, y no almacenar EMA es una manera fácil de usar menos VRAM sin dañar mucho el modelo resultante.

Cambios de entrenamiento

Una forma popular de acelerar el entrenamiento y ahorrar VRAM es usar una precisión más baja: en lugar de fp32 habitual (números de punto flotante de 32 bits), use fp16 o bf16 (variaciones de números de punto flotante de 16 bits) o precisión mixta (realice algunas operaciones en fp16).

Lo probé y, de hecho, ayuda al rendimiento, pero es demasiado peligroso. En particular, en un momento, agregué "with torch.autocast():" (precisión mixta) para llamar la atención, y luego perdí bastante tiempo averiguando por qué el modelo diverge lentamente con el tiempo.

Como resultado, decidí que sería más seguro no aplicar optimizaciones de esta naturaleza al modelo, dado que el entrenamiento ya era bastante eficiente.

Actualización del conjunto de entrenamiento

En Anifusion, se utilizó una versión anterior del conjunto de datos de Danbooru , por lo que decidí que era un buen momento para actualizarlo y, al mismo tiempo, ampliar el tamaño del conjunto de entrenamiento y el conjunto de etiquetas admitidas en el aviso. Sin embargo, hubo un par de complicaciones: (1) la nueva versión del conjunto de datos no era un superconjunto simple del anterior, y (2) decidí hacerlo mientras el modelo ya se estaba entrenando, así que trabajo adicional para hacer la transición del existente era necesario un puesto de control.

Diferencias de conjuntos de datos

Esto es un poco menor, pero después de descargar los metadatos para la nueva versión del conjunto de datos, noté que desaparecieron un montón de imágenes (un par de por ciento). Algunas etiquetas que llegaron al top 2.5k antes también desaparecieron (incluidas algunas de las más populares), además, las imágenes eliminadas coincidían con las etiquetas eliminadas.

Una inspección más profunda reveló que todas las etiquetas desaparecidas coincidían con el patrón "fringy NSFW" (algunas de ellas eran tan flecos que ni siquiera sabía que existían tales cosas...). Era un poco inconsistente, ya que se mantuvieron otras etiquetas e imágenes de naturaleza similar. Supongo que el mantenedor del conjunto de datos o el sitio de alojamiento de imágenes de origen lo implementaron como un truco rápido para abordar algunas preocupaciones de relaciones públicas. De todos modos, solo tomé la unión de conjuntos de datos antiguos y nuevos, obteniendo alrededor de 2 millones de imágenes para entrenar. Además, saqué muestras de 800k imágenes con una resolución ≥ 786x768 de ellas, para ajustar el modelo de mayor resolución más adelante.

Ampliación del conjunto de etiquetas

Esta sección es en realidad un poco no trivial. En el momento en que se produjo el nuevo conjunto de datos, el modelo se entrenó durante bastante tiempo, tenía un transformador acondicionador bien convergente y tomaba como entradas las indicaciones de las etiquetas superiores de 2.5k. Para la versión más nueva, decidí tomar las etiquetas top-12k en su lugar. ¿Cómo agregarlos al modelo?

Lo que hay que actualizar es la mesa de empotrar del transformador (de 2500x1024 a 12000x1024). Un enfoque ingenuo es inicializar aleatoriamente las nuevas incrustaciones y entrenar el modelo durante algún tiempo con UNet congelado, actualizando solo el transformador. Pero esto es (1) un desperdicio en términos de tiempo y computación, (2) aburrido. ¿Podemos inicializarlos mejor?

Veamos qué información está disponible para nosotros. Ya hemos entrenado incrustaciones de 2.5k, y las incrustaciones para las nuevas etiquetas deberían ser algo similares a ellas. ¿Pero a cuáles? Una idea ingenua es utilizar incrustaciones de etiquetas semánticamente similares. Pero, ¿cómo conseguimos la similitud semántica? El antiguo word2vec es muy bueno en eso, por lo que podemos simplemente tomar los conjuntos de etiquetas y entrenar las incrustaciones de word2vec en ellos. A continuación se muestra una visualización de t-SNE del resultado (los puntos oscuros corresponden a las etiquetas NSFW, por lo que es fácil omitirlos para las personas que no quieren verlos): enlace interactivo .

Veamos la misma visualización para las 2500 incrustaciones entrenadas del transformador: enlace interactivo .

Así que en realidad no es lo mismo, y se centró más en la apariencia visual que en la semántica. Sin embargo, debe estar lo suficientemente cerca, para que podamos calcular las incrustaciones iniciales para las nuevas etiquetas de la siguiente manera: tome los vecinos más cercanos en el espacio word2vec de los primeros 2.5k y agregue sus incrustaciones de transformadores. De hecho, incluso podemos mejorarlo un poco: entrene un pequeño NN que transforme word2vec para que la agregación de vecinos más cercana coincida con la verdadera incrustación en los primeros 2.5k y aplíquelo al resto de las etiquetas.

Con esto, obtenemos una inicialización razonable para las nuevas incrustaciones, modificamos el último punto de control y reanudamos el entrenamiento en los nuevos datos tal como están.

Entrenamiento de alta resolución

Stable Diffusion 2 tiene una versión que genera imágenes de tamaño 768x768 (es decir, 2,25 veces más grande que 512x512), que tiene algunas propiedades interesantes (p. ej., parece manejar el dibujo de los dedos mejor que la versión de menor resolución). Así que decidimos hacer lo mismo con nuestro modelo. En particular, tenemos dos etapas del entrenamiento:

  • Baja resolución: entrenamiento en imágenes de 512x512 (64x64x4 espacio latente), con tamaño de lote 11, tasa de aprendizaje 5e-6, para 1 millón de pasos;
  • Alta resolución: reanudando desde la fase anterior, entrene en imágenes de 768x768 (96x96x4 espacio latente), con tamaño de lote 5, tasa de aprendizaje 5e-6, 80k pasos.

Cambios de muestreo

En Anifusion , aumentar el indicador con un modelo separado mejoró drásticamente los resultados. Intuitivamente, es más fácil muestrear cosas en el espacio de concepto discreto, a diferencia del espacio continuo implícito dentro del proceso de difusión.

Aquí, aplicamos la misma técnica, volviendo a entrenar el transformador de aumento rápido en el nuevo conjunto de entrenamiento. Observamos el mismo efecto: la calidad y la diversidad de la muestra aumentan drásticamente con el aumento de indicaciones, especialmente para indicaciones breves.

Resultados

Parece que el modelo de 768x768 produce mejores imágenes que el de 512x512, y no solo por la resolución: la consistencia general de las imágenes y (especialmente) los detalles anatómicos de los personajes son mejores. Sin embargo, parece que la fidelidad rápida es un poco peor (aunque no tengo ninguna medida adecuada, solo mi impresión).

Una cosa a tener en cuenta es que, en comparación con Anifusion, el modelo parece estar más sesgado hacia las imágenes NSFW/subidas de tono. Parte de esto se puede atribuir a un aumento rápido, pero la parte de UNet también es responsable. No estoy seguro de por qué está sucediendo (los cambios en el conjunto de entrenamiento fueron bastante pequeños; ¿quizás el tamaño o el comienzo de Stable Diffusion causan esto?).

Repasemos varios tipos de imágenes paso a paso.

Retratos

Este es el caso de uso más simple, y los retratos de anime se generaron con éxito incluso en la era GAN. Así que, como era de esperar, el modelo no tiene problemas con esto (algunos ejemplos a continuación).

Un solo carácter, etiquetas populares

Esta es una prueba más difícil y, como era de esperar, uno puede obtener malas imágenes de vez en cuando (raramente). Un modo de falla común es la mala anatomía: un brazo o una pierna adicional. Y, por supuesto, los dedos son bastante desafiantes para el modelo.

Un solo carácter, etiquetas de cola

Aquí estamos probando etiquetas menos populares, en particular, las que se agregaron en las etapas posteriores del entrenamiento (consulte más arriba para obtener más detalles). Parecen funcionar bastante bien, aunque no perfectos. A continuación se muestran algunos ejemplos. En general, parece que las etiquetas de caracteres son más fáciles para el modelo que las etiquetas de conceptos.

Etiquetas recién agregadas, de izquierda a derecha: "león" (no está claro, tal vez lo está montando), "facepalm" (no funcionó), "venti_ (genshin_impact)" (funcionó)

Interacciones de personajes

Finalmente, estamos llegando a algo interesante. A Anifusion original no le fue bien cuando los personajes interactuaban. ¿Es mejor el nuevo modelo?

Múltiples personajes que están parados uno al lado del otro parecen estar bien:

Las acciones simples también funcionan un poco:

De izquierda a derecha: "beso", "tomados de la mano", "abrazo"

Las interacciones con los objetos también son más o menos finas:

De izquierda a derecha: “sosteniendo_pistola”, “montando”, “sosteniendo_comida”

Sin embargo, si tratamos de especificar interacciones complicadas, la mayoría de las veces produce horror corporal (no publicaré estas imágenes aquí, ya que pueden ser perturbadoras). ¿Por qué está pasando esto? Especulo que esto se debe a que las indicaciones son solo conjuntos de etiquetas y no especifican las interacciones con suficiente precisión. Lo que hizo que los modelos de difusión produjeran buenas imágenes en primer lugar fue la orientación sin clasificadores: enfatizar demasiado las indicaciones mejoró drásticamente la calidad en comparación con el muestreo sin indicaciones, porque es difícil muestrear conceptos complicados dentro de la difusión. Por lo tanto, podemos esperar que todo lo que se especifique sin ambigüedades en el indicador se genere bien, pero las ambigüedades se resolverán de una manera no tan buena. Las indicaciones en lenguaje natural pueden ser mejores en este sentido.

FWIW, en comentarios a la publicación original de Anifusion en reddit, Gwern sugirió usar BLIP para generar mensajes de lenguaje natural a partir de las imágenes; De hecho, lo probé y la calidad de las indicaciones fue extremadamente baja, por lo que no es tan fácil.

Estilos

En el Stable Diffusion original, la gente encontró numerosas formas de especificar estilos al modelo, principalmente agregando nombres de algunos artistas. ¿Funciona lo mismo para el modelo de anime?

Probándolo, funciona muy bien (esto es una ventaja en comparación con AnythingV3). A continuación se muestran ejemplos en varios estilos aleatorios.

Comparación con otros modelos de anime

No hacemos una comparación con AnythingV3, ya que realmente no respeta el aviso, generando imágenes similares para prácticamente cualquier cosa (como sugiere el nombre). Esto deja a WaifuDiffusion y NovelAI. Decidimos no hacer la comparación con NovelAI, ya que eso requeriría usar el punto de control filtrado y es mejor mantenerse alejado de ese drama. Esto nos deja con WaifuDiffusion.

Una cosa a tener en cuenta es que la comparación en indicaciones breves sería demasiado injusta para WaifuDiffusion: no incluye aumento de indicaciones (a diferencia de Anifusion), lo que arroja resultados muy pobres en indicaciones breves. Así que hacemos dos comparaciones diferentes en su lugar. En uno, muestreamos conjuntos de etiquetas del conjunto de datos original, eliminando efectivamente el aumento rápido de la consideración y comparando solo la parte de difusión. En el segundo, construimos manualmente algunos indicadores de tamaño mediano y evaluamos ambos modelos en ellos (esto incluye el efecto del aumento de indicadores).

Conjuntos de etiquetas del conjunto de datos

Tomamos muestras de 97 conjuntos de etiquetas del conjunto de datos (uniformemente, filtrando a imágenes clasificadas como "seguras"). Para Anifusion, los preprocesamos agregando "rating_s, score_perc_100, added_score_perc_100" al aviso. Para WaifuDiffusion, los preprocesamos reemplazando guiones bajos con espacios. En ambos casos, utilizamos muestreo DDIM con 50 pasos y escala de orientación sin clasificador 9.

Después de obtener algunas calificaciones humanas (con voltear los lados al azar para comparar), obtenemos los siguientes resultados contra Waifu:

  • Anifusion es mejor: 30%
  • Waifu es mejor: 24%
  • Más o menos lo mismo: 46%

Un patrón de falla que noté en Waifu: a menudo genera una subimagen en lugar de una imagen completa, truncando la cabeza del personaje. Un patrón de falla de Anifusion es un NSFW espontáneo (y relacionado, mala anatomía; por alguna razón, cuanto más cerca está la imagen de NSFW, peor es la anatomía del modelo).

Nota al margen: aquí puede encontrar los resultados de AnythingV3 para las mismas indicaciones. Los resultados se ven bien, pero uno puede ver por qué dudo en incluirlo en las comparaciones: todas las imágenes parecen tener exactamente el mismo estilo, con una gran falta de diversidad, lo que significa que el modelo tiene un espacio de salida mucho más pequeño.

Entonces, con el muestreo en distribución, no es drásticamente mejor. Pero, ¿y si usamos la versión de alta resolución del modelo?

  • Anifusion es mejor: 41%
  • Waifu es mejor: 13%
  • Más o menos lo mismo: 46%

Uno puede notar que hay una cantidad no trivial de “más o menos lo mismo”. La mayoría de estos ejemplos son ambos modelos igualmente buenos, pero hay algunos en los que ambos modelos son terriblemente malos (de alguna manera están correlacionados en esto).

Indicaciones manuales de tamaño mediano

Usamos el mismo preprocesamiento de solicitud que se describe en la sección anterior. Preparamos manualmente 33 avisos razonables de tamaño mediano (por supuesto, dado que los prepara una sola persona, es posible que no sean representativos de la distribución general).

Aquí, los resultados son muy diferentes:

  • Anifusion es mejor: 73%
  • Waifu es mejor: 9%
  • Más o menos lo mismo: 18%

Como podemos ver, el aumento rápido marca la diferencia. ¿Qué sucede si usamos el modelo de alta resolución? Los resultados son bastante similares ( datos sin procesar ):

  • Anifusion es mejor: 73%
  • Waifu es mejor: 3%
  • Casi lo mismo: 24%

Accesibilidad para laicos

Una observación interesante es que incluso después de un millón de minilotes de entrenamiento, el modelo continúa mejorando. No está claro si el modelo recuerda algo del punto de control de difusión estable original después de tantos pasos. ¿Quizás el conjunto de datos de anime es lo suficientemente fácil como para que uno pueda entrenar modelos de difusión de tamaño SD desde cero en hardware básico, sin el arranque en caliente de la SD existente? Esta es una dirección que sería algo para investigar: si este es el caso, probar nuevas arquitecturas para las personas debería ser más fácil, sin la necesidad de gastar millones de dólares en computación, como es el caso de la capacitación basada en LAION.

Más mejoras de calidad

Es interesante ver hasta dónde es posible llegar con el modelo actual, así que quiero ajustarlo un poco más, posiblemente usando el conjunto de datos completo, en lugar del subconjunto de 2M. Pero sospecho que el factor limitante es la calidad del conjunto de datos, no la cantidad de ajustes (es decir, para mejorar la calidad del modelo, uno necesitaría alimentar solo imágenes de mayor calidad o agregar un identificador especial al acondicionador que ayude al modelo). para distinguir las imágenes mejores de las peores). Que yo sepa, no hay modelos confiables como este para anime (para imágenes generales, las personas usan el subconjunto "estética" de LAION). Aunque hay algunos modelos que producen excelentes resultados que se ven diferentes de este modelo o WaifuDiffusion (por ejemplo, el modelo de anime de Midjorney, que está disponible solo en forma de imágenes seleccionadas por ellos), esto podría ser posible.

Es importante tener en cuenta que la generación de mayor resolución mejora la calidad en otros aspectos además de la resolución, por ejemplo, las infames "manos de IA" mejoran. Me pregunto si aumentarlo aún más a 1024x1024 generaría más mejoras. Algo para probar puede ser usar la difusión en cascada (por ejemplo, Imagen ) en el espacio latente (por ejemplo, 64x64 -> 128x128 -> 256x256 en el espacio latente, lo que produce 2048x2048 en el espacio original).

usabilidad

Una preocupación con lo que estoy lanzando es que es una prueba de concepto. El código para el modelo es diferente de SD, por lo que no es realmente compatible con la mayoría de las herramientas (especialmente, la parte del tokenizador rápido). Entonces, aunque este modelo se ve mejor que otros modelos de anime disponibles, la facilidad de uso no es tan buena. Una posible solución sería que la comunidad (o yo, si tengo tiempo para ello) lo integre correctamente con las herramientas existentes, o lo haga compatible con SD a nivel de interfaz.

Referencias

  • Difusión estable 2
  • Difusión latente
  • Conjunto de datos Danbooru2021
  • Instrucciones para abrir la interfaz de usuario web
  • Puntos de control del modelo (huggingface): 512x512 , 768x768 , rápido aumentador
  • SD Github repo adaptado para el modelo
  • Demostración de 768x768 : restringida a "calificación: segura", la mantendré funcionando durante un tiempo, pero eventualmente no la mantendré