Sign In

Vae Maker / Edditor - Google Colab (Espaniol)

Vae Maker / Edditor - Google Colab (Espaniol)

Bueno, ya es tarde y no tengo tantas ganas de hacerme un tutorial en estos momentos, no obstante esta en el codigo la librería de gith que plantea la idea y la demuestra con fotos y ejemplos. Yo lo que hice fue automatizar todo para que hasta un mono con navaja pudiera hacerse un "Vae" o almeno modificar sus parámetros. Y aprender como hacerlo.

~~~~~~

Guia Teorica:

  1. Efecto en el contraste:

    • Multiplicación: Al multiplicar un valor mayor que 1 a los pesos de las capas de salida, se amplificará la amplitud de las salidas y, por lo tanto, aumentará el contraste de la imagen generada. Esto se debe a que los valores de los píxeles se multiplicarán por un factor que aumenta la diferencia entre los valores claros y oscuros, lo que intensificará el contraste.

    • Suma: Si se suma un valor positivo a los sesgos de las capas de salida, se aumentarán los valores de píxeles de la imagen generada y, por lo tanto, aumentará el contraste. Esto se debe a que se agregará un valor constante a los píxeles, lo que amplificará la diferencia entre los valores claros y oscuros.

    Efecto en el brillo:

    • Multiplicación: Al multiplicar un valor mayor que 1 a los sesgos de las capas de salida, se aumentarán los valores de píxeles y, por lo tanto, aumentará el brillo general de la imagen generada. Esto se debe a que los valores de los píxeles se multiplicarán por un factor mayor que 1, lo que incrementará su luminosidad.

    • Suma: Si se suma un valor positivo a los pesos de las capas de salida, se aumentarán los valores de píxeles de la imagen generada y, por lo tanto, aumentará el brillo. Esto se debe a que se agregará un valor constante a los píxeles, lo que aumentará su luminosidad.

    Modelo	            Capa de salida	    Capa de entrada
    
    AutoencoderKL	vae.decoder.conv_out	vae.encoder.conv_in

~~~~~ Podes saltiarte esto amigo, por algo estan los link a colab no es necesario comerse la bala.

Aunque el verdadero truco de la magia esta aca:

Los Variational AutoEncoders (VAE) son modelos de aprendizaje que combinan redes neuronales con distribuciones de probabilidad. Su principal objetivo es generar datos sintéticos que sigan los patrones de grandes conjuntos de datos de entrenamiento. A diferencia de los modelos de generación aleatoria, los VAE permiten influir en la dirección específica de las variaciones tomando como referencia datos concretos del conjunto de entrenamiento.

Un VAE se construye a partir de un autoencoder, que consta de un encoder y un decoder, ambos formados por redes neuronales. El encoder transforma las entradas en una representación interna de menor dimensión, mientras que el decoder intenta recuperar la entrada original a partir de esta representación intermedia. Los autoencoders se centran en la capacidad de reproducción de la entrada o sus variantes.

El problema principal de los autoencoders tradicionales es que las representaciones internas no forman un espacio continuo, sino que están agrupadas en bolsas aisladas. Esto dificulta la generación de nuevas variantes realistas. Los VAE solucionan este problema al construir un espacio latente continuo. Utilizan un vector de medias y un vector de desviaciones estándar para describir una distribución de probabilidad en el espacio latente. A partir de esta distribución, se pueden obtener muestras aleatorias que se pasan al decoder para generar salidas con pequeñas variaciones.

Los VAE suavizan el espacio latente utilizando distribuciones de probabilidad. Durante el entrenamiento, el decoder aprende a asociar áreas completas del espacio latente a ligeras variantes de la misma salida, generando un espacio latente suave e interpolado.

KL=∑i=1nσ2i+μ2i−log(σi)−1, Loss′(x)=Loss(x,x′)+KL

En un Variational AutoEncoder, la KL-divergencia se utiliza para medir la diferencia entre dos distribuciones de probabilidad: la distribución del espacio latente (representada por las medias y desviaciones estándar generadas por el encoder) y una distribución ideal que se desea aproximar. La KL-divergencia se basa en la teoría de la información y proporciona una medida de la discrepancia entre estas dos distribuciones.

La inclusión de la KL-divergencia en la función de pérdida tiene varios propósitos. En primer lugar, ayuda a regularizar el espacio latente al introducir restricciones en las representaciones latentes. Al minimizar la KL-divergencia, se fomenta que las representaciones latentes sean cercanas a una distribución de referencia, generalmente una distribución normal estándar. Esto promueve una estructura y continuidad deseables en el espacio latente.

Además, la KL-divergencia también juega un papel en el proceso de generación de muestras. Al muestrear puntos del espacio latente de acuerdo con la distribución generada por el encoder, se pueden obtener representaciones latentes que se utilizan como entrada para el decoder. La KL-divergencia asegura que las muestras generadas en el espacio latente sean coherentes con la distribución de referencia, permitiendo la generación de nuevas muestras que comparten características con los datos de entrenamiento.

Es importante tener en cuenta que la KL-divergencia no es la única componente de la función de pérdida en un VAE. Además de la KL-divergencia, se utiliza una medida de pérdida de reproducción para evaluar qué tan bien el decoder es capaz de reconstruir las entradas originales a partir de las representaciones latentes. Esta medida de pérdida de reproducción puede ser una función de distancia, como la distancia euclidiana o la función de pérdida de reconstrucción logarítmica, que penaliza las diferencias entre las entradas originales y las salidas generadas.

~~~~~~~~~~

Si observas una disparidad entre los inputs y los outputs del VAE, lo cual se puede traducir en una alta varianza, podrías considerar ajustar el equilibrio entre la reconstrucción y la regularización en la función de pérdida. En lugar de sumar un valor fijo como la KL-divergencia, podrías probar otro enfoque para abordar este problema.

Una opción sería introducir una ponderación variable para el término de regularización en función de la varianza. Por ejemplo, podrías calcular una medida de varianza en la salida del decoder y utilizar esa medida como un factor de ponderación para el término de regularización en la función de pérdida. Esto permitiría ajustar la influencia de la regularización en función de la varianza observada en los outputs.

Ponde++= ∑i=1nσ2i 
Ponde--= (-) ∑i=1nσ2i

~~~~

El tutorial es bastante facil, dale clik a todo y mete el link del Vae que te guste, por default viene el mas usado.

Siempre que veas el triangulo vos dale clik, no usa google drive asi que no te va a pedir nada google, por lo demas maso menos te explico la idea.

~~~Biblia:

Este código proporciona una forma de ajustar el brillo y el contraste de un modelo de Autoencoder Variacional (VAE) y guardarlo en un formato deseado. Se ha observado que los modelos basados en novelAI tienden a tener un contraste bajo, mientras que los modelos basados en Waifu Diffusion tienden a tener un contraste alto. Esta herramienta permite ajustar el brillo y el contraste para obtener un VAE óptimo para un modelo específico sin cambiar otros aspectos.

El funcionamiento del código se basa en modificar la capa de salida del VAE, que normalmente contiene latentes, para que contenga píxeles. Esto permite realizar operaciones matemáticas en la capa de salida, lo que se considera como un procesamiento posterior al VAE sin una función de activación. Las operaciones de ajuste de brillo y contraste se aplican directamente a los pesos y sesgos de la capa de salida.

El código carga el modelo VAE original según el tipo de modelo especificado. Luego, se aplican las modificaciones de contraste y brillo según los valores y operaciones proporcionados. Finalmente, el VAE modificado se guarda en el formato deseado.

Guía Explicativa de los Parámetros Importantes:

  • contrast (contraste): Valor numérico que representa el ajuste deseado para el contraste. Es opcional.

  • contrast_operation (operación de contraste): Operación a utilizar para ajustar el contraste. Puede ser "mul" (multiplicación) o "add" (suma). El valor predeterminado es "mul".

  • brightness (brillo): Valor numérico que representa el ajuste deseado para el brillo. Es opcional.

  • brightness_operation (operación de brillo): Operación a utilizar para ajustar el brillo. Puede ser "mul" (multiplicación) o "add" (suma). El valor predeterminado es "add".

  • patch_encoder: Parámetro booleano que indica si se debe aplicar la operación inversa al bloque del codificador del VAE. Esto ayuda a evitar problemas cuando se utilizan bloques de codificación en otras aplicaciones. Es opcional.

Al ejecutar el código, se recomienda especificar al menos uno de los valores de contraste o brillo para realizar modificaciones en el VAE original. El código cargará el modelo VAE original, aplicará las modificaciones de brillo y contraste según las operaciones y valores proporcionados, y guardará el VAE modificado en el formato deseado.

~~~~

Dado que casi nadie ha compartido sus logros con la comunidad a pesar de que la documentación ha recibido mucha atención (60 estrellas), nos encontramos con el problema de la falta de datos. Sin datos, es difícil probar con éxito diferentes configuraciones hasta encontrar la combinación correcta. Sin embargo, te animo a revisar la ecuación que se utiliza en la documentación, diviértete un poco y prueba a realizar cambios. Solo estás modificando una fórmula matemática, así que no dudes en experimentar, incluso si puedes cometer errores en el proceso. Modificar un VAE lleva aproximadamente 5 minutos (exagerando) y no hay límite de GPU para hacerlo.

~~~~~

Abrir en el Gato

Abrir en Colab

~~~~~~~~Spam:

Financial assistance: Hello everyone!

This is Tomas Agilar speaking, and I'm thrilled to have the opportunity to share my work and passion with all of you. If you enjoy what I do and would like to support me, there are a few ways you can do so:

~~~~~~~~~~~~~~

3

Comments