152

Enseña a una IA a crear tu rostro con DreamBooth y Stable Diffusion 🤯

15514Puntos

hace 2 años

Previamente hablamos de Stable Diffusion, una inteligencia artificial libre para generar imágenes basadas en texto o prompts al nivel de modelos como Dalle 2 e Imagen.

Al ser un modelo gratuito se ha utilizado en un gran número de aplicaciones y permite a la comunidad experimentar con él. En uno de estos experimentos se integró con DreamBooth, un modelo desarrollado por Google para hacer un entrenamiento personalizado a modelos de difusión obteniendo estos resultados:

Untitled(1).png

Así es, mi rostro (y muy posiblemente el tuyo) en distintos estilos, técnicas de dibujo, formas y básicamente la creatividad de tu prompt es el límite.

En este blog aprenderás cómo replicarlo totalmente gratis, pero antes, algo de contexto sobre cómo se llegó a estos resultados. 🚀

¿Qué es DreamBooth?

DreamBooth es una técnica desarrollada por el equipo de Google para personalizar entrenamientos de modelos generadores de imágenes.

Básicamente, consiste en entregar cierta cantidad de imágenes al modelo y también el concepto que representa. Por ejemplo, si quiero personalizarlo con mi rostro que es el de una persona, entonces el concepto es “person”. Si lo hago con mi mascota que es una perrita, el concepto será “dog”, con un reloj, el concepto será “clock”.

Untitled(2).png

DreamBooth genera una representación personalizada del nuevo concepto con el que se le entrenó, por ejemplo, alarconc person y lo asocia a las imágenes que se proporcionaron.

Untitled(3).png

También a su vez entrena la red con el concepto que se le indico, ya sea “person”, “dog” o el caso que sea el cual servirá como regularizador, con el fin de que sea capaz de diferenciar el concepto nuevo que se le enseña como el de la clase global (“person”, “dog”, “clock”…etc), en el proceso final la red neuronal aprende a crear esos conceptos nuevos con una resolución superior.

Entrenar el modelo

La inteligencia artificial avanza a pasos agigantados. El día que entrené este modelo era necesario contar con al menos con 24 GB de GPU (unidad de video), lo que sería más o menos como una tarjeta gráfica nvidia 3090 que no tenía.

Así que simplemente utilice una instancia virtual en AWS (EC2) con las características que requería, monte un entorno de anaconda con Docker y seguí los pasos de este repositorio https://github.com/JoePenna/Dreambooth-Stable-Diffusion, los resultados de este entrenamiento son mejores que los de que se pueden obtener con google colab, pero el proceso es mas complicado y cuesta dinero ya que se debe alquilar procesamiento en la nube, pero si en local cuentas con al menos 24 GB de GPU te invito a seguir los pasos del repositorio mencionado anteriormente, de no ser asi en este blog te enseño paso a paso como hacerlo en google colab totalmente gratis y con muy buenos resultados!!! 🚀

Como ves, conocer de cloud computing y docker también trae muchas ventajas en ciencia de datos así que te invito a tomar los cursos de fundamentos de aws y docker

¿Cómo puedes usar DreamBooth?

Hoy 3 de octubre de 2022, no es necesario 24 GB de GPU, se requiere menos de 12 y es lo suficiente para ejecutarlo con google colab. Estos son los pasos a seguir:

1. Crea una cuenta en HuggingFace 🤗

HuggingFace es la mayor comunidad de inteligencia artificial libre, en ella puedes encontrar, modelos pre entrenados, spaces, datasets y muchos recursos mas.

2. Acepta en este enlace -->términos y condiciones del modelo 1.5 de Stable Diffusion

Stable Diffusion es un modelo muy potente y con grandes cambios en la economía actual por eso hay que aceptar los términos y condiciones de su uso y conocer sus limitantes y sesgos, actualmente no se necesita confirmacion de terminos, de modo que si no te sale para aceptarlos, no pasa nada y puedes continuar con el tutorial

3. Genera un Token en HuggingFace:

Si ya lo tienes solo hace falta copiar el token, que se usará más adelante.

Untitled(4).png
Untitled(5).png

4. Abre el siguiente enlace de Google Colab

Es un notebook creado previamente que contiene todo lo necesario para ejecutar el entrenamiento

5. Ejecuta las primeras celdas y valida que tengan esta salida

es importante que se este ejecutando un entorno de trabajo con GPU para el entrenamiento.

Untitled(6).png

6. Continúa ejecutando hasta llegar a Login to HF and run:

En esta sección debes ejecutar la celda y copiar el token generado en el paso 3

Untitled(27).png

7. Configurar parámetros:

Ejecutar las celdas hasta este punto en donde hice estos cambios pues quiero que se me me identifique como “alarconc”. También quiero que la información del entrenamiento se almacene en mi drive, a lo que le debo dar permisos posteriormente al ejecutar esta celda.

Untitled(28).png

Y posteriormente esta configuracion en donde especifico donde quedaran las imagenes con las que entrenaremos el modelo y que para mi caso quiero que se me asocie al conepto de persona “person”

Untitled(29).png

8. Ejecutar las celdas hasta este punto:

No debes ejecutar esta celda

Untitled(9).png

9. Subir imágenes de tu rostro:

Subir 5 o 7 imágenes tuyas en la carpeta con el nombre que dejaste. Para mi caso alarconc, esto se logra simplemente arrastrando las imágenes:

Untitled(10).png

10. Entrenamiento:

Es momento de entrenar, ejecuta las celdas que falten hasta este punto y remplaza en los parámetros por el nombre que definiste previamente, en mi caso “alarconc”. Este proceso puede tardar un poco.
tambien puedes probar cambiar ciertos valores como:

  • –max_train_steps que representa la cantidad de iteraciones del modelo, a mayor iteraciones mejores resultados, pero con 800 es suficiente (ademas puede que muchos parametros sobrepasen la GPU actual)
  • –num_class_images que representa la cantidad de imagenes de regularizacion de la misma clase que definiste para el proceso de entrenamiento

en lo personal lo deje con los parametros por default que son los que ves en la imagen.

Untitled(30).png

11. Crear archivo CPKT:

Ejecutar las siguientes celdas para guardar tu modelo cpkt. Este modelo lo puedes usar en cualquier herramienta de generación automática como lo es AUTOMATIC1111 sin tener que re entrenar el modelo.

Untitled(12).png

12. Valor de semilla (seed):

Ejecutar las celdas hasta este punto, puedes dejar -1 para que genere un resultado aleatorio siempre o cualquier número específico para replicar algún resultado.

Untitled(13).png

13. Ejecutar el modelo:

SIEMPRE debes ejecutarlo con la configuración que creaste en el punto 8, de esta forma, en mi caso alarconc person. Y listo, disfruta generando imágenes en esta celda, y cambiando los parámetros de cantidad de imágenes, número de iteraciones, etc etc.

Untitled(31).png

14. Ejecutar el modelo con UI:

La siguiente celda que proporciona una interfaz gráfica de Gradio UI que también puedes usar, no hay diferencia con el punto 13 en resultados, pero puede ser mas cómoda de usar

Untitled(15).png

🧠 ¡Diviértete!

¡Ahora puedes generar tu rostro en distintos estilos! Recuerda que todo gran poder conlleva una gran responsabilidad, por ello, no entregues el modelo cpkt a extraños. Esta tecnología cambiara la economía de cómo se hacen ediciones y creaciones digitales, así que úsala con cuidado.

Créditos a los owners de los siguientes repositorios. Puedes agradecer con un star ⭐ o aportando a sus repos:

https://github.com/ShivamShrirao/diffusers/tree/main/examples/dreambooth

https://github.com/JoePenna/Dreambooth-Stable-Diffusion (Si quieres resultados mas increibles puedes seguir los pasos del notebook en este repositorio pero requiere al menos 24 GB de GPU)

En caso de que quieras descubrir qué son las redes neuronales artificiales, te invito a tomar el Curso de redes Neuronales de Python y Keras donde explico sus fundamentos.

Y claro algunos enlaces que te pueden interesar:

Para aprender más de estos modelos de difusión, y generar más imágenes con diferentes estilos, te invito a tomar el Curso de Generación de Imágenes con IA: Dall-E, Midjourney y Stable Diffusion del que tengo el gusto de acompañarte como profesor. 🚀

¡Sígueme en Instagram/Twitter/TikTok como @alarcon7a, espero ver tus imágenes generadas y comparte tus creaciones con la comunidad 🙂

Alarcon7a
Alarcon7a
alarcon7a

15514Puntos

hace 2 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
27
29371Puntos
2 años

Wow, estoy sorprendido con lo que se puede lograr.

5
23861Puntos
2 años

Me gusta cada día más como avanza la esta rama de la tecnología.
Sería interesante crear una ruta de aprendizaje que solo tome los componentes de la escuela de Data Science e IA con los de Diseño asociados al arte para formar una ruta de arte digital con base en la IA.

2
9486Puntos
2 años

Maravillosa idea, me uniría sin duda

5
45327Puntos
2 años

¡Esto está increíble! 🤯🤯🤯🤯🤯

4
2 años

No logro hacerlo funcionar 😥
Ya probé con el consejo de @brunoorozcomeja pero yo acepté los términos y condiciones al momento de crear la cuenta en Hugging Face.
Ya lo he intentado varias veces sin éxito 😪

Error.png
Hugging.png

Les agradezco por favor su ayuda!

3
2 años

Me auto respondo… aunque realmente molesté a @alarcon7a 😚

Aquí está la manzana de mi discordia, un archivo .HEIC intruso en medio de mis imágenes 🙄
Debemos asegurarnos de subir solo archivos .jpg!!

image.png

Mi modelo ha comenzado a entrenar exitosamente 😍

2022-10-06_214856.png

Ya les compartiré los resultados 🤩

3
1921Puntos
2 años

Ya me veo haciendo unos Avatares bien finos de mi gato Muffin 😽

3
12242Puntos
2 años

Hola Alarcon7a y comunidad.
Realicé los pasos al pie de la letra (install pre dependencias, conectar drive, crear cuentas, aceptar términos, cambiar keyword y subir algunas imágenes), pero me da un error que no logro entender del todo (no sé python aún).

Entiendo colapsó la memoría o no encontró algo, por los mensaje:

  • OSError: image file is truncated (12 bytes not processed)
  • returned non-zero exit status 1

Espero puedan ayudarme 😄

2
12242Puntos
2 años

Ya lo solucioné… por si les pasa, en mi caso la solución fue así:

Abrí cada foto, una por una, de las que cargué en el Collab (con doble clic las abren), algunas, se cargaron de forma corrupta y estaban solo en blanco, las quité y se solucionó.

3
40270Puntos
2 años

Tutoriales que valen oro!!

3
25921Puntos
2 años

No puedo esperar para probarlo ☺️

2
4009Puntos
2 años
RuntimeError: CUDA outof memory. Tried to allocate 1024.00 MiB (GPU 0; 14.76 GiB total capacity; 12.30 GiB already allocated; 959.75 MiB free; 12.58 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
Steps:   0% 0/900 [00:02<?, ?it/s]

Alguién sabe por qué me sale ese error? o cómo solucionarlo?

1
25732Puntos
2 años

A mi también me aparece

1
25732Puntos
2 años

Tienes que ejecutar el Install xformers from precompiled wheel

1
25576Puntos
2 años

Segun se puede leer no tienes el espacio requerido para ejecutar

1
15514Puntos
2 años

intenta levantar nuevamente la instancia y valida el formato de las fotos, y que no supere los 900 pasos el entrenamiento, al parecer no tienes espacio de GPU

1
4009Puntos
2 años

Si lo resolví, tiene que ver con el GPU. Gracias por el apoyo.

1
913Puntos
2 años

Me gustaría saber qué hiciste para solucionar el problema de la memoria, ya intenté levantar instancias diferentes, mi configuraciòn esta en 800 pasos y todas mis imágenes son del mismo formato (jpg)

2
2 años

las fotos tiene que ser similares o muy diferentes?

4
15514Puntos
2 años

Selfies de tu rostro mas que todo, si se puede en distintas formas y luz

2
33978Puntos
2 años

👀 ¡Qué genial!, justo estaba buscando como hacer esto.

2
3208Puntos
2 años

Quien hubiera pensado hace 50 años atrás, que un código fuera capaz de generar imágenes tan realistas y con la calidad de un diseñador profesional. Que nos espera de aquí a 20 o tan solo 10 Años? Esto es una locura!!!

2
9060Puntos
2 años

Súper genial! Ya logré probarla y me gustó mucho, seguiré haciendo pruebas, pero mi duda es si ya genere mi archivo .cpkt tengo que volver a generarlo si quiero hacer todo el proceso de nuevo?

1
15514Puntos
2 años

no, no hace falta solo lo reempazas o lo usas con AUTOMATIC1111

2
31061Puntos
2 años

Ya lo probé, está genial, supongo que solo me falta agregar más fotos para ser más preciso.

2
37448Puntos
2 años

Muchas gracias por compartir el conocimiento, estuve jugando con el el notebook y haciendo las pruebas con mis imagenes stable-diffusion_1.pngstable-diffusion_2.png

2
1359Puntos
un año

Al tratar de iniciar el entrenamiento me sale:

W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT

y no hace nada mas… ¿alguien tiene idea de que puede ser?

1
16988Puntos
un año

Tengo exáctamente el mismo problema y no tengo idea de que solución es necesaria. Espero alguien nos responda pronto

2
3131Puntos
2 años

)stabale.png

Primer prueba y esta genial, hay que seguir aprendiendo…

2
1668Puntos
2 años

¡Excelente tutorial!
Lo Voy a probar.

2
4188Puntos
2 años

Tengo que aprender a entrenarla con mis lentes, no los tomó muy bien jajaj pero excelente guía!

Recomendaciones para los prompt para obtener la foto como rey del norte?

2
9060Puntos
2 años

La de GoT te quedo genial, que descripción usaste 😱

2
3138Puntos
2 años

Tengo unas ganas inmensa de implementar esto, solo por curiosidad de los resultados, muchas gracias por el tutorial.

2
1743Puntos
2 años

Wow sin duda esta será nueva forma de como se creara Arte Dijital.🤍

1
5356Puntos
2 años

Hola amigosss, unas dudas, por lo menos para usar otras fotos que no sean las que ya use, a que paso deberia volver o que hago con las anteriores (no se si se vayan a mezclar o algo por el estilo). Y la otra, cuando vaya a abrir de nuevo para hacer mas, tendre que hacer todo ese proceso de nuevo (el del tuto) ??? gracias

1
13158Puntos
2 años
1.PNG

2.PNG
3.PNG
4.PNG
5.PNG

El notebook a día de hoy no es idéntico al del día que subió el blog, tiene otras celdas extrañas y genera esos errores.

1
13158Puntos
2 años

A 20 de diciembre el notebook actualmente no está tal cual aparece en este blog y está orientado a perros, aun así, cambié de perro a persona, pero las celdas de las que no habla salen con error y, por ende, no me sale ninguna imagen. Todas mis imágenes están en .jpg

1
1646Puntos
2 años

Sale error

3
1646Puntos
2 años

NameError Traceback (most recent call last)
<ipython-input-51-49331e5cb93e> in <module>
9
10 with autocast(“cuda”), torch.inference_mode():
—> 11 images = pipe([prompt] * num_samples, height=height, width=width, num_inference_steps=num_inference_steps, guidance_scale=guidance_scale, generator=g_cuda).images
12
13 for img in images:

NameError: name ‘pipe’ is not defined

1
15514Puntos
2 años

ejcutaste las celdas de instalcion de librerias y la previa al entrenamiento?

1
1646Puntos
2 años

asi es, paso a paso. Se puede empezar desde cero en limpio?
Otra cosa…las imagenes deben ser de 512 px de medida, cierto?

1
1646Puntos
2 años

Es que en el punto 8 dices que no ejecute esa celda…pero si no lo hago no pasa nada…y luego dices que si…pero en colab dice que lo haga…

1
2 años

Estoy esperando tener unas horas libre para realizaro, excelente tutorial.

1
20488Puntos
2 años

Error en la celda inference

Error no file named model_index.json found in directory /content/drive/MyDrive/stable_diffusion_weights/sks.

2
5591Puntos
2 años

Hola tengo el siguiente error,

OSError: Error no file named model_index.json found in directory /content/drive/MyDrive/stable_diffusion_weights/Martin04.

Ya acepte los terminos y condiciones pero a un me sigue saliendo el error. A alguien le paso lo mismo? ![](Captura.PNG

1
8977Puntos
2 años

Pudiste resolverlo? Tengo el mismo error

2
1007Puntos
2 años

Hola, tenia el mismo error y lo unico que tienes que hacer es ir a

Specify the weights directory to use (leave blank for latest)
WEIGHTS_DIR:________________

en el collab y pones esto: CompVis/stable-diffusion-v1-4

1
15445Puntos
2 años

Hola, tengo el mismo error y no sé cual es el collab

1
18801Puntos
2 años

Hola, me sale el siguiente error y no tengo ni idea como solucionarlo:

#@markdown Specify the weights directory to use (leave blank for latest)
WEIGHTS_DIR = "" #@param {type:"string"}
if WEIGHTS_DIR == "":
    from natsort import natsorted
    from glob import glob
    import os
    WEIGHTS_DIR = natsorted(glob(OUTPUT_DIR + os.sep + "*"))[-1]
print(f"[*] WEIGHTS_DIR={WEIGHTS_DIR}")```
1
31653Puntos
un año

IMPORTANTE PARA LOS QUE TENGAN ESTE ERROR

.
WARNING : the following values were not passed to
Captura de pantalla 2023-05-14 235749-26e15a31-8ec8-4ed0-a1ca-44e682cbd8b0.JPG
.

  • Agregen esto al codigo

.

from accelerate.utils import write_basic_config

# Write the configuration file
write_basic_config()

.

  • En este lugar

.

Platzi.png
.

  • Y chequen que las imgs sean en jpg

.

Suerte chicos

1
913Puntos
2 años

He intentado seguir este blog pero no he logrado completarlo, y es que al tratar de generar imágenes, me ha salido un error de espacio, intenté modificar el max_steps a 700 y sin éxito.
error.png

Antes había notado estos warnings al correr el Interference

/usr/local/lib/python3.9/dist-packages/transformers/models/clip/feature_extraction_clip.py:28: FutureWarning: The class CLIPFeatureExtractor is deprecated and will be removed inversion5of Transformers. Please use CLIPImageProcessor instead.
  warnings.warn(
/usr/local/lib/python3.9/dist-packages/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py:106: FutureWarning: The configuration fileof this scheduler: DDIMScheduler {
  "_class_name": "DDIMScheduler",
  "_diffusers_version": "0.14.0.dev0",
  "beta_end": 0.012,
  "beta_schedule": "scaled_linear",
  "beta_start": 0.00085,
  "clip_sample": false,
  "num_train_timesteps": 1000,
  "prediction_type": "epsilon",
  "set_alpha_to_one": false,
  "steps_offset": 0,
  "trained_betas": null
}
 is outdated. `steps_offset` should be setto1 instead of0. Please make sure to update the config accordingly as leaving `steps_offset` might led to incorrect results in future versions. If you have downloaded this checkpoint fromthe Hugging Face Hub, it would be very nice if you could opena Pull request forthe `scheduler/scheduler_config.json` file
  deprecate("steps_offset!=1", "1.0.0", deprecation_message, standard_warn=False)
You have disabled the safety checker for <class 'diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.StableDiffusionPipeline'> by passing `safety_checker=None`. Ensure that you abide tothe conditions ofthe Stable Diffusion license anddonot expose unfiltered results in services or applications opentothe public. Both the diffusers team and Hugging Face strongly recommend to keep the safety filter enabled in all public facing circumstances, disabling it only for use-cases that involve analyzing network behavior or auditing its results. For more information, please have a look athttps://github.com/huggingface/diffusers/pull/254
1
44769Puntos
un año

¿Cuando nos enseñaran hacer videos con stable Diffusion?

1
2087Puntos
un año

no me funciona, genera imágenes pero no se parecen a mi :.)

1
2087Puntos
un año

para volver a generar una imagen se tiene que correr todo otra vez ?.
para usar diferentes imágenes, que recomiendan, cambiar las imágenes de la carpeta o crear una nueva carpeta con las otras imágenes ?

1
44769Puntos
un año

Hola, el cuaderno que se descarga de google colab fue modificado, no se puede lograr ejecutar la parte: install xformers from precompiled wheel porque no aparece.
Si pueden darnos soporte lo agradecería porque me urge!

1
624Puntos
un año

Cuanto tiempo hay que entrenar la IA?

1
13158Puntos
2 años

A 20 de diciembre el notebook actualmente no está tal cual aparece en este blog y está orientado a perros, aun así, cambié de perro a persona, pero las celdas de las que no habla salen con error y, por ende, no me sale ninguna imagen.

1
582Puntos
2 años

Alguien tendra una idea de por que no me marca error, si genera las imagenes pero ninguna con parecido a las fotos que subi, solo crea la imagen con los parametros pero es como si no tomara en cuenta las fotos. Alguien le a pasado?

1
3726Puntos
2 años

Simplemente increíble!!AlexIA.png