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.

Hola que tal, bienvenidos a DOTSYCV, bienvenidos a este vídeo que va a ser un vídeo un poco
diferente de lo normal porque bueno, ya sabéis que avisé por redes sociales de que el mes
pasado estuve haciendo, bueno, pues un cambio de hogar, de lugar de grabación, estoy mudándome,
este es el nuevo piso, este es el primer vídeo en el nuevo piso y bueno, mira, de hecho voy a
enseñar un poco cómo estamos, creo que puedo hacerlo. Básicamente lo que hay detrás de las
cámaras, cajas, el proyector que me está poniendo aquí la luz atrás, vosotros, aquí está abajo la
casa y aquí es donde va a estar todo el setup nuevo de DOTSYCV que cuando esté montado lo
veréis en el canal y va a estar bastante chulo. Pero bueno, ese no es el tema de hoy, esto lo
cuento porque este vídeo va a ser diferente, no voy a estar ni siquiera editando lo tanto,
solo quiero hablar con vosotros, os quiero contar un poco sobre este tema y quiero pasar
directamente a probar el código que está a disposición de todo el mundo y enseñaros cómo
lo podéis utilizar para que, bueno, en este periodo en el que todavía me estoy asentando y
todavía estoy montando mi nueva estructura de canal, pues estéis un poco entretenidos.
Así que nos vamos a centrar en el tema de hoy. Hoy vamos a estar hablando de NERF. NERF es un
concepto que ya traje al canal en 2020, fue una de las novedades que nos trajo el año pasado más
interesante dentro del campo del deep learning y esto es una técnica que cae dentro de lo que
sería la rama de la renderización neural volumétrica. Esto es pues coger el proceso
típico de renderización, pues ya sabéis que cuando un artista o alguna persona a través de
un software de diseño gráfico 3D diseña una escena, pues tiene que estar encargándose de
definir la geometría, materiales, iluminaciones, montón de cosas y llegados a un punto toda esta
información tiene que ser procesada a la hora de generar una imagen, una imagen 2D que es lo que
normalmente vemos pues cuando vemos una película de animación, cuando vemos un render, lo que sea.
Este proceso es lo que se conoce como renderización y es una cosa que ha existido desde que el
software es software. ¿Qué pasa? Que ahora con esta mejora de las herramientas de deep learning
pues empieza a surgir lo que se llama la renderización neural. La renderización neural
básicamente es coger todo este pipeline, todo este proceso de calcular geometría, calcular materiales,
calcular algunas de estas etapas en esta fase de diseño 3D y sustituir algunas de estas fases por
pues algoritmos que pueden automatizar esa tarea. Por ejemplo encontramos proyectos que son capaces
de generarte automáticamente la geometría a partir de una foto dada o de inferir a partir de una
geometría dada el material que tiene que aplicar. Existen numerosos proyectos y dentro de esto pues
existen también proyectos como los que vamos a ver hoy, que básicamente es lo siguiente. Imaginad
que yo tengo, pues yo que sé, cojo mi cámara que ahora mismo no puedo porque la estoy utilizando,
tomo diferentes fotografías de el escenario en el que estoy ahora, son imágenes en dos dimensiones
y con estas imágenes yo intento que un programa, un software, algo basado en inteligencia artificial
por ejemplo, pues puede hacer la labor de decir oye con estas imágenes yo puedo inferir lo que
sería la tridimensionalidad de la escena. Yo puedo inferir pues la geometría, la profundidad, puedo
inferir la iluminación, los materiales, puedo hacer toda esa tarea, con lo cual tú ahora pues podrás
coger por ejemplo tu cámara virtual dentro de este espacio tridimensional y podrás acceder a nuevas
perspectivas que no estaban incluidas en tu dataset original. Esto es una labor súper interesante,
por ejemplo a nivel más clásico existen técnicas como la fotogrametría y ahora en los últimos
años hemos visto un despertar de bueno vamos a utilizar todas estas herramientas del campo del
deep learning para ver si conseguimos resolver esta tarea de manera inteligente. En ese sentido
existe un gran abanico de técnicas distintas que proponen cosas muy diferentes y dentro de este
abanico existe la técnica que Nerf viene a representar. Esto cae como he dicho en el campo
de la renderización neural volumétrica y esto lo que significa es que lo que se plantea es que
nuestra escena tridimensional va a pertenecer a un volumen, podemos imaginar un cubo delante de
nosotros y dentro de este cubo tú puedes ir completándolo con pequeños cubitos por ejemplo,
estos cubitos son boxeles y tú puedes ir decidiendo pues qué tipo de boxeles puedes
colocar, con qué color, en función de la posición que ocupen en ese espacio o cómo lo estés
visualizando y con esto lo que tendría sería un cubo donde estarías completando una especie de
pixel art, si lo pensamos un poco en el mundo gaming sería como tener un chunk de minecraft
vacío y tú pudieras decidir qué cubo, qué tipo de bloque quieres colocar para hacer el
modelo que tú quieras. En este sentido esto es lo que propone técnicas como Nerf, hacer este volumen,
este espacio volumétrico y que sea una red o un sistema de varias redes neuronales las que vayan
decidiendo pues cómo tiene que ser para cada coordenada y para cada punto de incidencia de
cómo estemos visualizando el cubo, qué tipo de bloque, qué tipo de pixel tiene que aplicar,
esto luego tú puedes aplicar técnicas de renderización para generar una imagen en dos
dimensiones y comparar si las imágenes reales se parecen o no a tu dataset de entrenamiento,
si esto lo haces y vas entrenando estas redes neuronales para que hagan bien esta tarea,
si han conseguido que para tus imágenes de entrenamiento se visualice algo que se
parece a tus imágenes, eso significa que de alguna manera este volumen ha generado,
esa escena correctamente ha generado, esas iluminaciones correctamente ha generado una
escena tridimensional donde tú ahora puedes mover la cámara y observar nuevas perspectivas. Esto
es lo que presentó Nerf en 2020 y los resultados fueron impresionantes. A mí me dejó completamente
sorprendido pero no sólo a mí sino también a toda la comunidad científica del campo de deep
learning, claro. En este caso la comunidad ha estado muy activa y han ido mejorando muchas de
las limitaciones que tiene Nerf porque al final es una técnica muy nueva, una técnica que se
desconoce realmente y que todavía tiene mucho margen de mejora y en ese sentido hemos visto
proyectos donde por ejemplo aquí en el canal hablamos de lo que era Nerf in the wild, que era
este sistema, pues este sistema era una mejora, un avance de lo que Nerf proponía. Nerf tenía
una limitación que era la siguiente y es, oye tú quieres entrenar a este espacio volumétrico para
que genere tu escena, perfecto. Pero hay un problema, si las imágenes que tú estás utilizando para
tu entrenamiento no son consistentes, si tienen pequeñas variaciones, si la apariencia cambia,
si la iluminación se modifica, Nerf va a hacer mal su trabajo, no va a poder entender cómo una
imagen de aquí y una imagen de aquí, si son diferentes, cómo eso reconstruye a la escena
original. Eso es un problema que Nerf in the wild consigue solucionar. En ese caso ellos lo proponen
para un proyecto del tipo, oye si yo quiero capturar un monumento pues puede ser que cuando yo me vaya
moviendo, siendo un espacio tan grande, las cosas se modifiquen, que haya gente por el medio, que
hayan coches, que haya cambios de iluminación e incluso a lo mejor yo no quiero utilizar imágenes
tomadas por mí, sino que quiero descargarme un banco de imágenes de Montmartre o de lo que sea,
del Tamajal, de cualquier monumento y coger esas imágenes que pueden tener apariencias diferentes,
filtros diferentes, cámaras distintas, utilizar todo eso y que el sistema aprenda a reconstruir lo
que es importante y lo que no, pues lo descarte, lo filtre o lo codifique de otra manera. Esto es lo
que consiguieron y de nuevo los resultados fueron impresionantes, consiguieron una cosa que a mí
personalmente me toca el cora porque me hace recordar a cuando estaban estos programas de
encarta, no sé si lo recordáis, la encarta 99 que tú podías visitar como reconstrucciones 3D
del mundo, pues esto me recuerda un poco a eso y me hace pensar en lo que podría ser una encarta
o un viaje en realidad virtual en el futuro, pero bueno eso lo dejamos al margen y quiero que os
fijéis en estos resultados donde ya no sólo podíamos reconstruir esta escena, como digo, de
este espacio tan grande que puede tener tanta variación, sino que también hemos enseñado a
las redes neuronales que si, oye, si está aprendiendo a partir de imágenes que tienen
apariencias muy diferentes, también podemos manipular esta iluminación, podemos ir manipulando
la apariencia de la escena, con lo cual ya no sólo podemos acceder a nuevas perspectivas sino
también pues, oye, quiero observar este monumento de noche o con una iluminación más soleada o más
dramática, es increíble y es increíble y es además un avance que se ha dado en muy poquito
margen de tiempo desde el paper original de Nerf. En este sentido os puedo comunicar que eso, que han
salido un montón de trabajos que mejoran diferentes aspectos de lo que esta tecnología puede hacer y
os voy a dejar abajo en la caja de descripción un, bueno, un artículo donde se recopilan muchos de
estos del mes de enero y ahí podéis observar un poco en qué se ha trabajado, pero bueno,
tenemos trabajos que por ejemplo buscan entrenar a Nerf para poder codificar un vídeo donde tú
puedas manipular la posición de la cámara. Tenemos proyectos que plantean técnicas de optimización
para utilizando una meta inicialización, podamos entrenar a Nerf para ciertos tipos de categorías
de objetos con muchos menos steps de entrenamiento, o sea, tenemos una gran distribución de mejoras
que se van aplicando a Nerf y que en un futuro irán conformando nuestra caja de herramientas
para esta tecnología y entre todas ellas hoy os voy a hablar de la que más me ha llamado la atención,
que es Deformable Nerf o DeNerf si lo acotamos y lo dejamos así de bonito. En este caso este
proyecto me gusta por dos motivos, el primero porque realmente aporta una mejora muy interesante
que ahora voy a explicar dentro de lo que pueda ser Nerf y lo segundo es que contamos con código,
es decir, si vamos a la página del proyecto nos vamos a encontrar estos Google Collab,
estos notebooks que vamos a utilizar ahora para poder probar a este sistema y ver qué tal
funcione y poder capturarnos a nosotros tridimensionalmente. ¿Y qué es lo que plantea DeNerf? Bueno,
pues ya lo comenté antes, una de las grandes limitaciones que tiene el sistema Nerf original,
el del primer paper, es que requiere que todas las imágenes que nosotros capturemos sean
consistentes, que no haya variaciones entre una imagen y otra porque si no el Nerf se puede hacer
un lío y no va a poder reconstruir toda esta escena correctamente. En ese sentido DeNerf plantea
una cosa y es, por ejemplo, si yo quisiera hacer una captura de mí mismo, claro, yo no soy una
cosa rígida, estática, inamovible, sino que realmente soy una cosa, bueno, pues dinámica,
blandita, que se va moviendo. Me gustan los blanditos, que en inglés tiene más sentido.
Soy un soft body que le dicen y por tanto puede que haya deformaciones entre una imagen y otra
que capture. En este caso, lo que plantean en este proyecto es lo siguiente y es, oye,
al igual que en Nerf in the wild podíamos decir que entre esta imagen y esta imagen había una
apariencia diferente que podíamos dejar que una red neuronal aprendiera, pues en este caso
podemos hacer lo mismo pero con las deformaciones. Podemos dejar que haya una red neuronal que vaya
aprendiendo a saber cómo tiene que deformar un poco los rayos que se proyectan de este volumen
para que así se sepa que si yo, por ejemplo, me he movido un poco la posición entre este fotograma
y este fotograma, pues esa red neuronal puede aprender a codificar esa diferencia y por tanto
se pueda hacer una corrección sobre lo que se va a renderizar de ese volumen. Esta es un poco la
parte técnica de la cual hoy no quiero entrar, sino que quiero que nos centremos en los resultados.
Sobre todo quiero que veáis la comparación de lo que era el paper original de Nerf frente a lo que
esta gente ha conseguido hacer. Aquí lo que estamos observando son los resultados que ellos
han generado. Una captura de una persona usando la tecnología de Nerf o como ellos lo han denominado
Nerfis, ¿vale? Una mezcla entre Selfies y Nerf. No vamos a opinar, ¿vale? De este fantástico
naming. En este caso fijaros cómo simplemente con una simple captura de vídeo podemos hacer
una captura total de la tridimensionalidad de la persona. Algo que podemos observar, por ejemplo,
si analizamos lo que sería el mapa de profundidad que Nerf ha inferido a partir de reconstruir toda
esta escena. Si nos fijamos bien en geometrías tan complejas como sería el pelo de esta persona,
podemos ver que la segmentación que se realiza es perfecta. Algo que tiene muchas aplicaciones,
pues por ejemplo en técnica de realidad aumentada, como pudimos ver en el vídeo que sale por aquí
arriba, esto tiene un montón de aplicaciones para hacer efectos especiales o para hacer cosas tan
sencillas entre comillas como hacer una segmentación del fondo y poder tener una rotoscopia del sujeto
que podamos aplicar para otras técnicas de vídeos. No sólo eso, sino que también como pasaba en el
vídeo de Nerf in the wild, cuando podíamos capturar la apariencia de una imagen y luego otra y luego
hacer la interpolación entre esas apariencias y poder ver pues cómo la escena iba variando su
iluminación, en este caso podemos hacer lo mismo pero con las deformaciones. Fijaros por ejemplo en
este caso cómo el sujeto originalmente está mirando en una dirección y luego está mirando
en otra dirección en otro de los fotogramas. Esto sería una de estas cosas que el sistema aprendería
a capturar como una deformación y podemos ver que podemos hacer esta interpolación viendo cómo la
cara del sujeto pues efectivamente va realizando de forma coherente esta interpolación de derecha
a izquierda. Como digo los resultados son bastante impresionantes y es un ejemplo más de cómo ha sido
el ritmo frenético de crecimiento de una tecnología como es Nerf, una tecnología que yo creo que cuando
todo el mundo la ve pues pensará joder que guay molaría probarlo, pues vamos a probarlo.
Pues en este caso para probarlo lo que vamos a hacer es primero capturar un vídeo que vamos
a utilizar para entrenar a Nerf, en este caso tomamos un móvil o una cámara y vamos a ir
registrando diferentes perspectivas de nuestro rostro de derecha izquierda de arriba abajo y con
esto pues obtendremos un vídeo que vamos a utilizar para sacar imágenes fotogramas que vamos a usar
para entrenar a Nerf. Para esto ahora iremos a la página del proyecto y nos meteremos al código al
repositorio que está en GitHub donde vamos a encontrar tres enlaces a Google collab ya sabéis
el sistema de ejecución de código que Google nos ofrece donde podemos usar su hardware de manera
gratuita y por tanto no tenemos que usar nuestro ordenador ni tener toda la potencia en casa y a
partir de aquí lo que tenemos que ir haciendo es ejecutar cada una de las celdas de código de
manera secuencial vale en Google collab lo que tenemos que hacer es clicar el botón del play en
cada una de las celdas ir leyendo exactamente qué es lo que nos piden y con esto pues podemos
ir ejecutando el código que nos han preparado los autores de este proyecto. Todo el almacenamiento
lo vamos a hacer a través de Google Drive y para eso ya veréis que en cada notebook siempre al
principio hay una celda que se va a encargar de hacer esta conexión con este sistema de
almacenamiento donde vamos a ir guardando pues todos los datos que generemos o todos los modelos
que hayamos entrenado a partir de aquí pues lo único que tenemos que hacer es nosotros subir el
vídeo desde nuestro ordenador el vídeo que queramos procesar y luego el resto de celdas de código
que nos vamos a encontrar en este primer notebook se van a encargar de hacer labores como pues por
ejemplo convertir el vídeo a imágenes a fotogramas que realmente el sistema de nerf pueda utilizar
para supervisar el entrenamiento de nuestras redes neuronales podemos ir comprobando que esto se va
realizando correctamente pues podemos visualizar estos fotogramas vamos a hacer también tareas
como por ejemplo predecir cuál es la trayectoria de la cámara a partir de algoritmos de estructura
de movimiento vamos a hacer una serie de preprocesamientos que nos van a permitir tener
todo bien preparado y que nos van a servir para poder entrenar a nerf correctamente una de las
cosas que también se va a hacer en este notebook es plantear cuál es la trayectoria de la nueva
cámara que vamos a generar pensad que al final aquí lo que estamos haciendo es generar una un
escenario 3d que luego podemos visualizar desde nuevas poses y aquí podemos ver pues que esta
trayectoria en forma de 8 en forma de bucle es la que se va a hacer delante de nuestro rostro una
vez esté todo hecho guardamos todo en google drive y nos pasamos al segundo notebook en este
caso el notebook que nos va a servir para entrenar al sistema de nerf en este caso de nuevo vamos
a empezar instalando todas las librerías vamos a ir ejecutando todas las celdas que están en
este notebook de manera secuencial y también pues nos vamos a conectar al sistema de google drive
para poder acceder a todos los datos de entrada que acabamos de generar en el notebook anterior
este notebook como digo va a servir para entrenar ya al sistema de nerf inicialmente pues vamos a
cargar nuestra fuente de datos vamos a generar los iteradores vamos a generar el propio modelo y
esta celda de aquí es la más importante de todas es la que va a poner a entrenar a nerf podemos
decidir cada cuánto queremos que se visualice un resultado que nos renderice un resultado como
este de aquí este es el primero que ha generado y podemos ver que se generan tres imágenes donde
la primera sería el resultado esperado el segundo sería el resultado predicho lo que ha generado
nerf y luego también se nos agrega un tercer resultado que sería la predicción de la profundidad
del mapa de profundidad que ya también sabemos que nerf nos puede generar yo digo que este proceso
va a ser el que más tarde podéis entrenar nerf tantos ciclos tantos steps como creáis necesarios
podéis ir visualizando los resultados que se generan y cuando más o menos veáis que ya el
resultado predicho se parece algo razonable que bueno satisfaga vuestra calidad esperada pues ya
podéis parar el entrenamiento siempre teniendo en cuenta de que se haya guardado un checkpoint de
vuestro modelo que podamos utilizar en la tercera y última fase para renderizar nuestro vídeo es en
este tercer notebook donde vamos a hacer esto vamos a cargar nuestro modelo ya entrenado y vamos a ir
generando cada uno de los fotogramas con la trayectoria de la cámara virtual que hemos
guardado en el primer notebook y con esto pues vamos a poder renderizar un vídeo donde veremos
nuevas perspectivas de nuestra cara que no están incluidas ni siquiera en nuestro vídeo de input
este proceso no debería llevar más de cinco minutos así que bueno podéis tomar un café y cuando
esté listo veréis un resultado como éste de aquí donde podemos ver que efectivamente nerf ha
conseguido recrear perspectivas de la cámara que hemos generado nosotros donde se ve la escena 3d
perfectamente recreada es interesante si comparamos esto con el input cómo podemos encontrar incluso
perspectivas que no están incluidas dentro de nuestro vídeo original significando esto
que efectivamente pues nerf ha aprendido a generalizar o a reconstruir correctamente esa
escena jugando un poco con esto que ha salido de aquí he tomado este mapa de profundidad y lo he
metido en after effects y he utilizado esto un poco para hacer este mate alfa y poder hacer una
especie de pues segmentación de lo que sería el fondo y podemos comprobar efectivamente que
pues podría servir si utilizamos esta herramienta para generar mates de bastante calidad como hemos
visto previamente y ya probando con diferentes cosas pues también he hecho esta otra escena con
nerf donde en este caso fijaros bien que la cara la estoy moviendo siempre para mirar a lo que
sería la cámara es decir estoy deformando mi rostro teniendo que el modelo aprender a deformar
poco a poco mi cara para poder hacerlo y podemos ver que el resultado que genera no es tan bueno
como en el anterior podemos ver que incluso la forma de mi cara se deforma esto se puede ver
mejor en el mapa de profundidad a la derecha pero bueno también ha conseguido reconstruir gran
parte de la geometría de la escena y yo creo que si pudiéramos entrenar a nerf en su versión más
potente pues al final aquí estamos trabajando con una versión de google colap podríamos conseguir
incluso mejores resultados como última curiosidad quiero enseñaros lo que ocupa esta escena al
final pensemos que esto lo que hemos hecho ha sido entrenar a una red neuronal que aprende a
generar pues cada una de estas escenas volumétricas y cuánto creéis que ocupa pensad que este era uno
de los datos más curiosos del paper original de nerf y es que conseguía una tasa de compresión
de la escena bastante drástica si la comparamos con otro tipo de soluciones y en este caso podemos
ver que el archivo que representaría los parámetros de nuestra red neuronal pues ocupa
únicamente 15 megabytes es decir estamos hablando de una escena tridimensional con sus mapas de
profundidad con toda la información rgb y de la orientación de la cámara y todo comprimido toda
la escena conmigo dentro en un archivo de 15 megabytes muy guay y aquí lo tenéis que os ha
gustado mola mola en este caso si lo probáis pues podéis etiquetarme por twitter o por instagram
o por cualquier red social y enseñarme vuestros ejemplos y voy a estar ahí al tanto que esto
esto siempre me gusta de hecho os voy a contar que también hay otro proyecto que podéis probar si
queréis estar entretenidos es una cosa que compartí a través de instagram y os voy a contar ahora
para que podáis hacer vuestras fotografías tridimensionales pero antes simplemente deciros
que nada bueno estoy empezando esta nueva etapa en este nuevo piso ha sido pues un mes de bastante
intensidad y solamente agradecer pues a todos vosotros que seguís por aquí evidentemente y
también agradecer a los patreons que al final están ahí apoyando pues siempre que este canal
siga manteniéndose y que bueno mes a mes quiera seguir haciendo contenido porque al final sé que
hay una gente por detrás que está valorando esto si queréis apoyar si queréis hacer una
aportación a todo este proyecto que va a seguir trayendo contenido a youtube ya sabéis que tenéis
abajo en la caja de descripción pues el enlace a patreon y ahí podéis hacer una aportación de
5 dólares 10 dólares lo que queráis y lo que comentaba si vais a instagram vais a encontrar el
siguiente tutorial de aquí que básicamente es un tutorial también como lo que hemos hecho hoy con
google colab donde os enseño cómo podéis aplicar un proyecto que es súper interesante para convertir
vuestras fotografías bidimensionales en fotografías 3d como estas que pueden ser una técnica que os
podría servir pues para proyectos audiovisuales o para darle un poco más de vida algún recuerdo
que tengáis no sé mucha gente lo ha probado y me ha compartido los resultados y yo creo que es
algo bastante fácil de hacer así que ahí lo tenéis podéis seguirme en instagram para ver este
tipo de contenidos y nada más volveremos más fuertes que nunca a dot csv con un nuevo espacio
y una nueva etapa así que nos vemos pronto con más inteligencia artificial aquí en dot csv