¿Cómo funciona ‘Un algoritmo neuronal de estilo artístico’?

Requisitos :

  • Una imagen donde se transferirá el estilo (la imagen de contenido)
  • Una imagen de estilo
  • Una red neuronal de convolución ya entrenada.

Visualización desde la respuesta de la red neuronal

Como ya sabrá, es posible visualizar la información en diferentes etapas de procesamiento en la CNN al reconstruir la imagen de entrada a partir de solo conocer las respuestas de la red en una capa particular.

Esta respuesta se definirá como [math] F ^ l \ en R ^ {N_l \ cdot M_l} [/ math], donde [math] N_l [/ math] es el número de mapas de entidades en la capa l, cada mapa de entidades que tiene un tamaño de [matemáticas] M_l [/ matemáticas] (número de neuronas).

Aquí hay un ejemplo del artículo original.

Como puede ver, la reconstrucción de contenido de las capas inferiores es casi perfecta. En las capas superiores de la red, se pierde información detallada de píxeles mientras se conserva el contenido de alto nivel de la imagen. Es casi lo contrario para la reconstrucción de estilo. Recuerde que las activaciones de la CNN están organizadas como una serie de mapas de características que reflejan la presencia de diferentes características dentro de la imagen, donde las características tienen una composición progresivamente de mayor nivel en cada capa de la CNN.

Transferencia de estilo

Para transferir el estilo a una imagen, deberá definir dos pérdidas:

  • Pérdida de reconstrucción de contenido :

[matemáticas] L_ {contenido} (p, x, l) = \ frac {1} {2} \ sum_ {i, j} (F_ {i, j} ^ l – P_ {i, j} ^ l) ^ 2 [/ matemáticas],

donde [math] p [/ math] es la imagen original, [math] P_ {i, j} ^ l [/ math] la activación del filtro [math] i ^ {th} [/ math] en la posición [math ] j [/ math] en la capa [math] l [/ math], y [math] x [/ math] es la imagen generada.

  • Pérdida de reconstrucción de estilo :

Es casi lo mismo que la pérdida de contenido, excepto que [math] F_ {i, j} ^ l [/ math] se reemplaza en la fórmula por la matriz de Gramian – Wikipedia.

Por lo tanto, la función de pérdida en cada capa es: [matemáticas] L_ {estilo \ _loss} (s, x, l) = \ frac {1} {4N_l ^ 2M_l ^ 2} \ sum_ {i, j} (\ sum_kF_ {i , k} ^ lF_ {k, j} ^ l – \ sum_kS_ {i, k} ^ lS_ {k, j} ^ l) ^ 2, [/ math]

donde [matemática] F [/ matemática], [matemática] p [/ matemática] y [matemática] x [/ matemática] ya están definidas anteriormente, y [matemática] S [/ matemática] es lo mismo que [matemática] P [/ math] pero para la imagen [math] s [/ math].

La pérdida de reconstrucción final es un promedio ponderado de todas las [matemáticas] L_ {s, x, l} [/ matemáticas] en todas las capas. [matemática] L_ {estilo} (s, x) = \ sum_ {l = 0} ^ L w_lL_ {estilo \ _loss} (s, x, l) [/ matemática].

Formación

Ahora puede definir la pérdida para entrenar su red neuronal.

Comienza con una imagen ruidosa [matemática] x [/ matemática], una imagen de estilo [matemática] s [/ matemática], una imagen de contenido [matemática] p [/ matemática] y una capa [matemática] l [/ matemática] que captura el contenido de su imagen [math] p [/ math]:

[matemáticas] L_ {total} (x, s, p) = \ alpha L_ {contenido} (p, x, l) + \ beta L_ {estilo} (s, x) [/ matemáticas],

donde [math] \ alpha [/ math] y [math] \ beta [/ math] son ​​los factores de ponderación para la reconstrucción de contenido y estilo, respectivamente.

More Interesting

¿Qué necesitamos antes de comenzar las estructuras de datos?

¿Qué algoritmos son buenos candidatos para el reconocimiento de sonido? Estoy principalmente interesado en reconocer sonidos en un entorno doméstico, por ejemplo, un temporizador de microondas que suena, un teléfono que suena, un timbre, etc.

¿Cuál es el código C ++ más simple para el algoritmo A *?

¿Cuál es el mejor algoritmo de cifrado real utilizado en el almacenamiento de datos basado en hardware?

¿Qué tan útil es el conocimiento de los algoritmos informáticos tradicionales para escribir códigos CFD?

Matrices de sufijos: Dadas dos cadenas s1 y s2. ¿Cuál es el mejor algoritmo para encontrar el número de subcadenas comunes entre s1 y s2 de longitud 1, 2,… hasta min (| s1 |, | s2 |)?

¿Es el algoritmo de búsqueda de Google realmente el mejor?

Cómo resolver un cubo de rubik más rápido

Cómo implementar el algoritmo de colocación dinámica para Hadoop

¿Cuál es el mejor método para aprender efectivamente ciencia de datos / aprendizaje automático desde cero para un estudiante promedio de Ingeniería (idiomas, algoritmos, tutoriales, etc.)?

Estoy comenzando un proyecto de clasificación de picos, ¿dónde encuentro datos sin procesar y / o simulados?

Si pudiéramos reescribir las leyes del universo con el único fin de optimizar la computación, ¿cuáles serían estas leyes?

¿Qué idioma es mejor para comprender la importancia de las estructuras de datos?

¿Por qué la recursión me causa tantos problemas?

¿Cuál es el algoritmo detrás de la agregación de noticias de Facebook News alrededor de una palabra clave en particular?