Arte neuronal | Arte generado por IA

Contenidos

Introducción

El arte siempre ha trascendido eones de la existencia humana. Podemos ver sus huellas desde la época prehistórica como el arte Harappa en la Civilización del Valle del Indo hasta el arte contemporáneo en los tiempos modernos. Sobre todo, el arte ha sido un medio para expresar la propia creatividad, puntos de vista de cómo percibimos el mundo. Como ha dicho el legendario Leonardo Da Vinci,

“La pintura es poesía que se ve más que se siente”.

Lo que a veces olvidamos es que la mayor parte del arte sigue un patrón. Un patrón que nos agrada y tiene sentido en nuestro cerebro. La próxima vez que vea una pintura, trate de notar las pinceladas en ella. Verá un patrón que surge de la pintura. Nosotros, como seres humanos, somos expertos en reconocer estos patrones. Nuestros mecanismos neuronales se han desarrollado para ser excepcionalmente geniales a lo largo de los años reconociendo patrones en la naturaleza.

Ahora puedes preguntar por qué estoy despotricando sobre el arte y los patrones. ¡Esto se debe a que te mostraré cómo crear arte con la ayuda de cerebros artificiales! En este artículo, construiremos una red neuronal artificial que extraerá estilo de una imagen y lo replicará en la otra. ¿Entonces estas lista?

Tabla de contenido

  • ¿Qué es el arte neuronal?
  • Familiarizarse con el quid
  • Codificándolo
  • A dónde ir desde aquí?
  • Recursos adicionales

¿Qué es el arte neuronal?

Intentemos comprender este tema con un ejemplo.

the-starry-night-18891-jpglarge-6178391

Fuente [1]

La imagen de arriba es la famosa «La noche estrellada» de Vincent Van Gogh. Solo mira la pintura durante unos minutos. ¿Que ves? ¿Notas los trazos de arbustos? ¿Ves las curvas y los bordes que definen todos y cada uno de los objetos, lo que hace que te sea tan fácil reconocerlos?

Ahora hagamos una tarea rápida. Trate de recordar los patrones que ve. Simplemente abarrota tu cerebro con cada pequeño detalle. ¿Hecho? Ok, ahora echa un vistazo a la siguiente imagen.

tubingen-2640255

Fuente [2]

Esta es una fotografía tomada de una ciudad llamada “Tubingen” ubicada en Alemania. Para el siguiente paso de la tarea, simplemente cierre los ojos e intente replicar el estilo de una noche estrellada con esta imagen. Pregúntate, si eres Van Gogh (¡hipotéticamente, por supuesto!) Y te piden que dibujes esta fotografía teniendo en cuenta los estilos que memorizaste antes, ¿cómo lo harías?

Pensar

.

.

.

.

¿Lo has hecho? ¡Excelente! ¡Acabas de hacer un arte neuronal!

.

.

.

¿Quiere ver lo que puede hacer una red neuronal artificial?
tubingen_starry_night-3736448

Fuente [2]

Puede preguntar cómo logró una máquina tal tarea. ¡Es simple una vez que entiendes la esencia!

Lo que hace la red neuronal es tratar de extraer los «puntos importantes» de ambas imágenes, es decir, trata de reconocer qué atributos definen la imagen y aprende de ella. Estos atributos aprendidos son una representación interna de la red neuronal, que se puede ver a continuación.

neural-art-1-1302146Fuente [2]

Así que conociste los conceptos teóricos involucrados en el arte neuronal, ahora conozcamos los aspectos prácticos de implementarlo.

Entrar en el cerebro de un artista artificial:

El arte neuronal funciona de la siguiente manera:

  • Primero definimos las funciones de pérdida necesarias para generar nuestro resultado, es decir, la pérdida de estilo, la pérdida de contenido y la pérdida total de variación.
  • Definimos nuestra función de optimización, es decir, algoritmo de retropropagación. Aquí usamos L-BFGS porque es más rápido y más eficiente para datos más pequeños.
  • Luego establecemos nuestro estilo y atributos de contenido de nuestro modelo.
  • Luego pasamos una imagen a nuestro modelo (preferiblemente nuestra imagen base) y la optimizamos para minimizar todas las pérdidas que definimos anteriormente.

Conoceremos algunos de los puntos importantes que debe conocer antes de comenzar. Si bien la mayoría de los fundamentos de las redes neuronales se tratan en este artículo, reiteraré algunos de ellos y explicaré algunas cosas adicionales.

  • ¿Qué es una función de pérdida? La función de pérdida es una función que calcula la diferencia entre los valores predichos y los valores originales.. Básicamente, dice cuánto error se ha producido en un cálculo. En cualquier algoritmo de aprendizaje automático, la función de pérdida se utiliza para estimar el rendimiento del modelo en los datos. Esto es especialmente útil en el caso de las redes neuronales, donde intenta iterativamente hacer que su modelo funcione mejor. Al implementar arte neuronal, debe controlar tres funciones de pérdida, a saber:
    • Pérdida de contenido, es decir, la diferencia entre el «contenido» de la imagen resultante y la imagen base. Esto se hace para asegurar que su modelo no se desvíe mucho de la imagen base.
    • Pérdida de estilo, es decir, la diferencia entre el «estilo» de la imagen resultante y la imagen base. Para hacer esto, primero debe calcular la matriz de gramos de ambas imágenes y luego encontrar su diferencia. La matriz de Gram no es más que encontrar la covarianza de una imagen consigo misma. Esto se hace para mantener el estilo en la imagen resultante.
    • Pérdida total de validación, es decir, la diferencia entre un píxel de la imagen resultante y su píxel vecino. Esto se hace para que la imagen permanezca visualmente coherente.
  • ¿Qué es una función de optimización? Cuando hemos calculado la función de pérdida, intentamos minimizar nuestras pérdidas cambiando los parámetros. La función de optimización nos ayuda a averiguar cuánto cambio se requiere para que nuestro modelo esté mejor «optimizado». Aquí implementamos un método de optimización llamado algoritmo de Broyden-Fletcher-Goldfarb-Shanno (BFGS). BFGS es una variante del algoritmo de descenso de gradiente en el que se hace una diferenciación de segundo orden para encontrar el mínimo local. Leer Este artículo para obtener una perspectiva matemática del algoritmo.

Ahora que hemos entendido cuál será nuestro flujo para construir un arte neuronal, ¡bajemos y comencemos a piratear cosas!

Codificándolo!

Este Diwali fue interesante para mí. Decidí investigar un poco sobre el arte neuronal y cómo se ilumina la India durante el día de Diwali. Me encontré con esta imagen «India en la noche de Diwali». Y pensé en crear algo similar en la misma línea. Para hacer eso, combinaremos las dos imágenes a continuación con la ayuda del arte neuronal.

reference_image-300x250-1827801 base_image-300x289-6507695

Fuente [3]

Así que primero estableceremos las bases.

Paso 0: Instalar en pc Keras y sus dependencias. Para esto, usaremos un backend de Theano. Cambie su backend siguiendo los pasos mencionados aquí. Además, también debe establecer el orden adecuado para la imagen. En el archivo keras.json, donde ha cambiado el backend, reemplace image_dim_ordering por ‘tr’. Entonces debería verse así,

"image_dim_ordering": "th"

Paso 1: Luego vaya a su directorio de trabajo y configure su estructura de directorio como se muestra a continuación

|-- keras_NeuralStyle                 # this is your working directory
|   |-- base_image.jpg                # this is your base image
|   |-- reference_image.jpg           # this is your reference image

Paso 2: Inicie un cuaderno jupyter en su directorio de trabajo escribiendo jupyter notebook e implementar el siguiente código. Solo le proporcionaré una descripción general paso a paso de lo que hace cada bloque.

  • Primero, debes importar todos los módulos necesarios para implementar el código

1-2511823

  • A continuación, establezca las rutas de las imágenes en las que desea realizar el proyecto.

2-6414563

  • Defina las variables necesarias y déles valores como se muestra a continuación. Tenga en cuenta que estos valores se pueden cambiar, pero eso puede cambiar drásticamente la salida. Además, asegúrese de que el valor de la variable img_nrows sea el mismo que img_ncols. Esto es necesario para que funcione la matriz de gramos.

3-2951367

  • Luego definimos funciones auxiliares. Estos son responsables de manejar el preprocesamiento de imágenes.

4-1823015

  • Cree marcadores de posición de entrada para pasar imágenes al modelo

5-7504910

  • Cargue un modelo de red neuronal previamente entrenado (si no sabe qué es el entrenamiento previo, consulte esta discusión)

6-8079076

  • Imprima el resumen del modelo para ver cuál es el modelo

7-8892636

  • Almacene los nombres de todas las capas de la red neuronal como un diccionario junto con sus salidas

8-9153125

  • Como se definió anteriormente, configuramos las funciones de pérdida

9-8252856

  • Luego establecemos los atributos de contenido y estilo …

10-8537718 11-6494202

  • Y configure los gradientes y la función de salida final para el arte neuronal

12-9883910 13-7323961

  • Definimos las funciones para calcular pérdidas y gradientes

14-3047388 15-2092703

  • Ahora tomamos la imagen base como entrada y la iteramos para obtener nuestra imagen final. En mi máquina local, se tarda un minuto en obtener el resultado en una iteración. Según sus recursos (y paciencia), tomaría como máximo 5 minutos obtener el resultado. También puede aumentar el número de iteraciones para optimizar más el resultado.

16-606928317-4977750

  • ¡Y después de una larga espera, obtendremos esta hermosa imagen!

at_iteration_0-4036308

NOTA: El archivo de código se puede ver en github aquí.

A dónde ir desde aquí?

Hemos visto una pequeña demostración de un descubrimiento significativo en el mundo del arte. Se han realizado muchas modificaciones a este método para que sea estéticamente agradable. Por ejemplo, me gusta mucho esta implementación en el que han tomado diferentes estilos y los han aplicado a diferentes regiones.

02270_mask_face-150x150-7370341 02270_mask_face_inv-150x150-8755619 okeffe_red_canna-150x150-1180782okeffe_iris-150x150-767286002270-150x150-9543488

Las dos primeras imágenes son las máscaras, que ayudan a establecer qué parte se debe estilizar. Las siguientes dos imágenes representan los estilos que se utilizarán. La última imagen es la imagen base que hay que estilizar.

A continuación se muestra la salida generada por el arte neuronal.

02270_output-225x300-9317939

Se ve increíble, ¿no? Estoy seguro de que, como yo, también te fascina probar el arte neuronal. Para ayudarlo a comenzar con él, he cubierto los conceptos básicos del arte neuronal y cómo puede crear su primera imagen. Estoy seguro de que está ansioso por explorar más y, por lo tanto, estoy agregando algunos recursos adicionales solo para usted.

Recursos adicionales

Estos son algunos de los mejores recursos que he encontrado sobre arte neuronal. Anímate y entra en el fascinante mundo del arte neuronal.

Referencias

Fuentes de imagen

[1] https://www.wikiart.org/en/vincent-van-gogh/the-starry-night-1889
[2] https://arxiv.org/abs/1508.06576
[3] Google

Notas finales

Espero que este artículo le haya resultado inspirador. ¡Ahora es el momento de que lo revises y hagas arte tú mismo! Si crea un arte, compártalo con la comunidad. Si tienes alguna duda, me encantaría interactuar contigo en los comentarios. Y para obtener experiencia en el trabajo en redes neuronales, no olvide probar nuestro problema de práctica de aprendizaje profundo: Identificar los dígitos.

Puede poner a prueba sus habilidades y conocimientos. Verificar Competiciones en vivo y compita con los mejores científicos de datos de todo el mundo.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.