Las técnicas de escalado de imagen a tiempo real a través del uso de algoritmos de IA, acelerados a través de hardware dedicado, han ganado importancia en los últimos tiempos. Os explicamos cómo funcionan estos algoritmos de subida de resolución que ventajas de rendimiento aportan en nuestros PCs. ¿Cómo serán los nuevos juegos del futuro gracias a esta tecnología de aumento de resolución?
El aumento de resolución tanto en videojuegos como en películas tiene consecuencias en lo que a la potencia necesaria para generar una imagen se refiere, ya que a más pixeles de resolución que se quiera conseguir como resolución de salida, más potencia vamos a necesitar. La idea detrás de utilizar algoritmos para generar imágenes a mayor resolución a partir de otras de menor resolución tienen como objetivo ahorrar potencia computacional y tiempo.
Las causas para el uso de la IA para generar imágenes con un aumento de resolución
Los algoritmos de escalado de imagen o algoritmos de super resolución son aquellos que convierten un búfer de imagen en una resolución «X» a una resolución más alta.
Algoritmos de escalado de imagen no basados en la IA
Para entender la necesidad de la inteligencia artificial como herramienta para aumentar la resolución de las imágenes es necesario conocer de antemano la limitación de los algoritmos clásicos no basados en la IA.
¿Pero cómo lo hacemos para escalar una imagen en cuanto a resolución? Cuando aumentamos la resolución nos encontramos con que la mayoría de los píxeles nuevos respecto a la resolución anterior no tienen un valor de color definido por lo que tenemos que llenarlos de alguna manera.
La forma más fácil de hacer el aumento de resolución es copiar el valor de color de los píxeles adyacentes pero el resultado real no es una imagen a más resolución sino una imagen a la misma resolución utilizando una mayor cantidad de puntos por píxel. A este algoritmo se le llama Nearest Neighbour (a) (Vecino Cercano)
Otras técnicas se basan en algoritmos de interpolación, estos utilizan el valor de color de los píxeles adyacentes para conocer el valor de los píxeles intermedios utilizando una mayor o menor cantidad de muestras para conocer el valor de dichos píxeles. Las más famosas son la interpolación bilineal (b), utilizado también para el filtraje de texturas en los juegos y la interpolación bicúbica (c).
Ninguno de estos algoritmos de escalado llegan a un nivel de calidad óptimo y no dan nunca a generar una imagen igual de nítida que generar la imagen directamente a mayor resolución (d).
La Inteligencia Artificial al rescate
Los algoritmos de Inteligencia Artificial cuando escalan una imagen lo que hacen es imaginarse o inventar los píxeles intermedios que desconocemos, para ello es necesario entrenar la inteligencia artificial con una serie de imágenes de ejemplo con tal de que la inteligencia artificial aprenda un patrón a partir del cual reconstruir las imágenes a mayor resolución a partir de otras de menor resolución.
Para ello es necesario alimentar a la red neuronal durante la etapa de entrenamiento con centenares e incluso miles de imágenes para que esta encuentre un patrón fijo que luego pueda aplicar a la hora de generar los píxeles faltantes, a esto se le llama entrenamiento de la IA.
Una vez la inteligencia artificial ha encontrado el patrón, lo que hace es crear un algoritmo generativo que aplicará siempre para crear las imágenes a mayor resolución y que ejecutará el hardware especializado en IA correspondiente que estemos utilizando en el sistema, a esto lo llamamos inferencia de la IA.
Redes Neurales para una mayor resolución de imagen
Hay muchos tipos de redes neurales, pero las que se suelen utilizar para generar imágenes a mayor resolución son las llamadas redes adversarias generativas, en inglés Generative Adversial Network o GAN.
La forma más simple de este tipo de redes la tenéis como ejemplo al principio de esta subsección. Las GAN funcionan con dos redes neurales que son llamadas Generador y Discriminador.
El Generador se encarga de generar muestras que inicialmente no son más que ruido, mientras que la segunda, a la que llamamos Discriminador, las evalúa comparándolas con muestras de las imágenes reales. Dicha evaluación solo tiene dos respuestas que son verdadero o falso. Si la evaluación es positiva entonces la imagen es utilizada como feedback para que la red generativa vaya aprendiendo cual es el patrón para crear nuevas imágenes que se parezcan cada vez más a lo que queremos que aprenda a generar.
Por ejemplo, si alimentamos el Discriminador con fotos de gatos al final el Generador acabará aprendiendo que las imágenes que ha de generar son fotos de gatos.
Utilizando la IA se logra un aumento de resolución en videojuegos
Cuando jugamos a un videojuego no es igual que con una película donde todos los fotogramas se encuentran almacenados de antemano y por tanto el Discriminador carece por completo de imágenes de muestra como ejemplo.
Podemos entrenar una GAN para hacer que aprenda a escalar las imágenes de las películas antiguas a mayor resolución tomando como ejemplo para su entrenamiento imágenes de otras películas más nuevas y de mayor resolución ya que hablamos de fotogramas sacados de la vida real.
Pero en el caso de un videojuego no solo cada fotograma es único y no se vuelve a repetir por lo que no se tiene un fotograma a mayor resolución previo para comparar, sino que además el hecho de que cada juego tenga su propio estilo visual provoca que los algoritmos aprendidos para generar un búfer de imagen a mayor resolución de un juego no sirvan para otros juegos si con estos no comparten un estilo artístico parecido.
Esto obliga a que la red adversaria generativa que tenemos que utilizar para entrenar a la IA y generar con ello el algoritmo de inferencia para poder generar imágenes a mayor resolución, sea algo distinto.
Para entrenar a la IA para que aprenda a subir la resolución de un videojuego lo que se hace es utilizar un PC muy potente con la capacidad de renderizar imágenes a muy alta resolución.
Este PC tan potente puede ser algo como un servidor con varias GPUs trabajando al unísono con tal de renderizar la imagen a muy alta resolución. Por ejemplo, NVIDIA utiliza su superordenador Saturno V para generar el búfer de imagen a mayor resolución.
Por el otro lado tenemos una GPU renderizando la misma escena a menor resolución, esta escena de menor resolución es utilizada como muestra de entrada para el Generador que a partir de esta imagen intentará generar una imagen a mayor resolución que el propio discriminador tendrá que evaluar a partir de la que la imagen a mayor resolución comparando ambas.
Como era de esperar, el resultado es un mayor rendimiento, una aumento de resolución debido al escalado de imagen y por ende mayor nitidez a la vista del jugador.
Fuente: hardzone.es/tutoriales/rendimiento/aumento-resolucion-ia/