Afinamiento de instrucciones de difusión estable con InstructPix2Pix
Mejorar instrucciones de difusión con InstructPix2Pix.
Esta publicación explora la adaptación de instrucciones para enseñar a Stable Diffusion a seguir instrucciones para traducir o procesar imágenes de entrada. Con este método, podemos indicar a Stable Diffusion que utilice una imagen de entrada y una “instrucción”, como – Aplicar un filtro de dibujos animados a la imagen natural.
Esta idea de enseñar a Stable Diffusion a seguir instrucciones de usuario para realizar ediciones en imágenes de entrada se introdujo en InstructPix2Pix: Aprendiendo a seguir instrucciones de edición de imágenes. Discutimos cómo ampliar la estrategia de entrenamiento InstructPix2Pix para seguir instrucciones más específicas relacionadas con tareas de traducción de imágenes (como la creación de dibujos animados) y procesamiento de imágenes a nivel de bajo nivel (como la eliminación de lluvia de imágenes). Cubrimos:
- Introducción a la adaptación de instrucciones
- La motivación detrás de este trabajo
- Preparación de conjuntos de datos
- Experimentos de entrenamiento y resultados
- Aplicaciones potenciales y limitaciones
- Preguntas abiertas
Nuestro código, modelos pre-entrenados y conjuntos de datos se pueden encontrar aquí.
Introducción y motivación
La adaptación de instrucciones es una forma supervisada de enseñar a los modelos de lenguaje a seguir instrucciones para resolver una tarea. Se introdujo en Fine-tuned Language Models Are Zero-Shot Learners (FLAN) de Google. En tiempos recientes, es posible que recuerdes trabajos como Alpaca y FLAN V2, que son buenos ejemplos de lo beneficioso que puede ser la adaptación de instrucciones para diversas tareas.
La figura siguiente muestra una formulación de la adaptación de instrucciones (también llamada “ajuste de instrucciones”). En el artículo FLAN V2, los autores toman un modelo de lenguaje pre-entrenado (como T5, por ejemplo) y lo ajustan finamente en un conjunto de datos de ejemplos, como se muestra en la figura siguiente.
- Hugging Face colabora con Microsoft para lanzar el Catálogo de Mode...
- Haciendo que los LLMs sean aún más accesibles con bitsandbytes, cua...
- Presentando la integración de BERTopic con el Hugging Face Hub
Con este enfoque, se pueden crear ejemplos que cubran muchas tareas diferentes, lo que hace que la adaptación de instrucciones sea un objetivo de entrenamiento multitarea:
Utilizando una filosofía similar, los autores de FLAN V2 realizan la adaptación de instrucciones en una mezcla de miles de tareas y logran generalización sin necesidad de ajuste a tareas no vistas previamente:
Nuestra motivación detrás de este trabajo proviene en parte de la línea de trabajo de FLAN y en parte de InstructPix2Pix. Queríamos explorar si es posible indicar a Stable Diffusion con instrucciones específicas e imágenes de entrada para procesarlas según nuestras necesidades.
Los modelos pre-entrenados de InstructPix2Pix son buenos para seguir instrucciones generales, pero pueden quedarse cortos al seguir instrucciones que involucran transformaciones específicas:
Pero aún podemos aprovechar los hallazgos de InstructPix2Pix para adaptarlos a nuestras personalizaciones.
Por otro lado, existen conjuntos de datos emparejados para tareas como la creación de dibujos animados, eliminación de ruido de imágenes, eliminación de lluvia de imágenes, etc., que están disponibles públicamente y que podemos utilizar para crear conjuntos de datos con instrucciones tomando inspiración de FLAN V2. Hacerlo nos permite transferir ideas de plantillas de instrucciones exploradas en FLAN V2 a este trabajo.
Preparación de conjuntos de datos
Creación de dibujos animados
En nuestros experimentos iniciales, indicamos a InstructPix2Pix que realice la creación de dibujos animados y los resultados no estuvieron a la altura de nuestras expectativas. Probamos varias combinaciones de hiperparámetros en tiempo de inferencia (como la escala de guía de imagen y el número de pasos de inferencia), pero los resultados aún no eran convincentes. Esto nos motivó a abordar el problema de manera diferente.
Como se insinúa en la sección anterior, queríamos aprovechar lo mejor de ambos mundos:
(1) la metodología de entrenamiento de InstructPix2Pix y (2) la flexibilidad de crear plantillas de conjuntos de datos con instrucciones inspiradas en FLAN.
Comenzamos creando un conjunto de datos con instrucciones para la tarea de creación de dibujos animados. La Figura 5 presenta nuestro proceso de creación de conjuntos de datos:
En particular, hicimos lo siguiente:
- Solicitamos a ChatGPT que genere 50 oraciones sinónimas para la siguiente instrucción: “Crear un dibujo animado a partir de la imagen”.
- Luego utilizamos un subconjunto aleatorio (5000 muestras) del conjunto de datos Imagenette y aprovechamos un modelo pre-entrenado de Whitebox CartoonGAN para producir versiones de dibujos animados de esas imágenes. Las versiones de dibujos animados son las etiquetas que queremos que nuestro modelo aprenda. De esta manera, esto corresponde a transferir los sesgos aprendidos por el modelo Whitebox CartoonGAN a nuestro modelo.
- Luego creamos nuestros ejemplos en el siguiente formato:
Nuestro conjunto de datos final para la creación de dibujos animados se puede encontrar aquí. Para obtener más detalles sobre cómo se preparó el conjunto de datos, consulta este directorio. Experimentamos con este conjunto de datos ajustando finamente InstructPix2Pix y obtuvimos resultados prometedores (más detalles en la sección “Experimentos de entrenamiento y resultados”).
Luego procedimos a ver si podíamos generalizar este enfoque a tareas de procesamiento de imágenes de bajo nivel, como el despeje de imágenes, la eliminación de ruido de imágenes y el desenfoque de imágenes.
Procesamiento de imágenes de bajo nivel
Nos centramos en las tareas comunes de procesamiento de imágenes de bajo nivel exploradas en MAXIM . En particular, realizamos nuestros experimentos para las siguientes tareas: despeje de imágenes, eliminación de ruido, mejora de imágenes con poca luz y desenfoque.
Tomamos diferentes muestras de los siguientes conjuntos de datos para cada tarea y construimos un solo conjunto de datos con instrucciones agregadas de la siguiente manera:
Los conjuntos de datos mencionados anteriormente suelen presentarse como pares de entrada-salida, por lo que no tenemos que preocuparnos por la verdad absoluta. Nuestro conjunto de datos final está disponible aquí . El conjunto de datos final se ve así:
En general, esta configuración ayuda a establecer paralelismos con la configuración de FLAN, donde creamos una mezcla de diferentes tareas. Esto también nos ayuda a entrenar un solo modelo una vez, que funciona bien en las diferentes tareas que tenemos en la mezcla. Esto varía significativamente de lo que se hace típicamente en el procesamiento de imágenes de bajo nivel. Trabajos como MAXIM presentan una única arquitectura de modelo capaz de modelar las diferentes tareas de procesamiento de imágenes de bajo nivel, pero el entrenamiento se realiza de manera independiente en los conjuntos de datos individuales.
Experimentos y resultados de entrenamiento
Basamos nuestros experimentos de entrenamiento en este script . Nuestros registros de entrenamiento (incluidas las muestras de validación y los hiperparámetros de entrenamiento) están disponibles en Weight and Biases:
- Cartoonización ( hiperparámetros )
- Procesamiento de imágenes de bajo nivel ( hiperparámetros )
Al entrenar, exploramos dos opciones:
- Ajuste fino desde un punto de control existente de InstructPix2Pix
- Ajuste fino desde un punto de control existente de Difusión Estable utilizando la metodología de entrenamiento de InstructPix2Pix
En nuestros experimentos, descubrimos que la primera opción nos ayuda a adaptarnos a nuestros conjuntos de datos más rápidamente (en términos de calidad de generación).
Para obtener más detalles sobre el entrenamiento y los hiperparámetros, le recomendamos que consulte nuestro código y las respectivas páginas de ejecución en Weights and Biases.
Resultados de la cartoonización
Para probar el modelo de cartoonización ajustado a las instrucciones , comparamos las salidas de la siguiente manera:
Para recopilar estos resultados, tomamos imágenes de la división de validación
de ImageNette. Utilizamos la siguiente instrucción al usar nuestro modelo y el modelo preentrenado de InstructPix2Pix: “Generar una versión cartoonizada de la imagen”. Para estos dos modelos, mantuvimos la escala de image_guidance_scale
y guidance_scale
en 1.5 y 7.0 respectivamente, y el número de pasos de inferencia en 20. De hecho, se necesita más experimentación en torno a estos hiperparámetros para estudiar cómo afectan los resultados del modelo preentrenado de InstructPix2Pix, en particular.
Más resultados comparativos están disponibles aquí . Nuestro código para comparar estos modelos está disponible aquí .
Sin embargo, nuestro modelo no logra producir las salidas esperadas para las clases de ImageNette, que no ha visto lo suficiente durante el entrenamiento. Esto es algo esperado, y creemos que esto se podría mitigar escalando el conjunto de datos de entrenamiento.
Resultados del procesamiento de imágenes de bajo nivel
Para el procesamiento de imágenes de bajo nivel ( nuestro modelo ), seguimos los mismos hiperparámetros de tiempo de inferencia mencionados anteriormente:
- Número de pasos de inferencia: 20
- Escala de guía de imagen: 1.5
- Escala de guía: 7.0
Para el despeje de imágenes, nuestro modelo proporciona resultados convincentes en comparación con la verdad absoluta y la salida del modelo preentrenado de InstructPix2Pix:
Sin embargo, en cuanto a la mejora de imágenes con poca luz, deja mucho que desear:
Este fallo, tal vez, se pueda atribuir a que nuestro modelo no ha visto suficientes ejemplos para la tarea y posiblemente a un mejor entrenamiento. También observamos hallazgos similares para el desenfoque:
Creemos que existe una oportunidad para que la comunidad explore cuánto afecta la mezcla de tareas para el procesamiento de imágenes de bajo nivel en los resultados finales. ¿Aumentar la mezcla de tareas con muestras más representativas ayuda a mejorar los resultados finales? Dejamos esta pregunta para que la comunidad la explore más a fondo.
Puedes probar la demostración interactiva a continuación para hacer que la Difusión Estable siga instrucciones específicas:
Aplicaciones potenciales y limitaciones
En el mundo de la edición de imágenes, existe una desconexión entre lo que un experto en el campo tiene en mente (las tareas a realizar) y las acciones que se deben aplicar en las herramientas de edición (como Lightroom ). Tener una forma fácil de traducir metas de lenguaje natural a primitivas de edición de imágenes de bajo nivel sería una experiencia de usuario fluida. Con la introducción de mecanismos como InstructPix2Pix, podemos decir que nos estamos acercando a ese ámbito.
Sin embargo, aún quedan desafíos:
- Estos sistemas deben funcionar para imágenes originales grandes de alta resolución.
- Los modelos de difusión a menudo inventan o reinterpretan una instrucción para realizar las modificaciones en el espacio de la imagen. Para una aplicación realista de edición de imágenes, esto es inaceptable.
Preguntas abiertas
Reconocemos que nuestros experimentos son preliminares. No profundizamos en la eliminación de los factores aparentes en nuestros experimentos. Por lo tanto, aquí enumeramos algunas preguntas abiertas que surgieron durante nuestros experimentos:
-
¿Qué sucede cuando escalamos los conjuntos de datos? ¿Cómo afecta esto a la calidad de las muestras generadas? Experimentamos con un puñado de ejemplos. Para comparación, InstructPix2Pix fue entrenado con más de 30000 muestras.
-
¿Cuál es el impacto de entrenar durante más tiempo, especialmente cuando la mezcla de tareas es más amplia? En nuestros experimentos, no realizamos ajuste de hiperparámetros, y mucho menos una eliminación en el número de pasos de entrenamiento.
-
¿Cómo se generaliza este enfoque a una mezcla más amplia de tareas comúnmente realizadas en el mundo de “ajuste de instrucciones”? Solo cubrimos cuatro tareas de procesamiento de imágenes de bajo nivel: eliminación de lluvia, desenfoque, eliminación de ruido y mejora de imágenes con poca luz. ¿Agregar más tareas a la mezcla con muestras más representativas ayuda al modelo a generalizar a tareas no vistas o, tal vez, a una combinación de tareas (por ejemplo: “Desenfocar la imagen y eliminar el ruido”)?
-
¿Ayuda mejorar el rendimiento el uso de diferentes variaciones de la misma instrucción sobre la marcha? Para la caricaturización, muestreamos aleatoriamente una instrucción del conjunto de instrucciones sinónimas generadas por ChatGPT durante la creación del conjunto de datos. Pero, ¿qué sucede cuando realizamos un muestreo aleatorio durante el entrenamiento en su lugar?
Para el procesamiento de imágenes de bajo nivel, utilizamos instrucciones fijas. ¿Qué sucede cuando seguimos una metodología similar de utilizar instrucciones sinónimas para cada tarea y cada imagen de entrada?
-
¿Qué sucede cuando utilizamos la configuración de entrenamiento de ControlNet? ControlNet también permite adaptar un modelo de difusión de texto a imagen preentrenado para que esté condicionado a imágenes adicionales (como mapas de segmentación semántica, mapas de bordes de Canny, etc.). Si estás interesado, puedes utilizar los conjuntos de datos presentados en esta publicación y realizar el entrenamiento de ControlNet haciendo referencia a esta publicación.
Conclusión
En esta publicación, presentamos nuestra exploración de “ajuste de instrucciones” de Stable Diffusion. Si bien los modelos preentrenados de InstructPix2Pix son buenos siguiendo instrucciones generales de edición de imágenes, pueden fallar cuando se les presentan instrucciones más específicas. Para mitigar eso, discutimos cómo preparamos nuestros conjuntos de datos para el ajuste fino posterior de InstructPix2Pix y presentamos nuestros resultados. Como se mencionó anteriormente, nuestros resultados aún son preliminares. Pero esperamos que este trabajo proporcione una base para los investigadores que trabajan en problemas similares y que se sientan motivados para explorar las preguntas abiertas más a fondo.
Enlaces
- Código de entrenamiento e inferencia: https://github.com/huggingface/instruction-tuned-sd
- Demo: https://huggingface.co/spaces/instruction-tuning-sd/instruction-tuned-sd
- InstructPix2Pix: https://huggingface.co/timbrooks/instruct-pix2pix
- Conjuntos de datos y modelos de esta publicación: https://huggingface.co/instruction-tuning-sd
Gracias a Alara Dirik y Zhengzhong Tu por las útiles discusiones. Gracias a Pedro Cuenca y Kashif Rasul por sus útiles revisiones en la publicación.
Cita
Para citar este trabajo, utiliza la siguiente cita:
@article{
Paul2023instruction-tuning-sd,
author = {Paul, Sayak},
title = {Instruction-tuning Stable Diffusion with InstructPix2Pix},
journal = {Hugging Face Blog},
year = {2023},
note = {https://huggingface.co/blog/instruction-tuning-sd},
}