Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Politécnica
Superior
Aplicación de
reconstrucción 3D
usando Nerf
Grado en Ingeniería Informática
Junio 2021
Aplicación de reconstrucción 3D usando
Nerf
Autor
Saúl Verdú Aparicio
Tutor/es
Miguel A. Cazorla Quevedo
Departamento de Ciencia de la Computación e Inteligencia Artificial
Francisco Gómez Donoso
Departamento de Ciencia de la Computación e Inteligencia Artificial
Escuela
Politécnica
Superior
Este trabajo no habría sido posible sin la ayuda y el apoyo incondicional de mi novia,
Paula Medina Cascales, quien ha estado a mi lado durante todo este trabajo. Gracias a ella
he conseguido superar muchos de los retos que se me han puesto por delante durante mi paso
por la UA.
También me gustaría agradecer a mi grupo de amigos (Team Rada Rada) y los amigos
que he conocido en la universidad, quienes me han visto pasar por toda la carrera hasta este
punto y han conseguido sacarme una sonrisa en los momentos duros. Aunque no me hayan
visto durante mucho tiempo por culpa de exámenes, trabajos o una pandemia siempre me
han esperado con los brazos abiertos.
No puedo terminar sin agradecer a mis familiares, quienes me impulsaron a dar el salto de
empezar una carrera y me animaron a conseguir todo lo que me propusiera en la vida. Sin
ellos no podría haber llegado hasta donde estoy hoy.
vii
Índice general
Agradecimientos v
1 Introducción 1
3 Metodología 7
3.1 Google Colaboratory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Google Drive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3 Open3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.4 Ploty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.5 NeRF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.6 NeRF-W . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.7 NeRFies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.8 Structure-from-Motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4 Desarrollo 13
4.1 Preparación de un dataSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2 Configuración de NeRFies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.3 Selección de cámaras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.4 Obtención de las nubes de puntos . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.5 Combinar las nubes de puntos . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5 Experimentacion 21
5.1 Primeras Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.2 Entrenamiento de NeRFies . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.3 Selección de las cámaras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.4 Aplicación de filtros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6 Conclusiones 27
Bibliografía 29
ix
Índice de figuras
xi
1 Introducción
El objetivo que se ha buscado conseguir mediante este trabajo es realizar una reconstrucción
3D con gran detalle de un rostro mediante imágenes 2D o vídeos capturados con cualquier
tipo de cámara haciendo uso de redes neuronales. El desarrollo de este trabajo se ha enfocado
en resolver o mejorar ciertos problemas que son habituales en los programas de reconstrucción
3D, como son la calidad y eficiencia.
En la actualidad cada vez se hace más uso de este tipo de modelados 3D. Existen muchos
métodos y variedades para conseguir hacer esto pero siempre poseen ciertas limitaciones ya
sea porque necesitan de hardware específico o un excesivo uso de computación, lo cual hace
que no esté al alcance de todo el mundo. Es por esto que consideramos que este proyecto es
tanto útil como importante, ya que gracias a esta solución cualquier persona que posea un
ordenador y una cámara digital podrá hacer una reconstrucción de rostro.
Las posibles aplicaciones de este modelo pueden ir enfocadas en los apartados multimedia
como videojuegos, películas, series… los cuales reducirían la inversión realizada para el mode-
lado de personajes. Al no tener un gran coste de entrada haría posible que empresas pequeñas
puedan utilizarlo para sus producciones. Otra de las posibles utilidades sería la inclusión en
el campo de la medicina, por ejemplo en aplicaciones para así poder darle más información a
los médicos sobre una lesión o golpes en el rostro.
1
2 Estado del Arte
Con el paso del tiempo la reconstrucción de rostros mediante imágenes 2D ha ido evolucio-
nando dando lugar a numerosas técnicas. En esta apartado se va a hacer un breve repaso de
algunas de las técnicas que se enfocan en esto, para así tener un contexto para el proyecto.
Unos de los métodos más utilizados para la reconstrucción de rostros en 3D son los deno-
minados métodos genéricos, estos son los que generalmente se basan en la construcción de
un modelo genérico para posteriormente deformarlos y así ajustarlos a la y las imágenes que
se le han suministrado como input. Para conseguir esto se hace uso de modelos faciales de
diferentes personas.
Este método se centra en encontrar una serie de puntos característicos dentro de las imáge-
nes para luego buscarlos en los modelos genéricos (tono del color de la piel, separación de los
ojos, tamaño de la nariz...). En estos métodos suele primar la eficiencia antes que la calidad
de reconstrucción, esto hace que la calidad de las reconstrucciones sea baja.
3
4 Estado del Arte
Tanto este como los siguientes métodos son estadísticos, es decir, se apoyan sobre diferentes
herramientas del campo de la probabilidad y la estadística. Este en concreto utiliza un modelo
estadístico lineal sobre la superficie del rostro humano para realizar la reconstrucción. Este
modelo estadístico usa el escaneo de una colección de 200 cabezas con las que se realizar
un análisis de los componentes principales. Gracias a este análisis se puede definir cualquier
rostro en función de unos valores.
Esta técnica es capaz de realizar una reconstrucción bastante fiel de la realidad en muy poco
tiempo. Sin embargo, presenta algunos problemas como la baja calidad de las reconstrucciones
o que solo está optimizado para la parte frontal de la cara.
3D Morphable Face Model (3DMFM) es una técnica de reconstrucción facial muy reco-
nocida debido a la gran calidad que poseen las reconstrucciones que esta hace. Esta se basa
en hacer usos de dos modelos estadísticos lineales, uno para generar la forma de la cara y
otro modelo estadístico para obtener la textura. Aparte, 3DMFM utiliza un modelo iterativo
para calcular y reducir el error que se posee en la reconstrucción con respecto a las imágenes
tomadas como input.
Debido a los diversos modelos que utiliza esta técnica, los resultados obtenidos poseen una
gran calidad de reconstrucción, pero los costes computacionales son demasiado elevados, ya
que requiere de bastantes iteraciones para conseguir una solución aceptable.
Como se ha podido observar, todos y cada uno de los métodos que existen en la actualidad
en el ámbito de la generación de rostros a partir de imágenes tienen limitaciones, de mayor o
menor rango, en cuanto a la calidad de la reconstrucción y/o en lo referente a la eficiencia del
modelo. Esto, aunque pueda parecer una desventaja, deja paso a otros investigadores para
poder desarrollar otros sistemas alternativos o simplemente implementar ciertas mejoras a
los ya existentes dentro de este campo de la informática.
3 Metodología
Dentro de este apartado se va a hacer mención de todas las herramientas que han sido
necesarias para la realización del proyecto, así como el proceso de desarrollo que se ha llevado
a cabo.
3.3 Open3D
Open3D es una librería de código abierto que permite hacer uso de estructuras de datos
y algoritmos sobre datos 3D tanto en C++ como en Python. Fue completado por Qian-Yi
Zhou, Jaesik Park y Vladlen Koltun. Open3D actualmente es compatible con las plataformas
Windows, OSX y Linux.
Esta librería permite un rápido desarrollo de software que trata con datos 3D, ya que posee
un backend altamente optimizado y preparado para hacer uso de la paralelización. En este
caso la utilizaremos para el tratamiento de nubes de puntos.
7
8 Metodología
3.4 Ploty
Ploty es una librería de código abierto que permita hacer gráficos de gran calidad. Esta
librería soporta más de 40 tipos distintos de gráficos que cubren una amplia gama de ca-
sos de uso estadístico, financiero geográfico científico y tridimensional. Ploty es una librería
compatible con Jupyter lo cual la hace excelente para ser usada en proyectos de Google Co-
laboratory. En nuestro caso lo utilizaremos para poder visualizar las nubes de puntos que
obtengamos.
Figura 3.2: Ejemplo de algunos de los gráficos que nos permite hacer Ploty
3.5 NeRF
Neural Radiance Fields (NeRF) es un método que consigue generar nuevas vistas de una
escena compleja utilizando un conjunto disperso de vistas de la escena. Esto se logra haciendo
uso de una red neuronal totalmente conectada (no convolucional), la cual sintetiza la función
de escena volumétrica subyacente en las vistas. La entrada para esta red neuronal es una
3.6. NeRF-W 9
coordenada 5D (ubicación espacial (x, y, z) y dirección de visualización (�, �)) y cuyo resultado
son los colores y densidad de la escena desde esa perspectiva.
Para conseguir renderizar una vista en concreto con NeRF se lanzan rayos desde la pers-
pectiva de la cámara que atraviesan la escena para generar un muestreo de puntos 3D, los
cuales se utilizarán junto con sus direcciones para entrenar a la red neuronal, que nos devuel-
ve densidades y colores, y por último mediante técnicas clásicas de renderizado de volúmenes
se juntan esas densidades y colores para formar una imagen 2D, que servirá para comprobar
el error de la red.
Los resultados de NeRF consiguen capturar de forma correcta toda la iluminación, pro-
fundidad y reflejos de la escena. Aunque NeRF parezca una gran revolución para el campo
de los gráficos por ordenador esta posee ciertas limitaciones, ya que es muy sensible a los
cambios de iluminación en una escena y al movimiento dentro de la misma. Es por ello que
si se quiere utilizar se deben tener cuidado con el dataset que se va a utilizar para entrenar.
3.6 NeRF-W
Dadas las limitaciones presentadas en NeRF, en Agosto de 2020 se presentó NeRF in the
wild (NeRF-W), una tecnología que se enfocó en mejorar los resultados obtenidos por NeRF,
para así poder entrenar con diferentes bancos de datos. Para ello hace uso de varios embed-
dings que le permiten controlar la sensibilidad a los cambios en la imagen. Gracias a esto,
10 Metodología
NeRF-W consigue resultados tan buenos como los ya vistos en NeRF tomando como input
imágenes con grandes cambios. A parte de todo esto NeRF-W al hacer uso de embeddings
permite la alteración de los mismos para poder variar parámetros de la escena, como por
ejemplo la iluminación, obteniendo así la misma escena en momentos distintos del día.
3.7 NeRFies
NeRFies es una tecnología que hace uso de NeRF y de los avances realizados por NeRF-W
para la reconstrucción de rostros en 3D de forma realista, convirtiéndose así en el primer
método capaz de realizar la reconstrucción hiperrealistas de un rostro tan solo utilizando
como input fotos o vídeos. NeRFies, con respecto a sus predecesores añade un filtro el cual
permite calcular la distorsión que sufre el objeto entre cada uno de los fotogramas, para así
poder corregir esta deformación de la imagen.
3.8. Structure-from-Motion 11
3.8 Structure-from-Motion
SfM es uno de los tantos métodos que existen a día de hoy para hacer la reconstrucción
de estructuras 3D. Esta técnica es considerada un método de alta resolución y bajo coste,
debido a que solo se necesita de una cámara y los resultados que ofrece son de una gran
calidad. En si este método busca realizar la reconstrucción 3D a partir de la superposición
de diferentes imágenes, al igual que en la fotogrametría. Sin embargo, en la fotogrametría se
requiere tener un conocimiento de la geometría y los parámetros extrínsecos e intrínsecos de
las cámaras, cosa que con SfM no es necesario, ya que calculan de forma automática. SfM
ha sido muy utilizada en los campos de la geología y de la ingeniería, para reconstrucción de
terreno, visión por ordenador, estudio de fósiles...
Para conseguir recuperar la escena 3D, SfM requiere hacer muchas imágenes de la escena
que tengan un alto grado de superposición. De cada una de ellas se hace una extracción
de puntos claves, estos son ciertas características distintivas de la imagen, a menudo son
esquinas o segmentos de línea, como podemos ver en la Figura 3.8. Estas características se
rastrean haciendo uso de algoritmos de detección. Algunos de los algoritmos más utilizados
son SIFT y SURF, ya que son rápidos y sencillos de aplicar. Después de haber obtenidos
todos los puntos claves se van rastreando las características de una imagen en otras para
hacer la estimación de los parámetros intrínsecos y extrínsecos de las cámaras en función de
un sistema de coordenadas genérico. Por último se genera un mapa de profundidad de cada
una de las imágenes y se superponen entre ellos siguiendo la posición y orientación de la
cámara correspondiente, como se puede apreciar en la Figura 3.9.
12 Metodología
Para poder trabajar con NeRFies es necesario crear un dataset compuesto por las imágenes
que queramos utilizar para entrenar a la red y la posición de la cámara de cada una de
las imágenes. Si se desea hacer esto de forma sencilla, los creadores de NeRFies tienen un
notebook1 de Google Colaboratory donde se crea paso a paso un dataset utilizando un vídeo,
en el que se mueva la cámara alrededor del rostro a una distancia constante.. En caso contrario,
si deseamos crear el dataset a mano deberemos obtener un mínimo de 100 imágenes de partes
distintas del rostro. Se recomienda tomar las fotos a una distancia entre los 60 y 70 cm de la
cara.
Una vez hecho esto se deberán sacar los valores relativos a la escena. Para conseguirlo
deberemos aplicar SfM, una técnica que nos devuelve como resultado una reconstrucción
tridimensional de la escena y los datos intrínsecos y extrínsecos de las imágenes. En esta
técnica primeramente se detectan y extraen los puntos característicos de cada una de las
imágenes aplicando un detector de características, como sería por ejemplo SIFT. Después se
hacen coincidir las características entre imágenes. Y por último, se hace la reconstrucción de
la escena, para ello se toma un par de fotos, se triangulan las posiciones de los puntos y se
va registrando gradualmente los puntos del resto de imágenes.
Todos estos datos se deberán almacenar con la estructura de directorios de la Figura 4.1.
Dentro de la carpeta cámara se deberán introducir toda la información de cada una de las
imágenes (identificadas cada una por su id). La carpeta camera-path se usa para almacenar la
información de las cámaras que queramos utilizar para hacer pruebas o renderizar un vídeo.
En la carpeta rgb se almacenarán subcarpetas con las imágenes que vamos a utilizar (en
formato PNG por defecto) que indican la escala a la que están las imágenes. En el fichero
metadata.json se almacenan los ids de los embedding de deformación y apariencia, y el id
para conjuntos de datos de plataformas de validación. Scene.json debe contener los valores
de escala, cercanía, lejanía y la posición del origen de la escena. En el fichero dataset.json
1
https://colab.research.google.com/github/google/nerfies/blob/main/notebooks/Nerfies_Capture
_Processing.ipynb
13
14 Desarrollo
se guardan los datos del entrenamiento y la validación, es decir, el número de imágenes que
tiene el dataset, el número de ejemplos que se van a usar para entrenar, una lista con los ids
del dataset, una segunda lista con los ids de las imágenes que se van a utilizar para entrenar y
una lista con los ids de las imágenes que se van a utilizar para validar. Por último, points.npy
es un archivo numpy que contiene una matriz de tamaño (N,3) que contiene los puntos del
background. Tenemos un ejemplo de cada uno de estos ficheros en Github2 de NeRFies.
2
https://github.com/google/nerfies
4.2. Configuración de NeRFies 15
A la hora de entrenar es necesario indicar algunos de los parámetros del modelo, para ello
el equipo de NeRFies ha proporcionado una serie de preconfiguraciones que podemos utilizar,
estas son:
• gpu_fullhd.gin: Está pensada para ser utilizada con 8 GPUs simultaneamente y utili-
zar imágenes de 1920x1080 pixels. Para que los resultados de esta configuración sean
óptimos el equipo de NeRFies ha estimado que se requieren de 3 días de entrenamiento.
• gpu_quarterhd_4gpu.gin: Esta posee los mismos valores que la anterior, la única dife-
rencia entre ambas es que en esta se ha indicado que se utilicen tan solo 4 GPUs.
• test_local.gin y test_vrig: Estas dos nos sirven para hacer pruebas y comprobar que
funciona correctamente Nerfies. Los resultados que ofrecen no son muy buenos pero
sirven para saber si no ha habido errores durante el entrenamiento.
Por otro lado, si se desea crear una configuración, primeramente deberemos importar el
16 Desarrollo
Variable Descripción
max_steps Sirve para indicar el numero máximo de iteraciones que per-
mitimos.
image_scale Escala que se va a utilizar para el entrenar.
batch_size Tamaño del conjunto de que se va a usar en el entrenamiento.
TrainConfig.print_every Cada cuanto queremos que se muestre un resultado del en-
trenamiento.
TrainConfig.save_every Cada cuanto queremos que se guarden los datos del entre-
namiento.
Una vez se haya entrenado NeRFies deberemos seleccionar las posiciones de cámara que
vamos a utilizar para hacer la reconstrucción. Para ello se van a tener que definir cada
cámara en función del sistema de coordenadas que se ha establecido con SfM en el dataset.
En nuestro caso, para obtener cada posición, primeramente hemos utilizado los valores de una
cámara del dataset que se encontrara cerca a la posición que nosotros buscábamos, y luego
hemos ido variando la posición y orientación hasta colocarla en el ángulo deseado. Para el
proyecto se han utilizado 3 cámaras, colocadas como se ve reflejado en la Figura 4.6, aunque
si se desea se pueden elegir tantas cámaras como se quiera. Cuanto mayor sea el número de
cámaras que utilicemos mejor será la reconstrucción final, pero tardará un mayor tiempo en
ser procesado. Hemos considerado que poner tres cámaras era lo idóneo, ya que el resultado
de la reconstrucción es bueno y de esta forma el tiempo que se tarda en procesar las vistas
no es excesivo. Hay que recalcar que las poses que se establecen en este paso no existen en
el dataset, es decir, que será el modelo entrenado el que genere las imágenes y los mapas de
profundidad correspondientes a estas tres vistas.
Ya con las cámaras seleccionadas se deben obtener las nubes de puntos correspondientes.
Para ello, lo primero que tenemos que hacer es generar la imagen RGB y el mapa de profun-
didad correspondiente a cada cámara.. Una forma de obtener estos datos sería hacer uso de
la función de renderización render_image() que trae integrada NeRFies, la cual ejecuta el sis-
tema ya entrenado para generar los píxeles de una imagen y calcular el valor de profundidad
4.4. Obtención de las nubes de puntos 17
Una vez se hayan obtenido las nubes de puntos correspondientes es conveniente realizar un
filtrado. En este filtrado se seleccionaron los puntos que forman parte de la nube que no van
a ser relevantes para la reconstrucción. Para el proyecto se han utilizado dos tipos distintos
de filtrados. El primero de los filtros ha sido Statistical Outlier Removal, el cual se centra
en eliminar los puntos que estén más separados de sus vecinos. Esto se consigue marcando
una distancia media y número mínimo de vecinos, es decir, todo aquel punto que no tenga
el mínimo de vecinos o tenga una distancia promedio a sus vecinos mayor que el límite se
elimina. Cuanto mayor sea el número de vecinos y menor sea la distancia límite, este filtro
será más restrictivo. Gracias a este filtro se han conseguido eliminar los puntos dispersos que
se encuentran en la nube y que son claramente fruto de errores de estimación, como podemos
apreciar en la Figura 4.8a. El otro método que hemos utilizado para eliminar puntos ha sido
aplicar un filtro de corte, en el que creamos un volumen delimitador, en nuestro caso en la
18 Desarrollo
zona de la cabeza, para luego eliminar los puntos que se encontraban fuera de estos límites.
El resultado de este filtro se puede ver aplicado en la Figura 4.8b. El haber aplicado estos
filtros ha servido para obtener unas nubes de puntos más limpias, esto se traduce en una
mejor reconstrucción de rostros y en la eliminación del ruido dentro de la reconstrucción.
Cuando hayamos obtenido las diferentes nubes de puntos solo quedará combinarlas entre
ellas para generar la reconstrucción final. El proceso que hemos seguido para unir las nubes
de puntos consta de dos partes. En la primera parte hemos generado la matriz de transfor-
mación correspondientes a cada una de las nubes de puntos y las hemos aplicado. Esta es
una matriz 4x4 con la estructura que se puede ver en la Figura 4.9 y sirve para definir una
serie de rotaciones y traslaciones que se le van aplicar a toda la nube de puntos en base a
los parámetros extrínsecos de la cámara. Utilizamos esta matriz para registrar las nubes de
puntos con respecto al eje de coordenadas establecido con SfM. Esto produce una fusión de
las nubes de puntos aproximada, pero no perfecta, ya que las nubes de puntos son estimadas
y tienen cierto error. La segunda parte del proceso, orientada a mejorar el registro final de
las nubes, consiste en la aplicación de Iterative Closest Points (ICP). Éste es un método ite-
rativo que sirve para para alinear de forma parcial (total en el mejor de los casos) dos nubes
de puntos, como se puede ver en la Figura 4.10. En cada una de las iteraciones de ICP se
emparejan los puntos de la nube origen con los puntos más cercanos de la nube de puntos
de referencia, se estiman las transformaciones (rotación + traslación) haciendo uso de esos
emparejamientos utilizando un enfoque de mínimos cuadrados y se aplica la transformación
sobre la escena. El resultado que se obtiene de aplicar la matriz de transformación y ICP son
dos nubes con todos sus puntos orientados correctamente según su la posición de su cámara.
Para acabar de unir las nubes de puntos tan solo tenemos que acumular sus puntos en una
única nubes.
4.5. Combinar las nubes de puntos 19
En este capítulo se van a explicar todos los experimentos que se han llevado a cabo du-
rante el desarrollo del proyecto. Para cada experimento se explicarán los parámetros se han
utilizado, así como los resultados que se han obtenido.
Al ser NeRFies una nueva tecnología se han tenido que realizar una serie de pruebas para
comprobar cómo funcionaba, antes de poder usarla para el proyecto. Para estas primeras
pruebas se utilizó un vídeo en el que no se controló la estética de la escena. Se utilizó la
configuración que NeRFies traía por defecto y se dejó entrenar durante unas 20000 iteraciones.
En la Figura 5.1 se pueden observar los resultados que obtuvimos tras renderizar varias de
las vistas.
Como se puede observar los resultados son aceptables pero se genera una ligera distorsión
cerca de los ojos. De la misma forma NeRFies coloca las cámara muy bajas debido a la
perspectiva desde donde se ha grabado el vídeo. Cabe recalcar que estos han sido los peores
resultados ya que ha sido la vez que menos hemos dejado que entrene NeRFies. Gracias a
este experimento pudimos deducir que el vídeo o las imágenes que se vayan a utilizar para
21
22 Experimentacion
entrenar deben de estar tomados desde una distancia mayor de 30cm y que si la persona que
se está usando de modelo se mueve (es decir, girar los ojos, mover la nariz, abrir la boca,
etc.) entre cada una de las imágenes generará una distorsión en el resultado.
La siguiente de las pruebas que se realizó consistió en determinar los parámetros óptimos
para obtener modelos de alta calidad. Para ello se probaron diferentes vídeos, en los que se
variaron la cantidad de imágenes utilizadas y el número de iteraciones que entrenaba NeRFies.
El primero de los vídeos que se utilizó tenía una duración de unos 15 segundos del que se
sacaron 80 fotogramas diferentes. Debido al bajo número de imágenes que se tenían no se
pudo entrenar. A partir de esto se utilizaron vídeos de más de 20 segundos de duración para
hacer las próximas pruebas. Los siguientes vídeos que se usaron fueron de 30 y 45 segundos de
los cuales se utilizaron alrededor de 100 fotogramas. Los resultados de ambos vídeos fueron
satisfactorios, como se puede ver en la Figura 5.2, esto nos indica que a partir de las 100
imágenes NeRFies puede conseguir arrojar buenos resultados.
Figura 5.3: Resultados del entrenamiento con 10000, 20000 y 50000 respectivamente.
Otro de los parámetros con los que se experimentó durante la prácticas fueron las cámaras
que se utilizaron para hacer la reconstrucción. Este experimento fue necesario para poder
determinar el número de cámaras mínimo que son necesarias para que se pueda hacer una
reconstrucción por medio de este método, así como para ver cómo evoluciona la reconstrucción
en función del número de cámaras que se usase.
De partida utilizamos 3 cámaras para hacer la reconstrucción de rostros, dos que apuntan
a los perfiles de la cara y una que apunte directamente a la cara. La reconstrucción realizada
con estas tres cámaras daba unos resultados aceptables pero sufrían de pequeños conflictos
por la parte frontal.
Tras haber obtenido las nubes de puntos se tuvo que hacer un filtrado de puntos para
poder tener así una imagen más clara del rostro. Para esto se necesitaron dos tipos de filtros
diferentes, el primero de ellos tenía que eliminar los puntos que se encontraban dispersos
dentro de la nube de puntos, y otro que nos sirviera para eliminar todo el contenido de la
escena que no fuese relevante.
Los métodos de filtrado con los que se experimentó para eliminar los puntos dispersos
fueron, Radius Outlier Removal, el cual elimina los puntos que no alcancen a tener un número
n de vecinos en un determinado radio, y Statistical Outlier Remove que elimina los puntos
que no tienen vecinos a partir de cierta distancia. Debido a los mejores resultados obtenidos
se optó por utilizar Statistical Outlier Remove para la eliminación de los puntos dispersos.
Para ello se utilizo un numero mínimo de vecinos de 30 a una distancia de 2 unidades del
sistema de coordenadas, el resultado se puede ver en la Figura 5.6.
Para obtener la sección de la cabeza de la nube de puntos utilizamos una función de corte
para nube de puntos que venía incluida en Open3D, en la que poniendo las coordenadas de
una sección se realizaba un corte alrededor de ese área. Según el sistema de coordenadas se
creo un bounding box con unos valores mínimos de (-9, -9, 0) y (9, 0.000007, 0.000272), esto
nos dio como resultado lo que aparece en la Figura 5.7
Para concluir, en este apartado vamos a hacer un breve repaso sobre lo que hemos desa-
rrollado a lo largo de todo el proyecto. También se van a comentar algunas posibles futuras
mejoras o cambios que se pueden hacer a futuro.
Estos son algunos de los objetivos que hemos conseguido alcanzar durante la práctica:
• Se ha conseguido entender y adaptar una nueva herramienta del campo del Deep Lear-
ning como es NeRFies.
• Se ha aprendido a analizar y adaptar un dataset con el fin de que consiga sacar los
mejores resultados posibles.
• Se han adquirido conocimientos sobre los campos del renderizado por ordenador y las
nubes de puntos.
Por otro lado las posibles mejoras que se pueden llevar a cabo de cara al futuro en relación
con este proyecto son:
• Se podría añadir una red neuronal que ayude a combinar de mejor forma las nubes de
puntos, ya que los métodos utilizados en este proyecto han dejado resultados no muy
buenos.
• Realizar un estudio sobre los embeddings que utiliza nerfies para así optimizarlos.
27
Bibliografía
Martin-Brualla, R., Radwan, N., Sajjadi, M. S., Barron, J. T., Dosovitskiy, A., y Duckworth,
D. (2020). Nerf in the wild: Neural radiance fields for unconstrained photo collections.
arXiv preprint arXiv:2008.02268.
Mildenhall, B., Srinivasan, P. P., Tancik, M., Barron, J. T., Ramamoorthi, R., y Ng, R.
(2020). Nerf: Representing scenes as neural radiance fields for view synthesis. En European
conference on computer vision (pp. 405–421).
Park, K., Sinha, U., Barron, J. T., Bouaziz, S., Goldman, D. B., Seitz, S. M., y Brualla, R.-M.
(2020). Deformable neural radiance fields. arXiv preprint arXiv:2011.12948.
Rybkin, O. (2021). The reasonable ineffectiveness of pixel metrics for future pre-
diction. https://medium.com/@olegrybkin_20684/the-reasonable-ineffectiveness-of-mse-
pixel-loss-for-future-prediction-and-what-to-do-about-it-4dca8152355d. ([Online; accessed
30-Mayo-2021])
29
30 Bibliografía
San Tan, J., Venkat, I., Liao, I. Y., De Wilde, P., y Broga, J. (2016). General human traits
oriented generic elastic model for 3d face reconstruction. En Bmvc.
Tomás-Jover, R., Guill, A. J. R., González, M. C., Fernández, A. A., y Jordá, L. (2016).
Structure from motion (sfm): una técnica fotogramétrica de bajo coste para la caracte-
rización y monitoreo de macizos rocosos. En Reconocimiento, tratamiento y mejora del
terreno: 10º simposio nacional de ingeniería geotécnica: A coruña, 19, 20 y 21 de octubre
de 2016 (pp. 209–216).
yodayoda. (2021). From depth map to point cloudfrom depth map to point cloud.
https://medium.com/yodayoda/from-depth-map-to-point-cloud-7473721d3f. ([Online; ac-
cessed 27-Mayo-2021])
Lista de Acrónimos y Abreviaturas
31