Varias sugerencias para entrenar el modelo NeRF

Original: instant-ngp/nerf_dataset_tips

Para los estudiantes que no están familiarizados con NeRF, se recomienda aprender primero la generación de contenido 3D basada en NeRF.

Los parámetros iniciales de la cámara que debemos implementar se proporcionan en transforms.json, y el formato es compatible con NeRF: Neural Radiance Fields . Con este fin, proporcionamos scripts/colmap2nerf.py para facilitar estas tareas. Puede usarse para procesar video o secuenciar imágenes y obtener los datos necesarios basados ​​en el método de adquisición de movimiento COLMAP de código abierto.

El proceso de entrenamiento es muy exigente con los datos. Para obtener buenos resultados, no puede contener datos mal etiquetados y no puede contener marcos borrosos (sin desenfoque de movimiento o desenfoque fuera de foco). Este artículo intenta dar algunas sugerencias. Una buena la pauta es si en Si su modelo no ha convergido en 20 segundos, incluso el entrenamiento durante más tiempo no producirá mejores resultados. Por lo tanto, recomendamos ajustar los datos al principio para obtener resultados satisfactorios. La mayor parte de la convergencia se produce en los primeros segundos.

El problema más común con los conjuntos de datos es la escala o el desplazamiento incorrectos de la posición de la cámara. Consulte a continuación para obtener más detalles. Otro problema común es muy pocas imágenes o imágenes con parámetros de cámara inexactos (por ejemplo, si COLMAP falla). En este caso, es posible que deba adquirir más imágenes o ajustar el proceso de cálculo de la posición de la cámara, que (falla colmap) está más allá del alcance de este artículo.

Conjunto de datos existente

De forma predeterminada ,  la implementación NeRF de instant-ngp solo realiza pasos de rayo a través de los cuadros delimitadores de unidades de [0,0,0] a [1,1,1]. De forma predeterminada, el cargador de datos lee la matriz de transformación de la cámara en el archivo JSON de entrada y escala la posición en 0,33 y el desplazamiento [0,5, 0,5, 0,5] para asignar el origen de los datos de entrada al centro de este cubo. Los factores de escala se eligieron para ajustarse al conjunto de datos sintéticos en el documento NerF original, así como a la salida de nuestro script script/colmap2nerf.py .

Es necesario comprobar la alineación de la cámara con este cuadro delimitador marcando "Visualizar cámara" y "Visualizar cubo de unidad" en el resumen "Depurar visualización" de la interfaz de usuario, de la siguiente manera:

Para escenas naturales donde el fondo es visible fuera del cubo de la unidad, es necesario configurar los parámetros en el archivo con potencias de aabb_scale2 a 128 (es decir, 1, 2, 4, 8... 128). Consulte data/nerf/fox/transforms.json para ver un ejemplo .

El efecto se puede ver en la siguiente imagen:

La cámara todavía está algo centrada en el "objeto de interés" dentro de la unidad cúbica; sin embargo, el parámetro aabb_scale (aquí establecido en 16) hace que la implementación de NeRF realice un trazado de rayos en un cuadro delimitador más grande (longitud lateral 16), que contiene el centrado elemento de fondo

Aumente los conjuntos de datos existentes

Si ya tiene un conjunto de datos transforms.json, debe estar centrado y en una escala similar al conjunto de datos sintéticos NeRF original. Cuando lo carga en NGP, si encuentra que no está convergiendo, lo primero que debe verificar es la posición de la cámara en relación con el cubo de la unidad, utilizando la función de depuración anterior. Si el conjunto de datos no cae principalmente en el cubo de la unidad, vale la pena moverlo a ese cubo de la unidad. Puede hacer esto modificando la propia transformación o agregando parámetros globales al ámbito externo del json.

Puede configurar cualquiera de los siguientes parámetros, los valores enumerados son valores predeterminados.

{ 
	"aabb_scale": 16, 
	"escala": 0,33, 
	"compensación": [0,5, 0,5, 0,5], 
	...	 
}

Ver nerf_loader.cu para detalles de implementación y otras opciones .

Preparar un nuevo conjunto de datos NeRF

Asegúrese de tener  COLMAP instalado y disponible en su PATH. Si está utilizando archivos de video como entrada, asegúrese de que  FFmpeg esté instalado  y disponible en su RUTA. Para verificar si este es el caso, desde una ventana de terminal, debería poder ejecutar y ver un texto de ayuda para cada ventana.colmapffmpeg -?

Si entrena desde un archivo de video, ejecute  el script scripts/colmap2nerf.py desde la carpeta que contiene el video con los siguientes parámetros sugeridos  :

data-folder$ python [path-to-instant-ngp]/scripts/colmap2nerf.py --video_in <filename of video> --video_fps 2 --run_colmap --aabb_scale 16

Lo anterior asume un solo archivo de video como entrada y luego extrae fotogramas a una velocidad de fotogramas especificada (2). Se recomienda elegir una velocidad de cuadro que produzca aproximadamente 50-150 imágenes. Entonces, para un video de un minuto, --video_fps 2sí.

Para entrenar a partir de imágenes, colóquelas en una carpeta llamada imágenes y use las opciones apropiadas como esta:

data-folder$ python [path-to-instant-ngp]/scripts/colmap2nerf.py --colmap_matcher exhaustive --run_colmap --aabb_scale 16

El script ejecutará FFmpeg y/o COLMAP según sea necesario, luego realizará transforms.jsonel paso de conversión al formato deseado, que se escribirá en el directorio actual.

De forma predeterminada, la secuencia de comandos llama a colmap con un "comparador secuencial" que funciona en imágenes tomadas desde trayectorias de cámara que varían suavemente, como en el video. Un comparador exhaustivo es más apropiado si las imágenes no están en un orden particular, como en el ejemplo de imagen anterior. Para obtener más opciones, hay scripts de ejecución disponibles. Para usos más avanzados de COLMAP o escenarios desafiantes, consulte la documentación de COLMAP ; es posible que deba modificar el script script/colmap2nerf.py.

aabb_scaleLos parámetros son instant-ngplos parámetros específicos más importantes. Especifica la extensión de la escena, que por defecto es 1; es decir, la escena se escala para que la distancia promedio de la posición de la cámara desde el origen sea 1 unidad. Para escenarios sintéticos pequeños (como el conjunto de datos NeRF original), aabb_scaleel valor predeterminado de 1 es ideal, lo que resulta en el entrenamiento más rápido. El modelo NeRF asume que las imágenes de entrenamiento son totalmente explicables por la escena contenida en este cuadro delimitador. Sin embargo, para escenas naturales donde el fondo excede este cuadro delimitador, el modelo NeRF tendrá problemas y puede producir "flotadores" alucinatorios en los límites del cuadro. Configurándolo aabb_scalea una potencia mayor de 2 (hasta una potencia de 16), el modelo NeRF expandirá los rayos a un cuadro delimitador más grande. Tenga en cuenta que esto puede afectar ligeramente la velocidad de entrenamiento. En caso de duda, para escenas naturales, comience con 16 y redúzcalo tanto como sea posible. El valor se puede editar directamente en el archivo de salida transforms.jsonsin volver a ejecutar  el script scripts/colmap2nerf.py  . ​​​​​​​​

Suponiendo que tenga éxito, ahora puede entrenar un modelo NeRF de la siguiente manera, comenzando desde la carpeta:

instant-ngp$ ./build/testbed --mode nerf --scene [path to training data folder containing transforms.json]

Sugerencias de datos de entrenamiento NeRF

El modelo NeRF es el más adecuado para 50-150 imágenes que muestran un movimiento de escena mínimo, desenfoque de movimiento u otros artefactos de desenfoque. La calidad de la reconstrucción depende de que COLMAP pueda extraer parámetros precisos de la cámara de la imagen. Consulte la sección anterior para saber cómo verificar esto.

El script colmap2nerf.pyasume que todas las imágenes de entrenamiento apuntan aproximadamente a un punto de interés compartido, que se encuentra en el origen. El punto se encuentra tomando un promedio ponderado de los puntos de proximidad más cercanos entre los rayos para el píxel central de todos los pares de imágenes de entrenamiento. En la práctica, esto significa que el script funciona mejor cuando las imágenes de entrenamiento se capturan apuntando al objeto de interés, aunque no es necesario que completen la vista completa de 360 ​​grados. Como arriba, si se establece aabb_scaleen un número mayor que 1, se reconstruirá cualquier fondo visible detrás del objeto de interés.

Supongo que te gusta

Origin blog.csdn.net/minstyrain/article/details/124904045
Recomendado
Clasificación