¿Quién debería leer este artículo?
Este artículo tiene como objetivo proporcionar una comprensión básica, a nivel principiante, del funcionamiento de NeRF a través de representaciones visuales. Si bien varios blogs ofrecen explicaciones detalladas de NeRF, estos suelen estar dirigidos a lectores con una sólida formación técnica en renderizado de volúmenes y gráficos 3D. Por el contrario, este artículo busca explicar NeRF con un conocimiento previo mínimo, con un fragmento técnico opcional al final para lectores curiosos. Para aquellos interesados en los detalles matemáticos detrás de NeRF, al final se proporciona una lista de lecturas adicionales.
¿Qué es NeRF y cómo funciona?
NeRF, abreviatura de Campos de radiación neuronales un artículo de 2020 que presenta un método novedoso para renderizar imágenes 2D a partir de escenas 3D. Los enfoques tradicionales se basan en técnicas computacionales intensivas basadas en la física, como la proyección de rayos y el trazado de rayos. Estos implican rastrear un rayo de luz desde cada píxel de la imagen 2D hasta las partículas de la escena para estimar el color del píxel. Si bien estos métodos ofrecen alta precisión (por ejemplo, las imágenes capturadas por las cámaras de los teléfonos se aproximan mucho a lo que el ojo humano percibe desde el mismo ángulo), a menudo son lentos y requieren importantes recursos computacionales, como GPU, para el procesamiento paralelo. Como resultado, implementar estos métodos en dispositivos periféricos con capacidades informáticas limitadas es casi imposible.
NeRF aborda este problema funcionando como un método de compresión de escenas. Utiliza un perceptrón multicapa (MLP) sobreajustado para codificar información de la escena, que luego se puede consultar desde cualquier dirección de visualización para generar una imagen renderizada en 2D. Cuando se entrena adecuadamente, NeRF reduce significativamente los requisitos de almacenamiento; por ejemplo, una escena 3D simple normalmente se puede comprimir en aproximadamente 5 MB de datos.
En esencia, NeRF responde a la siguiente pregunta utilizando un MLP:
¿Qué veré si veo la escena desde esta dirección?
Esta pregunta se responde proporcionando la dirección de visualización (en términos de dos ángulos (θ, φ), o un vector unitario) al MLP como entrada, y MLP proporciona RGB (color emitido direccional) y densidad de volumen, que luego se procesa a través de renderizado volumétrico para producir el valor RGB final que ve el píxel. Para crear una imagen de una determinada resolución (digamos HxW), se consulta el MLP HxW veces para la dirección de visualización de cada píxel y se crea la imagen. Desde el lanzamiento del primer artículo de NeRF, se han realizado numerosas actualizaciones para mejorar la calidad y la velocidad de renderizado. Sin embargo, este blog se centrará en el artículo original de NeRF.
Paso 1: imágenes de entrada de vistas múltiples
NeRF necesita varias imágenes desde diferentes ángulos de visión para comprimir una escena. MLP aprende a interpolar estas imágenes para direcciones de visualización invisibles (vistas novedosas). La información sobre la dirección de visión de una imagen se proporciona utilizando las matrices intrínsecas y extrínsecas de la cámara. Cuantas más imágenes abarquen una amplia gama de direcciones de visualización, mejor será la reconstrucción NeRF de la escena. En resumen, el NeRF básico toma imágenes de cámara de entrada y sus matrices intrínsecas y extrínsecas de cámara asociadas. (Puede obtener más información sobre las matrices de cámara en el blog a continuación)
Paso 2 a 4: muestreo, iteración de píxeles y transmisión de rayos
Cada imagen de las imágenes de entrada se procesa de forma independiente (en aras de la simplicidad). A partir de la entrada, se muestrean una imagen y sus matrices de cámara asociadas. Para cada píxel de la imagen de la cámara, se traza un rayo desde el centro de la cámara hasta el píxel y se extiende hacia afuera. Si el centro de la cámara se define como o, y la dirección de visión como el vector direccional d, entonces el rayo r