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 es Notre Dame, en 2020. Y esto es Notre Dame, en 2019, en 2010, en 1996, 1960,
1928 y, oh sí, 1890. Fijaros bien porque aquí ahora mismo estamos viendo una ventana
en el tiempo que nos traslada al París de finales del siglo XIX. Una ciudad vibrante,
llena de carruajes y de vida, en una época donde la Torre Eiffel solo tenía unos pocos
años de vida, donde los parques se podían ver a niños jugando con sus barcos y donde
los coches de bomberos eran en realidad carruajes tirados a caballo. Eso sí, de todas las
cosas que podría haber en el París de 1890, hay una cosa que nunca te encontrarías,
una cámara de vídeo capaz de grabar en 4K a color y a 60 fotogramas por segundo. Entonces,
¿cómo es posible que podamos ver un vídeo así?
Si has visto mi anterior vídeo sobre superresolución, seguramente ya sabrás la respuesta, Inteligencia
Artificial. Y es que este es otro trabajo del mismo autor que realizó esta fantástica
remasterización del vídeo del tren llegando a la estación, donde se conseguía rescalar
la obra a 4K y darle una fluidez de 60 fotogramas por segundo. En el vídeo sobre superresolución
ya hablamos sobre la primera de estas transformaciones, sobre cómo la Inteligencia Artificial era
capaz de aprender a hacer un rescalado a una resolución de 4K con una calidad superior
a otras técnicas más tradicionales. Si no lo has visto, te recomiendo que le eches
un ojo cuando acabemos.
Y es que en el vídeo de hoy no vamos a hablar de cómo aumentar la resolución, sino de
cómo aumentar el número de fotogramas, algo que yo he pasado a denominar superfluidez
y que considero que es esto que hace que este vídeo se vea tan espectacular. Pero bueno,
esto te lo voy a contar al final del vídeo. Antes, comencemos por lo básico.
Cuando hablamos de un vídeo, realmente lo que tenemos que pensar es en una secuencia
de imágenes. Ya sabes que será la cantidad de imágenes que mostremos por segundo lo
que definirá el ratio de fotogramas de este vídeo, los famosos FPS, y que es esta propiedad
la que notará la percepción de que un vídeo se reproduce con mayor o menor fluidez.
Al ojo humano, framerates entre 20 y 30 fotogramas por segundo son suficientes para comenzar a
dar una sensación de fluidez aceptable a nuestros vídeos, y en caso de que queramos
conseguir efectos más interesantes, como por ejemplo de cámara lenta, tendremos que
preocuparnos de grabar este vídeo a un ratio de fotogramas mayor, por ejemplo a 120 fotogramas
por segundo, para así conseguir que esta versión a cámara lenta siga manteniendo
su fluidez normal de 30 fotogramas por segundo cuando lo ralenticemos.
Claro, el contar con suficientes fotogramas será por tanto una característica deseable
en nuestros vídeos. Pero, ¿qué pasa cuando estos vídeos ya han sido grabados en época
donde la tecnología no permitía una tasa de fotogramas tan alta? O para aquellos vídeos
como películas de stop motion, donde producir cada fotograma tiene un coste de producción
tan elevado que no merece la pena optar por altos framerates?
¿Qué podríamos hacer en estas situaciones? Pues efectivamente inventarnos los fotogramas
que faltan. ¿Cómo lo hacemos?
Pues tal y como vimos en el vídeo de super resolución, para aumentar el tamaño espacial
de una imagen, hay algunas técnicas básicas para inventarnos los píxeles nuevos. Y bueno,
a la hora de sintetizar fotogramas intermedios de un vídeo, también podemos hacer uso de
técnicas similares. La más sencilla ¿cuál sería?
Pues oye, mira, estos fotogramas aquí que no sé qué valores asignarles, pues le puedo
asignar un duplicado del fotograma anterior que sí conozco, duplicándolo aquí y aquí.
A esta técnica se le denomina muestreo de fotogramas. Y repitiéndola para todos los
nuevos fotogramas del vídeo, pues sí, hemos conseguido una reproducción más ralentizada,
pero tampoco muy fluida, y donde en realidad el framerate efectivo de este vídeo es el
de haber dividido los 25 fps originales entre 4. De poco nos sirve.
Una alternativa a esto sería por ejemplo la de tomar el fotograma anterior y el fotograma
posterior y hacer una interpolación de ambos fotogramas en la proporción equivalente
a la distancia de cada uno de los fotogramas que sí conocemos. Esta técnica, la interpolación
de fotogramas, si la comparamos con el muestreo de fotogramas que hemos visto anteriormente,
si no va a generar un resultado donde al menos los saltos entre frames son menos perceptibles,
pero que aun así al ojo entrenado le generará una sensación de suciedad de los movimientos
rápidos que en realidad tampoco es deseable.
Y bueno vale, lo voy a confesar ya porque creo que algunos ya se estarán dando cuenta,
y es que la estructura de este vídeo está siendo calcada al del vídeo de super resolución.
De hecho las técnicas clásicas que te acabo de presentar, si las miramos a nivel de pixel,
son bastante similares a las técnicas que vimos en aquel vídeo para aumentar la resolución
de los fotogramas. Por ejemplo el duplicado de fotogramas en este caso, es bastante similar
a lo que utilizábamos allí de duplicar aquellos píxeles que fueran más cercanos al que conocíamos.
Y la interpolación entre dos fotogramas, si lo pensamos, pues también es similar a
la interpolación de píxeles que hacíamos en el rescalado bilineal. La diferencia en
este caso es que en vez de hacerlo en la dimensión espacial, lo estamos haciendo en la dimensión
temporal.
Vale, pues ahora que ya están todas las cartas sobre la mesa y ya sabes que estoy siguiendo
una estructura similar al del vídeo de super resolución, ¿qué tocaba ahora? Ah sí,
vamos a ver los algoritmos más avanzados para resolver la superfluidez.
Veamos, intentamos analizar el problema a resolver. Imagina que de un vídeo yo te enseño
este fotograma de aquí y después te enseño el que sería su siguiente fotograma. Y ahora
tu tarea será la de generar el fotograma intermedio. ¿Cómo crees que sería? Posiblemente en
tu cabeza te estés imaginando algo como esto, completando la trayectoria que está realizando
en el aire el cubo de Rubik. El punto clave aquí a entender es que en muchas situaciones,
conocer el movimiento de los elementos de una escena es suficiente para poder predecir
nuevos fotogramas. ¿Por qué? Pues mira, porque sabiendo cómo se mueven las cosas,
simplemente lo único que tendríamos que hacer sería desplazar los píxeles en consecuencia
y listo.
De ahí que desde hace años, muchos de los métodos más avanzados para este tipo de
tareas se basan en calcular este movimiento que percibimos visualmente en la escena, algo
conocido como el flujo óptico, o en inglés, optical flow. Si tomas una imagen y por ejemplo
identificas esta región de píxeles de aquí, podemos intentar predecir su movimiento mirando
el siguiente fotograma y buscando en otra posición dicha región. Claro, esto es una
tarea computacionalmente compleja, y para resolverla podemos tomar una serie de premisas
que aunque no siempre se van a cumplir, nos ayudarán a simplificar los cálculos. Por
ejemplo, podemos asumir que grupos de píxeles normalmente se moverán en conjunto o que
dicho movimiento debería de ser pequeño, y por tanto esa región encontrarse cerca.
Incluso podemos asumir que en esta transición las intensidades de los píxeles no van a
variar, algo que es parcialmente cierto siempre que no haya cambios en la iluminación de
la escena. Con todo esto, podríamos identificar la nueva posición de esta región de píxeles
y podremos trazar un vector de velocidad que nos indique cuál es el flujo óptico para
dicha región. De hacer esto con todas las regiones de nuestro fotograma, habremos computado
el flujo óptico del vídeo. Y ojo, porque el cómputo del flujo óptico en realidad
nos estaría portando una información valiosísima de la estructura tanto espacial como temporal
del vídeo que estamos analizando, información que es importante para resolver múltiples
tipos de problemas. Por ejemplo, el cálculo del flujo óptico puede ser utilizado para
la segmentación de un vídeo, porque normalmente objetos independientes se mueven de manera
independiente, o también entendiendo los elementos de una escena podemos traquearlos.
O por ejemplo también se ha utilizado en vídeo donde se está aplicando un efecto
de transferencia de estilo para eliminar el molesto parpadeo entre fotogramas y respetar
así la coherencia temporal, sin optical flow y con optical flow. ¿Veis la diferencia?
E incluso el flujo óptico lo podemos encontrar en los software de edición de vídeos más
utilizados para resolver el problema del que estamos hablando hoy, la sintetización de
fotogramas intermedios para conseguir la fluidez. Pero ojo, porque el flujo óptico
también tiene sus limitaciones, y es que algunos de los criterios que hemos asumido
originalmente para su cálculo, no siempre se cumplen. Por ejemplo, la intensidad de
los píxeles de una región de un vídeo no tienen por qué mantenerse constantes si
pasaran por debajo de una sombra. Y bueno, tampoco siempre grupos de píxeles se mueven
todos de manera uniforme, y por tanto la estimación que se obtiene para algunos vídeos
es bastante pobre, obteniendo distorsiones que son notables en el vídeo. ¿Podríamos
hacerlo mejor? Pues sí, y como era de esperar a todas estas técnicas más tradicionales
que existen para computar el flujo óptico, en los últimos años se le han ido sumando
todos aquellos métodos que hemos desarrollado desde el campo del deep learning. Porque oye,
mira, si con las redes neuronales hemos sido capaces de generar cualquier tipo de cosa,
píxeles a casco porro, ¿qué nos va a impedir el tomar dos fotogramas, dárselo como entrada
y hacer que la red aprenda a sintetizar el fotograma intermedio? Pues tiene sentido,
pero curiosamente este planteamiento no funciona del todo bien, pues parece que este tipo de
sistemas requieren de más información sobre el vídeo que están analizando. Pues mira,
eso lo podríamos mejorar si hacemos uso de la información tan rica que nos aporta
el cómputo del flujo óptico y lo integramos dentro de nuestras arquitecturas de deep learning.
Y oye, mira, ya que nos estamos calentando con esto del deep learning, ¿por qué no
vamos a basar en el cómputo del flujo óptico utilizando los métodos tradicionales? Si
podemos entrenar a una red neuronal para que, dado dos fotogramas de entrada, aprenda a
computarnos un flujo óptico de mejor calidad a partir de entender cómo los elementos de
la escena se mueven. Y ya luego podemos utilizar este flujo óptico en nuestra arquitectura
para predecir el fotograma intermedio. ¿Lo entendéis? Con esto ahora sí, ya empezamos
a obtener resultados notablemente mejores.
De hecho, incluso podemos calcular no uno sino dos flujos ópticos si aprovechamos el
sentido del tiempo hacia adelante y el sentido del tiempo hacia detrás. Para la predicción
de un fotograma intermedio, ambos flujos ópticos nos aportaría información de relevancia
y en este caso estaríamos haciendo una estimación que se conoce como bidireccional. Con esto
ahora faltaría un problema por resolver. Bueno, no sé, a ver, en realidad quedan muchos
problemas por resolver, tanto como papers, pero tengo que empezar a darle un cierre a
este video.
Nos faltaría un problema a resolver, y es que sí, saber cómo los píxeles de una escena
se están moviendo nos puede ayudar para entender cómo el objeto va a estar en un futuro,
pero nos falta otro concepto importante que es el… perdónate, ¿puedes mover? Es que
estás tapando el concepto.
Efectivamente, hablo de la oclusión.
La oclusión ocurre cuando en nuestro video un objeto es tapado por otro en la escena,
y esto formalmente lo que hace es que píxeles que a lo mejor tengamos en este momento del
tiempo realmente no tenga un equivalente en el siguiente fotograma. No hay continuidad
en el movimiento, lo cual significa que no podremos predecir su evolución y nuestra
estrategia para sintetizar nuevos fotogramas se va al traste.
E incluso es peor, porque imaginate una situación donde dos objetos en movimiento se superponen
obstruyendo el uno al otro. Si computáramos el flujo óptico de cada uno, podría coincidir
que en una misma zona tuviéramos que desplazar los píxeles de ambos objetos, y claro, ¿a
cuál le daríamos prioridad? ¿A este de aquí o a este de aquí?
Pues seguramente de manera intuitiva tú ya tienes la respuesta, y es que deberíamos
darle prioridad a aquel objeto que se encuentre delante, más cercano a la cámara.
Pero ¿cómo podría saberlo el algoritmo?
Tranquilos que no cuente el pánico, porque es en este momento cuando toca hacer acto
de memoria, y recordar que ya en este canal vimos en un video cómo podíamos inferir
la tridimensionalidad de una escena a partir de sus fotogramas. Esto si no lo has visto,
pues te recomiendo que lo apuntes en la lista de videos pendientes, porque va a ser un elemento
clave en la solución que estamos buscando.
A modo de resumen te puedo decir que sí, que en los últimos años, gracias al deep
learning, hemos desarrollado redes capaces de tomar como entrada un fotograma y que pueden
entender toda la tridimensionalidad de una escena sabiendo cuál es la disposición en
la profundidad de cada uno de sus objetos, computando así lo que se conoce como un mapa
de profundidad.
Y claro, será con este mapa de profundidad, en combinación con el cómputo del flujo
óptico, con el que podremos resolver de una vez este maldito problema. El flujo óptico
nos dirá hacia dónde debemos desplazar los píxeles, y el mapa de profundidad a qué
píxeles le tenemos que dar prioridad.
Suministramos toda esta información a un módulo encargado de generar fotogramas realistas
y listo.
Y ahora sí, te cuento que todo este paseo teórico que hemos realizado es la clave del
paper Depth-Aware Video Interpolation, o traducido Interpolación de Video Basado en la Profundidad.
Justamente el sistema que se ha utilizado para la obtención de tomas superfluidas a
60 fotogramas por segundo en este video y en este otro también.
Un sistema que arroja unos resultados bastante increíbles en materia de fluidez y del cual
podréis encontrar numerosos ejemplos en internet. Les dejo aquí abajo en la caja de descripción
también un enlace al repositorio en GitHub por si ustedes también queréis descargarlo
y probarlo.
Unos resultados que como ya he explicado al principio, creo que son el principal protagonista
que hacen que este video se vea tan espectacular y no tanto la super resolución. Y el motivo
es que al final nuestro ojo se ha ido acomodando a lo largo de los años a que consumir contenido
de 24 fotogramas por segundo es contenido más cinematográfico y tener contenido con
mayor fluidez, como por ejemplo 60 fotogramas por segundo, es el resultado de cámaras más
caseras y de contenido más amateur. Seguramente incluso las animaciones de este video, que
también están a 60 fotogramas por segundo, en algún momento te habrán resultado un poco
extrañas.
Lo interesante aquí es que con archivos históricos como este, que no estamos acostumbrados a
consumirlos con una tasa de frames tan elevada, el resultado no es tanto como estar grabándolo
con una cámara casera, sino como el de estar viéndolo a través de una ventana. Una ventana
que nos abre la realidad hacia un mundo que ya hemos dejado atrás y que gracias a la
inteligencia artificial y toda esta tecnología de la que hemos hablado hoy, hemos conseguido
traerla de nuevo de vuelta.
Tema con el que cierro ya esta miniserie que hemos hecho de remasterización de contenido
multimedia basado en inteligencia artificial, donde hemos hablado de superfluidez y también
de super resolución. Bueno, cerramos la serie ya porque creo que no les interesará saber
cómo darle color a imágenes en blanco y negro.