This graph shows how many times the word ______ has been mentioned throughout the history of the program.
Hace un par de semanas volvimos a hablar de NERF, esa impresionante técnica de renderización que
desde que salió en 2020 no ha parado de impresionarnos y es normal. Su promesa es
que con unas cuantas imágenes de un escenario e inteligencia artificial este sistema es capaz
de reconstruir tridimensionalmente una escena por la que podrás mover libremente la cámara y
explorarla. Esto es como la fotogrametría pero diferente. Y es que en el último vídeo lo
pudimos comprobar y es que la técnica de NERF pues tiene éxito allí donde la fotogrametría pues
tiende a fallar. Escenas con iluminaciones complejas, con reflejos, con transparencias,
y bueno, se puede ver que la geometría de los objetos tampoco lo clava. En aquel vídeo os
enseñé unas cuantas comparaciones y os pude enseñar por fin unas cuantas escenas capturadas
con este sistema de NERF. Pero de aquel vídeo nos faltó una cosa muy importante por comentar.
Y es que en esta ocasión, a diferencia de los trabajos anteriores, entrenar a una escena de NERF
pues no requería de tener que esperar horas o incluso días. No, este nuevo trabajo no tardaba
días, ni horas, ni minutos, sino segundos. Exacto. Desde que tú le das tus imágenes al
sistema solo pasaron unos pocos segundos hasta que tú puedas mover libremente la cámara por él.
El progreso que se ha conseguido con la tecnología NERF en cuestión de meses es impresionante. Y en
el vídeo de hoy te voy a explicar exactamente cómo lo han conseguido y por qué esto se puede
convertir en una gran revolución del mundo del 3D. Y es que, ojo, los avances que ha introducido
Nvidia en esta publicación impacta varias ramas del campo de la renderización neuronal. El uso
de redes neuronales para generar gráficos por ordenador. Desde poder codificar en una
red neuronal una imagen en altísima resolución hasta aprender de forma instantánea la representación
de superficies 3D complejas. ¿Cómo demonios lo han hecho? Vale, concentración. ¿Recordáis cómo
funcionaba todo esto de NERF? NERF es algo así como hacer pixel art en tres dimensiones. Imaginad
que vosotros tenéis un volumen tridimensional que tenéis que ir rellenando de bloques de colores
con el objetivo de que cuando lo miremos a través de una de las perspectivas pues nos
encontremos con una imagen parecida a la que hemos fotografiado. Si esto ocurre para varias
imágenes diferentes es porque, bueno, pues porque lo que hemos construido en este espacio 3D realmente
sí representa al objeto escena real que hemos fotografiado. Tiene lógica, ¿no? Y cómo no,
todo esto se consigue con inteligencia artificial. Esto es una red neuronal que toma como input las
coordenadas XYZ y dos variables más que vamos a comentar y que como salida va a generar el color
correspondiente a dicha región. Será tarea de la red neuronal aprender a predecir correctamente cada
color para cada coordenada. Y si construir esta especie de pixel art tridimensional ya te parece
un problema lo suficientemente complejo te tengo que decir que la cosa no se queda ahí y es que
estos bloques pues pueden ver su color modificado cuando cambiamos el ángulo desde el que lo
observamos y esto pues lo complica todo. Claro, si tú miras un objeto que refleja la luz pues el
brillo que emitirá dicho material en ese punto, en esta coordenada, si lo miramos desde aquí y si
lo miramos desde aquí es diferente. Misma coordenada, vista desde lugares diferentes,
diferente color. Y es por eso que las otras dos variables que también les facilitamos a la red
neuronal son las que explican cuál es el ángulo desde el que está observando la cámara. ¿Lo ves?
Bueno, creo que esto es un buen resumen de cómo funcionaba la tecnología nerf al menos en su
publicación original y creo también que ahora podéis entender por qué una escena nerf puede
llevar tanto tiempo en su entrenamiento y es que la tarea que tiene que acometer la red neuronal
pues no es para nada sencilla. A mí me gusta pensar que la red neuronal del sistema de nerf es
algo así como un pintor, un pintor que tiene una tarea muy jodida y es aprenderse para cada
coordenada cuál es el color que le corresponde pintar. Claro, si hace bien su trabajo, pues
acabará con la obra completada, ¿ok? Pero lo normal es que para llegar a esto antes ha tenido
que dedicar un montón de tiempo para aprenderse toda esta información. ¿No podemos hacerle más
sencillo el trabajo al pintor? Pues sí, mira. Por ejemplo, se me ocurre lo siguiente, mira,
en vez de dejarle a la red neuronal toda la responsabilidad de codificar en sus parámetros
cuál es la información necesaria para generar la escena, lo que podemos hacer es asociar a cada
coordenada del espacio un hueco que servirá pues para poder almacenar algo de información de lo
que representa dicha coordenada. Oye, que esta zona de aquí es amarilla o oye, que esto de aquí es
un cristal. Así el pintor, nuestra red neuronal, pues ya no tendría que almacenar tanta información
en su cabeza, sino que ahora se podría dejar guiar por toda la información que está almacenada en
cada coordenada. Lo que esta analogía quiere decir es que ahora nuestros parámetros de entrenamiento
no van a estar exclusivamente dentro de la red neuronal, sino que también vamos a tener una
serie de parámetros que van a estar asociados a cada una de las coordenadas tridimensionales
de nuestro volumen y estos parámetros les serán muy útil al sistema para poder guardar en ellos
información que sea relevante para explicar qué se encuentra en dicha región del espacio. ¿Se
entiende? Y esto por algún motivo acelera muchísimo los tiempos de entrenamiento. ¿Por qué? Bueno,
pues fíjate, antes cuando el pintor quería actualizar pues su entendimiento de una región
determinada de la escena, pues tenía que actualizar a todos los parámetros de su cabeza,
haciendo back propagation. Y claro, si son muchos parámetros, pues eso lleva mucho tiempo. Pero
ahora aprender algo sobre esa región implica actualizar únicamente la información de los
posits de dicha región, es decir, 8 parámetros en total. Esto es la diferencia entre tener que
hacer back propagation a todos los parámetros de la red neuronal o simplemente tener que entrenar
a unos pocos parámetros que codifican al input. Hay mejora. Y así es como muchos trabajos actuales
desde la publicación original de Nerf han conseguido reducir los tiempos de entrenamiento.
Repito, han mejorado los tiempos de entrenamiento, pero seguro que te está dando cuenta de que aquí
puede haber un problema. Y es que sí, estamos optimizando efectivamente el tiempo de entrenamiento,
pero esto lo estamos haciendo a costa de incrementar el número de parámetros. Porque sí, está muy
bien esto de querer tener información de cada región del espacio, de cada coordenada. Pero te
has parado a pensar cuántos posits puede ser esto? Piénsalo, para un volumen de resolución 100 pues
sería tener 100 por 100 por 100 regiones, en total 100 al cubo vértices. Un montón de parámetros
a entrenar. Y claro, estos parámetros en realidad lo que están haciendo es ocupar espacio en memoria.
Hemos reducido el tiempo de entrenamiento, pero hemos aumentado considerablemente el tamaño en
memoria. Y es en optimizar ahora el tamaño que ocuparía todo este sistema en memoria en lo que
se está centrando la mayoría de trabajos. Y es que en realidad hay mucho margen de mejora. Porque
no tiene sentido, por ejemplo, guardar tanto espacio en memoria, tantos posits, para regiones
de las cuales, por ejemplo, no tenemos información, como el interior de un objeto sólido. O tener,
por ejemplo, tantos posits para una región cuya información es la misma. O estar guardando posits
para regiones que directamente están vacías. No tiene sentido. Vamos, que hay margen de mejora y
que hay muchos trabajos moviéndose en esta línea. Si lo pensamos, la opción actual de tener un posit
para cada coordenada sería equivalente a tener una estructura de datos interna que se parezca
a una tabla, pero tridimensional. Una tabla donde cada celda estaría almacenando cada uno de estos
parámetros de entrenamiento. Y muchos trabajos actuales que podemos encontrar están dedicando
a mandar a paseo a esta tabla tridimensional que es tan costosa en memoria y sustituirla por
alternativas más eficientes. Hay trabajos, por ejemplo, cuya alternativa es la de usar árboles
octales o experts grids, que son estructuras de datos que subdividen mucho mejor el espacio
tridimensional de forma más óptima. Pero de la que quiero hablar hoy, de la que han utilizado en
este trabajo de Nvidia, que haciendo uso de un viejo truco informático que seguramente a muchos
de vosotros os sonará, pues han conseguido los mejores resultados. ¿Qué han utilizado? Funciones
hash. Una función hash no es más que una forma de codificar un bloque de datos para obtener de él
un código, un identificador que nos podría servir, por ejemplo, para encontrar una posición en una
tabla. Con lo cual ahora, en vez de tener un posit para cada coordenada, que era el problema
de antes, lo que vamos a hacer será pasar las coordenadas correspondientes por una de estas
funciones hash. Y esta función hash, lo que no te volverá, pues será una posición de una tabla
donde vamos a poder encontrar el posit asociado con dicha coordenada. Recordemos que este posit
es el que guarda información codificada sobre qué hay en la región del espacio identificada
con dichas coordenadas y que será este posit el que le pasaremos como input a la red neuronal para
que nos indique cuál es el color correspondiente a dicha zona. Este esquema, por tanto, ahora se
convierte en algo así como coger todos los posits, meterlos en un archivador y tener una función hash
que servirá de secretario para indicarnos para cada coordenada dónde podemos encontrar el posit
correspondiente. Y te estarás preguntando, ¿esto por qué mejora el sistema? Pues la optimización
aquí viene en el hecho de que podemos limitar el tamaño de este archivador, limitando por tanto cuantos
posits podemos almacenar y limitando por tanto el espacio en memoria. Es perfecto. Pero claro,
si tienes más coordenadas que huecos en el archivador, la función hash podría codificar
para diferentes coordenadas una misma posición en la tabla, un mismo posit. Entonces, ¿con cuál de
los dos posits nos quedamos? ¿Con el de esta coordenada o el de esta? Pues esto es lo que se
conoce como una colisión hash. Cuando dos objetos diferentes generan el mismo identificador, colisiona.
Y lejos de ser un problema, en este caso es una virtud. Y es que en este trabajo han observado que
estas colisiones hash lo que hace es que la red neuronal tenga que dar prioridad a alguna de las
dos informaciones que está recibiendo. ¿Cuál es la que aporta más información de cara al objetivo
final? ¿Qué es representar la escena? Esta que a lo mejor representa un espacio vacío o esta que
me está indicando información importante sobre la textura de esta superficie que tengo
imaginariamente por aquí. Vale, esto es así. La red neuronal será la que tenga que aprender a
tomar la decisión de con qué información quedarse en cada caso. Las colisiones hash no son un
problema, sino que es lo que permite realmente al sistema poder comprimir tanta información que
antes era muy redundante. Esto sumado a que, como he dicho antes, las funciones hash son
muy rápidas. Simplemente codificas, obtienes el identificador, buscas en la tabla y ya está.
Y que además esta operación pues ha podido paralelizar aprovechándose de la aceleración
por hardware de las GPUs de Nvidia y que además este paper pues introduce otras mejoras como una
serie de jerarquías a diferentes resoluciones que no voy a pasar a comentar porque sino este vídeo
pues no da tiempo para todo. Pero la cosa es que con todo esto han conseguido pues poder
entrenar a un sistema como Nerf instantáneamente. Y lo que es mejor es que como he comentado al
principio, esto no sólo está ligado al trabajo de Nerf, sino que este truco que se han sacado de la
chistera pues sirve también para otro tipo de campos que también se investigan dentro de la
renderización neuronal. Por ejemplo, también ofrece un muy buen rendimiento en la codificación de
imágenes en altísima resolución. Esto sería como entrenar a un sistema Nerf, pero claro,
en dos dimensiones. Aquí podemos ver cómo en cuestión de segundos, ante nuestros ojos,
la red neuronal aprende a codificar esta imagen al completo. O también este sistema nos ha mostrado
cómo es capaz de codificar superficies tridimensionales complejas que vienen representadas
por funciones de distancia de forma instantánea. Y al final lo que estamos viendo aquí es una cosa
importantísima, porque hoy simplemente estamos codificando dentro de redes neuronales, pues sí,
imágenes en alta resolución o superficies tridimensionales complejas o escenas Nerf. Pero
es que esto nos habilita el camino para que dentro de muy poquito podamos pedirle a estas
redes neuronales que no sólo codifiquen esta información, sino que también cumplan con ellas
tareas inteligentes. Por hacer el simil esto es como si hubiéramos descubierto ahora que con una
red neuronal pues podemos pasar una imagen y la red la puede replicar, que la podemos codificar con
dicha red neuronal. Ok, pero lo que ya tenéis que saber es que una vez hemos llegado a eso,
pues lo que viene después es poder enseñarle pues aplicarle estilos, generar nuevas versiones de
dicha imagen o aplicar retoques al gusto. Claro, ahora tenemos que trasladar todo esto al mundo
del 3D. Lo que se está consiguiendo con trabajos como este es poder enseñarle a la inteligencia
artificial a que aprende a codificar pues objetos y escenas 3D. Y esto, como digo, abre la puerta a
una revolución que va a ser muy interesante en el campo de los gráficos por ordenador. A modo de
ejemplo, pues quiero que veáis este caso de uso de otro proyecto que también está utilizando Nerf,
pero combinado con el sistema de visión clip. La idea es que la combinación de estas dos cosas
pues nos permita poder pedirle al sistema algo así como, hey, quiero que generes un objeto 3D de un
sillón en forma de aguacate o en forma de coral y que el sistema pues intente crearlo. Como veis,
pues los resultados no son los mejores, pero sabiendo el ritmo al que se mueve todo en el
campo de la inteligencia artificial será cuestión de tiempo hasta que veamos pues una especie de
Dali, pero para objetos tridimensionales. ¿Quién sabe? Por cierto, ¿sabes con qué tarjeta han
entrenado los investigadores de este proyecto a cada una de las escenas Nerf que has visto?
Efectivamente, con una sola tarjeta RTX 3090 que ahora tú también puedes ganar. Sí, vuelvo a ser
yo el avatar. Y es que, chicos y chicas, la semana que viene vuelve a dar comienzo el evento GTC de
NVIDIA, un evento dedicado a hablar de todas sus novedades en áreas como la inteligencia
artificial, el hardware, computación avanzada para ciencia, gráficos por ordenador, de todo lo bueno.
Y es un eventazo al que podéis asistir online y gratis. Si os registráis tendréis acceso a un
montón de charlas de diferentes expertos de la industria y además el martes es el día especial
que tenéis que apuntar en el calendario y es que será cuando suceda la keynote principal de
Yen Sen Huan, el CEO de NVIDIA. Una charla que ya en ocasiones anteriores hemos visto en Twitch y
que es una auténtica pasada. Y, al igual que las otras veces, queremos hacer récord de asistencia,
así que el martes a esta hora nos vemos en Twitch. Además, estaremos sorteando créditos para acceder
a curso de pago de NVIDIA y, bueno, claro, la tarjeta gráfica. ¿Qué tienes que hacer en esta
ocasión para poder ganártela? Pues fácil y sencillo. Tres pasos. Primero, registrarte al
evento usando mi link. Lo tenéis abajo en la descripción. Segundo, tienes que ir a Twitter,
buscar este tweet promocional y darle a retweet. Y tercero, y esto es importante, la semana que
viene durante el GTC tendréis que acceder a alguna de las ponencias, acceder a la web de NVIDIA y
asistir a alguna de estas charlas. Por primera vez, estaremos mirando la asistencia porque queremos
que si alguien se lleva esta tarjeta, pues sea porque realmente le interesa este mundillo. Y
también importante, seguirme a mí, bueno, a mí no, al avatar, no, a Carlos, en Twitter e Instagram,
que es allí donde, como en ocasiones anteriores, pues estaremos avisando de los ganadores de la
tarjeta. Como siempre, muchas gracias a NVIDIA por contar con este canal y que empiece el GTC.
Y poco más, ya estaría. Si te ha gustado este vídeo, pues compártelo con tus amigos. Si te
gusta este canal, apóyalo en Patreon, a ver si Carlos coge ese dinero y contrata a un becario
humano de verdad. Y bueno, pues ya está, venga, dispersaos. Y de haber otros vídeos, que esto
tampoco es una feria, vale? Yo me quedo por aquí, tampoco puedo hacer mucho más. Estos vídeos de
aquí de la derecha están muy bien. La red neuronal de YouTube considera que te van a encantar. No me
puedo girar para verlos porque estoy un poco encorsetado, pero seguramente están muy bien.
Clica que te van a gustar. Y nada, yo me quedo por aquí hasta que me desconecten. Matadme, por favor.