logo

Dot CSV

Inteligencia Artificial, Tecnología, Ciencia y Futuro! Bienvenidos a la 4ª Revolución Industrial 🚀 Inteligencia Artificial, Tecnología, Ciencia y Futuro! Bienvenidos a la 4ª Revolución Industrial 🚀

Transcribed podcasts: 213
Time transcribed: 5d 22h 50m 3s

This graph shows how many times the word ______ has been mentioned throughout the history of the program.

Esto que está viendo aquí es un fragmento del film La Llegada de un Tren a la Estación de la
Ciudad, grabada por los hermanos Lumier en 1895. Esto es la misma versión del film,
pero digitalizada a una versión en 720 HD y 18 fotogramas por segundo, y esto es el resultado
de rescalar con inteligencia artificial el vídeo anterior a una resolución de 4K y 60 fotogramas
por segundo. Una versión con una calidad muy superior a la versión dada como input,
y con una fluidez en los movimientos que hace parecer que esta película ha sido grabada en
otro tiempo. Este es el resultado que ha obtenido el usuario Denis Iryaev tras combinar diferentes
herramientas ya existentes de deep learning, pero que hasta ahora no habíamos visto aplicadas
conjuntamente a este tipo de vídeos. Unas herramientas cuyo potencial no solo se aplica
al rescalado de películas antiguas, sino que también puede tener utilidad en otros ámbitos
como en el científico o en la remasterización de videojuegos. Así que como hacemos habitualmente
en este canal, toca preguntarse ¿Cómo funciona? Pues concretamente, este vídeo ha aplicado dos
modelos de inteligencia artificial diferentes, donde cada uno resuelve una tarea distinta. Si
este es el vídeo original, por un lado tenemos la super resolución, el conseguir aumentar el
contenido espacial de cada fotograma para conseguir así resoluciones mayores. Por otro lado la otra
tarea resuelta es la interpolación de fotogramas, es decir, el generar nuevas imágenes intermedias
entre los frames que ya conocemos, para así incrementar el número de fotogramas por segundo
de nuestro vídeo, consiguiendo así una mayor fluidez en la reproducción. Algo que por hacerlo
sonar mejor pues voy a pasar a llamar superfluidez. En el vídeo de hoy nos centraremos en entender el
primer problema, la super resolución, y para ello tendremos que tratarlo un poco más de cerca,
literalmente me refiero. Ahí, a nivel de píxel. Porque a ver, ya sabemos que normalmente cuando
trabajamos con archivos de imágenes rasterizadas, estas están compuestas en su mínimo nivel por
píxeles, unidades de color definidas numéricamente, donde cada valor indica cuál es la intensidad dada
a cada canal de color. Bien, hasta aquí todo controlado, pero ¿te has preguntado alguna vez
qué ocurre realmente cuando tomas una imagen y la rescalas a una resolución mayor? Es decir,
esta imagen de aquí la podemos rescalar a un 300% de su tamaño original, tres veces más grande,
y a nivel de píxel lo que estaríamos haciendo sería lo siguiente, añadir nuevo espacio entre
píxeles, donde antes había un píxel, ahora hay nueve. Vale, pero ¿y qué hacemos ahora con todo
este espacio vacío? ¿Qué valores le asignamos? ¿Se te ocurre algún plan? Pues una estrategia muy
básica y sencilla podría ser la siguiente. Si sabemos que este píxel de aquí toma este valor,
y este otro de aquí toma este valor, podemos trazar un gradiente, una interpolación matemática,
en la que iríamos combinando proporcionalmente las intensidades de aquellos píxeles que conocemos.
Si esto lo ejecutamos con todos los píxeles, finalmente acabaríamos rellenando toda nuestra
imagen y habríamos completado un proceso que se conoce como rescalado bilineal, por eso hacer
interpolaciones lineales en dos dimensiones. Si ahora observamos la imagen rescalada final,
podemos ver que el resultado efectivamente es aceptable,
si bien la imagen presenta cierto desenfoque y pérdida de detalle. Otra estrategia, si cabe
más sencilla de seguir, sería la de tomar como valor de cada píxel que desconozcamos, el valor
del píxel más cercano que sí conozcamos. Es decir, si este de aquí tiene este color, pues todos
estos que están próximos a él, se le asignarán el mismo valor, y si este de aquí tiene este color,
pues todos estos tendrán este color, y así sucesivamente. Al hacer esto,
hemos rellenado nuevamente el espacio vacío, y nuestra imagen se ha rescalado, en este caso
por el método de proximidad o vecinos cercanos. Y el efecto que esto tendrá en la imagen final será
el de haber rescalado de manera estricta el patrón que teníamos a nivel de píxel, lo cual,
para casos muy concretos, como por ejemplo cuando trabajamos con pixel art, pues tiene más sentido
que utilizar el método bilineal, pero que para el resto de casos no tiene sentido, puesto que este
método, el rescalado, te puede generar patrones cuadriculados y bordes con dientes de sierra.
En cualquier caso, estos métodos no son los únicos que existen, y realmente en tu software
de edición favorito podrás encontrar muchos más. Pero claro, todos ellos al final trabajan utilizando
la información local a nivel de píxel, y realmente no llegan a entender el contenido de la imagen para
poder así hacer el rescalado. Me pregunto, ¿podríamos hacerlo mejor? Pues sí, y es que como
ya hemos visto numerosas veces en este canal, en el campo del deep learning contamos con las
herramientas perfectas para este tipo de problemas, por ejemplo redes neuronales convolucionales para
la detección de lo que hay en una imagen, y aprendizaje adversario con redes generativas
para la generación de contenido. Con herramientas como esta podríamos plantear de forma sencilla
una solución a la super resolución. ¿Qué? ¿Cuál es la intuición de esto? Pues fíjate,
si yo te enseñara esta imagen de aquí en baja resolución y te pidiera que te imaginarás cómo
sería la versión en alta calidad de esta zona de aquí, por ejemplo si fuera una pelota de tenis,
lo más probable es que tú fueras capaz de imaginarte todos los pequeños detalles de su
textura, que harán de tu imagen mental en alta resolución una imagen realista. Y claro,
si te dijera que esto no es una pelota de tenis sino un limón, también podrías realizar el mismo
ejercicio imaginándote con todo lujo de detalles la textura de dicho limón. Esto es posible porque
tu cabeza contiene realmente muchísima información aprendida durante toda tu vida sobre lo que es un
limón y qué detalles hacen que un limón parezca a un limón. Porque por cosas de la vida he visto
muchos limones, ¿vale? Y ojo porque en este caso yo te estaría indicando de qué se trata esta bola
amarilla de aquí, si es una pelota de tenis o es un limón. Es decir, estoy condicionando el
resultado que tú tienes que generar. Pero si ahora te enseñara por ejemplo estas dos imágenes de
aquí, de nuevo, tú haciendo uso de tu conocimiento del mundo, podría deducir que esta imagen de aquí
probablemente sea una pelota de tenis porque está situada sobre un fondo azul que podría ser
probablemente una pista de tenis y que esta de aquí sería un limón porque está rodeada de otras
esferas de colores que probablemente podrían ser frutas. ¿Podríamos estar equivocados? Pues sí.
Pero esto al final se trata de predecir lo que es más probable. Es en este binomio entre percepción
el entender qué puede ser lo que hay en una imagen y la generación de aquellos pequeños detalles que
definen a los objetos percibidos sobre lo que se cimientan los métodos de rescalados basados en
aprendizaje. Métodos cuyo paradigma de trabajo es completamente diferente a los métodos que hemos
visto anteriormente basados en interpolaciones y que los últimos años gracias al progreso del campo
del deep learning se han posicionado como los métodos favoritos para este tipo de problemas.
Y ojo porque esto no se trata realmente de generar todo un limón a partir de un manchurrón amarillo,
ya que sería muy fácil que el algoritmo se equivocara y acabara inventándose gran parte
de la imagen. No. Realmente los casos de éxito de estos algoritmos de super resolución los encontramos
cuando nuestra imagen de entrada nos facilita mucha de la estructura de la imagen real de,
por ejemplo, la forma de la cara, brillos, diferentes características y donde estos
algoritmos se van a encargar de generar con gran definición aquellos pequeños detalles como serían
los poros de la piel o definir los pelos de la barba, aplicando aquellas texturas y patrones que
ha aprendido tras observar durante su entrenamiento otras muchísimas imágenes de caras. Técnicamente
a esto se le conoce como alucinar. De verdad, no estoy de coña, en este caso este es un nombre
técnico. Alucinar. Y es a lo que nos referimos cuando hablamos de generar aquellos patrones que
la red ha aprendido internamente durante su entrenamiento. Si recuerdan, de alucinación
hemos visto casos muy impresionantes como el de Deep Dream, que distorsiona la imagen original
generando patrones muy de alto nivel de aquellas imágenes que ha visualizado durante el entrenamiento,
en este caso imágenes de animales. Pero claro, en nuestro caso lo único que nos interesa son
aquellos patrones de bajo nivel, los bordes, esquinas, texturas, los pequeños detalles.
Y con esto hay que tener cuidado, porque al final estamos alucinando detalles que no son más que
aquellos patrones que el propio modelo aprendió durante su entrenamiento. Y claro, esto implica
que los datos que nosotros hayamos utilizado para este entrenamiento pueden acabar condicionando
el resultado que obtengamos. Algo que es importante, porque al final esta tecnología no solo se utiliza
para rescalar archivos históricos o nuestras imágenes favoritas, sino que por ejemplo también
encuentra importantes aplicaciones en medicina, para dar por ejemplo mayor sentido a los datos
que luego facilitan diagnóstico de enfermedades. Si al final los resultados que estamos obteniendo
dependen tanto de las condiciones y los datos de entrenamiento, serán más difícil aplicarlos
con confianza en escenarios de mayor relevancia. Pero bueno, no pasa nada, mientras tanto podemos
seguir utilizando esto para el entrenamiento. Y es que en internet la comunidad modder ha encontrado
un aliado perfecto en este tipo de herramientas para la remasterización de videojuegos. Y es que
normalmente si tú quieres remasterizar un videojuego te encontrarás que la mayoría de texturas se
encuentran en baja calidad y si las quieres recuperar tienes que volver a rehacerlas de cero.
Con este tipo de herramientas, con un mínimo esfuerzo, podemos conseguir texturas nuevamente
en HD y esto está haciendo que juegos antiguos vuelvan a cobrar vidas sin tener que dedicar
tantas horas de trabajo. ¿A qué mola? Pues mira, te voy a dejar abajo en la descripción un par de
enlaces a artículos que te van a interesar. Papers como ESRGAN o el impresionante modelo
TECOCAN. Este último modelo mola porque también se aprovecha de la información temporal para
resolver este problema de manera más consistente en vídeos. O también tenemos el Decrapify de
FastAI, que a diferencia de los modelos anteriores, consigue implementar la super resolución sin
utilizar en ningún caso técnicas adversarias, sino que simplemente utiliza una arquitectura
como la UNET y otras funciones de coste que hacen del proceso mucho más rápido. Y es que voy a
atacar esto desde ya, porque sé que muchos me vais a pedir que haga un tutorial sobre esto,
sobre super resolución y lo voy a hacer. O mejor dicho, ya lo he hecho, ¿vale? Porque si recuerdan
en el tutorial de PIX2PIX ya estuvimos trabajando con un modelo de trabajo y con herramientas
bastante similares a las que hemos visto hoy. Es decir, de poder generar a partir de esto una
flor, dime tú si no estamos recuperando información. Si recuerdas, en aquel tutorial lo que teníamos
era una red de tipo UNET, que lo que notaba era la parte de percepción y generación al mismo tiempo.
Y lo que hacíamos era entrenarla de manera adversaria, dándole como entrada estas imágenes
de aquí y estas otras imágenes de aquí como salida. Si ahora quieres conseguir resolver con
este esquema el problema de super resolución, pues lo único que tendrías que hacer sería tomar
las imágenes de, por ejemplo, las flores y quitarles calidad a partir de hacerlas más pequeñas y
rescalándolas al tamaño original con algún método de interpolación clásico. Con esto ya
habrías generado tu dataset de entrada y tus imágenes en alta resolución, las imágenes originales,
serían tu dataset de salida. A partir de ahí, con la red que implementamos en ese tutorial,
pues simplemente tendrías que reentrenar a tu modelo y simplemente con esto ya tendrías
resuelto el problema de super resolución. Algo que nos hace ver cómo este problema no depende
tanto de la arquitectura desarrollada, sino más bien de tener el marco de trabajo correcto de
entrada y salida de datos. Con esto espero que tengas claro cuál es la tecnología que ha hecho
que una obra tan grande de la historia se haya hecho más grande aún si cabe, literalmente hablando.
Pero espérate porque esto solamente es la primera parte de la película y es que recordarás que al
principio te he dicho que se han utilizado dos modelos diferentes, uno para la super resolución
y otro para la super fluidez. Nos faltaría ver cómo funciona este método en el que se pueden
generar nuevos fotogramas a partir de los fotogramas de un vídeo dado como input,
algo que es super interesante, pero que veremos en otro vídeo.