¿Qué sucede si combinas un editor de fotos y una red neuronal?


Un ejemplo del trabajo de un editor de fotos neuronales Neural Photo Editor. En el centro está la imagen original. Los cuadrados rojos y azules muestran áreas de espacio oculto generadas después de entrenar la red neuronal. Se pueden manipular tanto directamente (como se hace habitualmente) como indirectamente, a través del "pincel de contexto".

¿Crees que "Photoshop" hace maravillas distorsionando la realidad? Sí, puede eliminar por completo a una persona de una fotografía o dejarse crecer el pelo en la cabeza, como Elon Mask, con la ayuda de un "pincel de contexto". Pero esto no está al lado de lo que es capaz de hacer la red neuronal, si se le permite editarla con análisis contextual. Esta es una realidad completamente diferente. Una red neuronal puede hacer sonreír a una persona en una foto, darle a su novia las características de Angelina Jolie, etc. Las posibilidades son infinitas.

El primer signo en esta área es el editor de fotos neuronales Neural Photo Editor , desarrollado por empleados de la Facultad de Ingeniería y Ciencias Físicas de la Universidad Heriot-Watt (Edimburgo, Reino Unido) junto con un colega de Renishaw .

Los avances recientes en la creación de modelos generativos para imágenes han llevado a la aparición de redes neuronales que, después del entrenamiento, generan muestras e interpolan la más alta calidad. Se utilizan dos métodos principales inventados en 2013-2014 en esta área: Autoencoder Variacional (VAE) y Red Adversarial Generativa(GAN) Demostraron que una red neuronal es capaz de generar estructuras complejas y multidimensionales en imágenes naturales.

Los codificadores automáticos variacionales VAE son modelos gráficos probabilísticos que aprenden a maximizar los límites inferiores variacionales (basados ​​en la probabilidad de los datos) al proyectar el resultado del aprendizaje en un espacio latente y luego reconstruir la imagen desde ese espacio.

Las redes adversas generativas (GAN) dominan el modelo generativo al entrenar una red (el "discriminador") para distinguir entre datos reales y generados. Al mismo tiempo, otra red ("generador") está aprendiendo a generar muestras que el discriminador no distingue de las reales.

Ambos métodos son adecuados para generar imágenes en un espacio oculto, por ejemplo, para agregar una sonrisa a un ceño fruncido. Cada uno de ellos tiene sus propias ventajas y desventajas.

Neural Photo Editor Neural Photo Editor es una interfaz innovadora para trabajar con el espacio oculto de los modelos generativos. Este método le permite realizar ediciones semánticas específicas en la imagen utilizando el "pincel de contexto", que indirectamente cambia su propio vector.

La idea clave en un editor de fotos neuronales es cambiar el espacio oculto de una manera intuitiva, es decir, editando una imagen normal. El usuario selecciona el color y el tamaño del pincel, lo aplica a la imagen resultante. La red neuronal realiza una convolución inversa, calculando la diferencia entre el color de los píxeles de origen y el color del pincel, y cambia el espacio oculto para minimizar esta diferencia. Como resultado, obtenemos ediciones semánticamente significativas en la imagen resultante: cambios de cabello, una sonrisa, hoyuelos en las mejillas, etc.


Resultado de cambiar una foto usando un editor de fotos neuronal

Un simple ejemplo. Si tomamos una foto de una cara blanca con cabello negro, y aplicamos un pincel negro en la frente, pero un editor de fotos neuronales automáticamente agregará cabello allí. El editor trabaja en tiempo real en una GPU decente.

Para mejorar el resultado de la edición, el editor tiene la capacidad de editar la reconstrucción de la imagen después de la transformación por una red neuronal (máscara de interpolación). En este caso, el resultado sale mejor (en la siguiente ilustración).


Visualización de la máscara de interpolación. Arriba izquierda a derecha: reconstrucción, delta (error) de reconstrucción, imagen original. Abajo: reconstrucción modificada, delta, imagen resultante

Las siguientes imágenes muestran ejemplos del funcionamiento de una red neuronal en la reconstrucción e interpolación de fotografías de las bases de datos CelebA, ImageNet y SVHN. A la izquierda están las imágenes fuente, con cada paso a la derecha, se muestran los resultados de una reconstrucción gradual en la red neuronal.



Los autores publicaron su trabajo el 22 de septiembre de 2016 en arXiv.org.

El código de Neural Photo Editor se publica en Github . En el mismo repositorio, se publica el código para una red neuronal adversaria introspectiva, que es un híbrido de autoencoders variacionales (VAE) y redes adversas generativas (GAN).

Para iniciar Neural Photo Editor, necesitará:

  • Theano , una biblioteca de Python para definir, optimizar y evaluar eficientemente expresiones matemáticas utilizando matrices multidimensionales.
  • Lasagne , una biblioteca para construir y entrenar redes neuronales en Theano.
  • Para mejorar el rendimiento, se recomienda (pero no es necesario) instalar cuDNN , una biblioteca de Nvidia para la aceleración de hardware de procedimientos estándar, como convolución hacia adelante y hacia atrás, agrupación, normalización y activación de capa. Esto forma parte del SDK de aprendizaje profundo de Nvidia .
  • numpy, scipy, PIL, Tkinter y tkColorChooser del kit de instalación de Python.

Source: https://habr.com/ru/post/es397847/


All Articles