Activa las notificaciones para estar al tanto de lo más nuevo en tecnología.

Súper resolución usando redes neuronales

Considérese la siguiente idea: tómese una foto en baja resolución y escálese (hacia arriba) para hacerla más grande. Es sorprendente que sea posible hacer esto...

Considérese la siguiente idea: tómese una foto en baja resolución y escálese (hacia arriba) para hacerla más grande. Es sorprendente que sea posible hacer esto y llenar los agujeros de pixeles que deja de manera tal que llene la fotografía de forma tal que quede como si fuese de alta resolución. Esto se ha logrado usando redes neuronales.

En un artículo técnico, se describe la implementación de una técnica de súper resolución usando una red neuronal. El software está en el depósito GiHub para quien quiera probar el método, el cual está escrito en Python.

Es interesante el enfoque, porque cuando uno escala hacia arriba una foto, para hacerla más grande, hay huecos que hay que llenar, es decir pixeles inexistentes. Una técnica común es la interpolación de forma que los nuevos pixeles queden en valores intermedios entre los pixeles que rodean esos puntos en donde no hay nada. La interpolación más popular es la bicúbica, y es éste el método que usa una red neuronal para comparar sus resultados y así generar esta súper resolución

Es importante destacar que, a pesar de la precisión y velocidad con la que se crean imágenes de súper resolución usando redes neuronales convolucionales profundas, queda un problema clave por resolver: ¿Cómo podemos recuperar los detalles de la textura fina cuando utilizamos este método?

Por ejemplo, cuando escalamos hacia abajo, perdemos información, lo que hace que la súper resolución sea el problema inverso con muchas posibles soluciones. El comportamiento de los métodos de optimización de la súper resolución se basan en la elección de una función objetivo.

El trabajo reciente se ha enfocado a minimizar el error cuadrático en la reconstrucción. Esto ha resultado en una razón muy alta entre la señal y el ruido, pero esto frecuentemente se suaviza, por lo que se omiten los detalles haciendo que la percepción del resultado sea poca satisfactoria. En el artículo que mencionamos se utiliza lo que se ha llamado SRGAN (super-resolution generative adversarial network).

super-resolucion01

Ésta es sin duda la primera vez que se puede recuperar una foto a partir de una imagen de la misma de baja resolución. Para hacer esto, se propuso una función de pérdida, la que consiste en un pérdida adversarial (valga la expresión) y la pérdida del contenido.

La primera pérdida lleva a una solución de la imagen natural usando una red discriminatoria que ha sido entrenada para diferenciar entre las imágenes tradicionales y las que son foto realistas. Además, se usa una función de pérdida de contenido, motivada por la similitud perceptual, en lugar de la similitud en el espacio de pixeles.

La red neuronal se entrenó con 350 mil imágenes usando una función de pérdida perceptual, y fue capaz de recuperar fotografías foto-realistas a partir de las imágenes de baja resolución. El código funciona en Python 3 y usa TensorFlow (de Google), numpy, scipy y moviepy.

Referencias:

Super-resolution generative adversarial network

Comentarios