Bernhard Kerbl*, Georgios Kopanas*, Thomas Leimkühler, George Drettakis (* indica contribución igual)
| Página web | Artículo completo | Vídeo | Otras publicaciones de GRAPHDECO | Página del proyecto FUNGRAPH |
| T&T+DB COLMAP (650MB) | Modelos previamente entrenados (14 GB) | Visores para Windows (60 MB) | Imágenes de evaluación (7 GB) |
Este repositorio contiene la implementación oficial de los autores asociada con el artículo "3D Gaussian Splatting for Real-Time Radiance Field Rendering", que se puede encontrar aquí. Además, proporcionamos las imágenes de referencia utilizadas para crear las métricas de error informadas en el artículo, así como modelos previamente entrenados creados recientemente.
Resumen: Los métodos de Radiance Field han revolucionado recientemente la síntesis de vistas novedosas de escenas capturadas con múltiples fotos o videos. Sin embargo, lograr una alta calidad visual todavía requiere redes neuronales cuyo entrenamiento y renderizado son costosos, mientras que los métodos recientes más rápidos inevitablemente sacrifican velocidad por calidad. Para escenas ilimitadas y completas (en lugar de objetos aislados) y renderizado con resolución de 1080p, ningún método actual puede lograr velocidades de visualización en tiempo real. Introducimos tres elementos clave que nos permiten lograr una calidad visual de vanguardia mientras mantenemos tiempos de entrenamiento competitivos y, lo que es más importante, permitimos una síntesis de vistas novedosas de alta calidad en tiempo real (≥ 30 fps) con una resolución de 1080p. Primero, a partir de puntos dispersos producidos durante la calibración de la cámara, representamos la escena con gaussianos 3D que preservan las propiedades deseables de los campos de radiación volumétricos continuos para la optimización de la escena y al mismo tiempo evitan cálculos innecesarios en el espacio vacío; En segundo lugar, realizamos optimización entrelazada/control de densidad de los gaussianos 3D, optimizando notablemente la covarianza anisotrópica para lograr una representación precisa de la escena; En tercer lugar, desarrollamos un algoritmo de renderizado rápido consciente de la visibilidad que admite salpicaduras anisotrópicas y acelera el entrenamiento y permite el renderizado en tiempo real. Demostramos calidad visual de última generación y renderizado en tiempo real en varios conjuntos de datos establecidos.
@Article{kerbl3Dgaussians, author = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{"u}hler, Thomas and Drettakis, George}, title = {3D Gaussian Splatting for Real-Time Radiance Field Rendering}, journal = {ACM Transactions on Graphics}, number = {4}, volume = {42}, month = {July}, year = {2023}, url = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/} }
Esta investigación fue financiada por la subvención ERC Advanced FUNGRAPH No 788065. Los autores agradecen a Adobe por las generosas donaciones, la infraestructura OPAL de la Université Côte d'Azur y los recursos HPC de GENCI – IDRIS (Subvención 2022-AD011013409). Los autores agradecen a los revisores anónimos por sus valiosos comentarios, a P. Hedman y A. Tewari por corregir borradores anteriores y a T. Müller, A. Yu y S. Fridovich-Keil por ayudar con las comparaciones.
Tenemos recursos limitados para mantener y actualizar el código. Sin embargo, hemos agregado algunas características nuevas desde el lanzamiento original que están inspiradas en algunos de los excelentes trabajos que muchos otros investigadores han estado haciendo en 3DGS. Agregaremos otras funciones dentro de la capacidad de nuestros recursos.
Actualización de octubre de 2024 : integramos la aceleración de la velocidad del entrenamiento y la hicimos compatible con la regularización de profundidad, el suavizado y la compensación de exposición. Hemos mejorado el visor en tiempo real de SIBR corrigiendo errores y agregando funciones en la Vista superior que permiten la visualización de las cámaras de entrada y de usuario.
Actualización de primavera de 2024 : Orange Labs ha agregado amablemente compatibilidad con OpenXR para visualización en realidad virtual.
Jonathan Stephens hizo un fantástico tutorial paso a paso para configurar Gaussian Splatting en su máquina, junto con instrucciones para crear conjuntos de datos utilizables a partir de videos. Si las instrucciones a continuación son demasiado secas para usted, continúe y compruébelo aquí.
El usuario camenduru tuvo la amabilidad de proporcionar una plantilla de Colab que utiliza la fuente de este repositorio (estado: ¡agosto de 2023!) para un acceso rápido y fácil al método. Por favor compruébalo aquí.
El repositorio contiene submódulos, así que compruébelo con
# Clon de SSHgit [email protected]:graphdeco-inria/gaussian-splatting.git --recursivo
o
# Clon HTTPSgit https://github.com/graphdeco-inria/gaussian-splatting --recursive
El código base tiene 4 componentes principales:
Un optimizador basado en PyTorch para producir un modelo gaussiano 3D a partir de entradas SfM
Un visor de red que permite conectarse y visualizar el proceso de optimización.
Un visor en tiempo real basado en OpenGL para representar modelos entrenados en tiempo real.
Un script que le ayudará a convertir sus propias imágenes en conjuntos de datos SfM listos para la optimización
Los componentes tienen diferentes requisitos tanto de hardware como de software. Han sido probados en Windows 10 y Ubuntu Linux 22.04. Las instrucciones para configurar y ejecutar cada uno de ellos se encuentran en las secciones siguientes.
El optimizador utiliza extensiones PyTorch y CUDA en un entorno Python para producir modelos entrenados.
GPU preparada para CUDA con capacidad informática 7.0+
24 GB de VRAM (para entrenar la calidad de la evaluación en papel)
Consulte las preguntas frecuentes para configuraciones de VRAM más pequeñas
Conda (recomendado para una fácil configuración)
Compilador C++ para extensiones PyTorch (usamos Visual Studio 2019 para Windows)
CUDA SDK 11 para extensiones de PyTorch, instálelo después de Visual Studio (usamos 11.8, problemas conocidos con 11.6 )
El compilador de C++ y el SDK de CUDA deben ser compatibles
Nuestro método de instalación predeterminado proporcionado se basa en la gestión de entornos y paquetes de Conda:
SET DISTUTILS_USE_SDK=1 # Windows onlyconda env create --file Environment.yml conda activar gaussian_splatting
Tenga en cuenta que este proceso supone que tiene instalado CUDA SDK 11 , no 12 . Para modificaciones, consulte a continuación.
Consejo: Descargar paquetes y crear un nuevo entorno con Conda puede requerir una cantidad significativa de espacio en disco. De forma predeterminada, Conda utilizará el disco duro principal del sistema. Puede evitar esto especificando una ubicación de descarga de paquetes diferente y un entorno en una unidad diferente:
conda config --add pkgs_dirs/ conda env create --file Environment.yml --prefix / /gaussian_splatting conda activar / /gaussian_splatting
Si puede permitirse el espacio en disco, le recomendamos utilizar nuestros archivos de entorno para configurar un entorno de formación idéntico al nuestro. Si desea realizar modificaciones, tenga en cuenta que los cambios importantes en la versión pueden afectar los resultados de nuestro método. Sin embargo, nuestros experimentos (limitados) sugieren que el código base funciona bien dentro de un entorno más actualizado (Python 3.8, PyTorch 2.0.0, CUDA 12). Asegúrese de crear un entorno en el que PyTorch y su versión de tiempo de ejecución de CUDA coincidan y el SDK de CUDA instalado no tenga una diferencia importante con la versión de CUDA de PyTorch.
Algunos usuarios experimentan problemas al crear los submódulos en Windows ( cl.exe: File not found
o similar). Considere la solución alternativa para este problema en las preguntas frecuentes.
Para ejecutar el optimizador, simplemente use
python train.py -s
Ruta al directorio de origen que contiene un conjunto de datos COLMAP o Synthetic NeRF.
Ruta donde se debe almacenar el modelo entrenado ( output/
de forma predeterminada).
Subdirectorio alternativo para imágenes COLMAP ( images
por defecto).
Agregue esta bandera para usar una división de prueba/entrenamiento estilo MipNeRF360 para la evaluación.
Especifica la resolución de las imágenes cargadas antes del entrenamiento. Si se proporciona 1, 2, 4
u 8
, utiliza la resolución original, 1/2, 1/4 o 1/8, respectivamente. Para todos los demás valores, cambia la escala del ancho al número dado manteniendo el aspecto de la imagen. Si no se establece y el ancho de la imagen de entrada supera los 1,6 K píxeles, las entradas se reescalan automáticamente a este objetivo.
Especifica dónde colocar los datos de la imagen de origen, cuda
de forma predeterminada, se recomienda usar cpu
si el entrenamiento en un conjunto de datos grande/de alta resolución reducirá el consumo de VRAM, pero ralentizará ligeramente el entrenamiento. Gracias a HrsPythonix.
Agregue esta bandera para usar un fondo blanco en lugar de negro (predeterminado), por ejemplo, para la evaluación del conjunto de datos NeRF Synthetic.
Orden de armónicos esféricos a utilizar (no mayor a 3). 3
por defecto.
Marcar para hacer que la canalización calcule hacia adelante y hacia atrás de los SH con PyTorch en lugar del nuestro.
Marcar para hacer que la canalización calcule hacia adelante y hacia atrás de la covarianza 3D con PyTorch en lugar del nuestro.
Habilita el modo de depuración si experimenta errores. Si el rasterizador falla, se crea un archivo dump
que puede enviarnos en un problema para que podamos echarle un vistazo.
La depuración es lenta . Puede especificar una iteración (comenzando desde 0) después de la cual la depuración anterior se activa.
Número total de iteraciones para entrenar, 30_000
de forma predeterminada.
IP para iniciar el servidor GUI, 127.0.0.1
de forma predeterminada.
Puerto a utilizar para el servidor GUI, 6009
de forma predeterminada.
Iteraciones separadas por espacios en las que el script de entrenamiento calcula L1 y PSNR en el conjunto de prueba, 7000 30000
de forma predeterminada.
Iteraciones separadas por espacios en las que el script de entrenamiento guarda el modelo gaussiano, 7000 30000
de forma predeterminada.
Iteraciones separadas por espacios en las que almacenar un punto de control para continuar más tarde, guardado en el directorio del modelo.
Ruta a un punto de control guardado desde donde continuar entrenando.
Marca para omitir cualquier texto escrito en la tubería de salida estándar.
Los armónicos esféricos presentan una tasa de aprendizaje, 0.0025
de forma predeterminada.
Tasa de aprendizaje de opacidad, 0.05
de forma predeterminada.
Tasa de aprendizaje de escala, 0.005
de forma predeterminada.
Tasa de aprendizaje de rotación, 0.001
de forma predeterminada.
Número de pasos (desde 0) donde la tasa de aprendizaje de la posición va del initial
al final
. 30_000
por defecto.
Tasa de aprendizaje de posición 3D inicial, 0.00016
de forma predeterminada.
Tasa de aprendizaje de la posición 3D final, 0.0000016
de forma predeterminada.
Multiplicador de tasa de aprendizaje de posición (cf. Plenoxels), 0.01
por defecto.
Iteración donde comienza la densificación, 500
por defecto.
Iteración donde se detiene la densificación, 15_000
por defecto.
Límite que decide si los puntos deben densificarse según el gradiente de posición 2D, 0.0002
de forma predeterminada.
Con qué frecuencia densificar, 100
(cada 100 iteraciones) de forma predeterminada.
Con qué frecuencia se restablece la opacidad, 3_000
de forma predeterminada.
Influencia de SSIM en la pérdida total de 0 a 1, 0.2
por defecto.
Porcentaje de la extensión de la escena (0--1) que debe exceder un punto para que se densifique de forma forzada, 0.01
de forma predeterminada.
Tenga en cuenta que, al igual que MipNeRF360, apuntamos a imágenes con resoluciones en el rango de 1-1,6K píxeles. Para mayor comodidad, se pueden pasar entradas de tamaño arbitrario y su tamaño cambiará automáticamente si su ancho excede los 1600 píxeles. Recomendamos mantener este comportamiento, pero puede forzar el entrenamiento para usar imágenes de mayor resolución configurando -r 1
.
Los autores del artículo alojan las escenas de MipNeRF360 aquí. Puede encontrar nuestros conjuntos de datos SfM para Tanks&Temples y Deep Blending aquí. Si no proporciona un directorio de modelo de salida ( -m
), los modelos entrenados se escriben en carpetas con nombres únicos aleatorios dentro del directorio output
. En este punto, los modelos entrenados se pueden ver con el visor en tiempo real (ver más abajo).
De forma predeterminada, los modelos entrenados utilizan todas las imágenes disponibles en el conjunto de datos. Para entrenarlos mientras se retiene un conjunto de pruebas para evaluación, use el indicador --eval
. De esta manera, puede renderizar conjuntos de entrenamiento/prueba y producir métricas de error de la siguiente manera:
python train.py -s--eval # Entrenar con tren/prueba splitpython render.py -m # Generar renderizadospython metrics.py -m # Calcular métricas de error en representaciones
Si desea evaluar nuestros modelos previamente entrenados, deberá descargar los conjuntos de datos de origen correspondientes e indicar su ubicación en render.py
con un indicador --source_path/-s
adicional. Nota: Los modelos previamente entrenados se crearon con el código base de lanzamiento. Esta base de código se ha limpiado e incluye correcciones de errores, por lo que las métricas que obtenga al evaluarlas serán diferentes de las del documento.
python render.py -m-s python metrics.py -m
Ruta al directorio del modelo entrenado para el que desea crear representaciones.
Marcar para omitir la renderización del conjunto de entrenamiento.
Marcar para omitir la renderización del conjunto de prueba.
Marca para omitir cualquier texto escrito en la tubería de salida estándar.
Los siguientes parámetros se leerán automáticamente de la ruta del modelo, según lo que se utilizó para el entrenamiento. Sin embargo, puede anularlos proporcionándolos explícitamente en la línea de comando.
Ruta al directorio de origen que contiene un conjunto de datos COLMAP o Synthetic NeRF.
Subdirectorio alternativo para imágenes COLMAP ( images
por defecto).
Agregue esta bandera para usar una división de prueba/entrenamiento estilo MipNeRF360 para la evaluación.
Cambia la resolución de las imágenes cargadas antes del entrenamiento. Si se proporciona 1, 2, 4
u 8
, utiliza la resolución original, 1/2, 1/4 o 1/8, respectivamente. Para todos los demás valores, cambia la escala del ancho al número dado manteniendo el aspecto de la imagen. 1
por defecto.
Agregue esta bandera para usar un fondo blanco en lugar de negro (predeterminado), por ejemplo, para la evaluación del conjunto de datos NeRF Synthetic.
Marcar para hacer que la canalización se procese con SH calculados de PyTorch en lugar del nuestro.
Marcar para hacer que la tubería se renderice con covarianza 3D calculada de PyTorch en lugar de la nuestra.
Lista separada por espacios de rutas de modelo para las que se deben calcular métricas.
Además proporcionamos el script full_eval.py
. Este script especifica la rutina utilizada en nuestra evaluación y demuestra el uso de algunos parámetros adicionales, por ejemplo, --images (-i)
para definir directorios de imágenes alternativos dentro de los conjuntos de datos COLMAP. Si ha descargado y extraído todos los datos de entrenamiento, puede ejecutarlo así:
python full_eval.py -m360-tat -db
En la versión actual, este proceso tarda aproximadamente 7 horas en nuestra máquina de referencia que contiene una A6000. Si desea realizar la evaluación completa de nuestros modelos previamente entrenados, puede especificar su ubicación de descarga y omitir la capacitación.
python full_eval.py -o--skip_training -m360 -tat -db
Si desea calcular las métricas de las imágenes de evaluación de nuestro artículo, también puede omitir la renderización. En este caso no es necesario proporcionar los conjuntos de datos de origen. Puede calcular métricas para varios conjuntos de imágenes a la vez.
python full_eval.py -m/garden ... --skip_training --skip_rendering
Proporcionamos dos visores interactivos para nuestro método: remoto y en tiempo real. Nuestras soluciones de visualización se basan en el marco SIBR, desarrollado por el grupo GRAPHDECO para varios proyectos novedosos de síntesis de vistas.
GPU y controladores compatibles con OpenGL 4.5 (o el software MESA más reciente)
Se recomiendan 4 GB de VRAM
GPU preparada para CUDA con capacidad de cómputo 7.0+ (solo para Real-Time Viewer)
Visual Studio o g++, no Clang (usamos Visual Studio 2019 para Windows)
CUDA SDK 11, instalar después de Visual Studio (usamos 11.8)
CMake (versión reciente, usamos 3.24)
7zip (sólo en Windows)
Aquí proporcionamos binarios prediseñados para Windows. Recomendamos usarlos en Windows para una configuración eficiente, ya que la creación de SIBR implica varias dependencias externas que deben descargarse y compilarse sobre la marcha.
Si clonó con submódulos (por ejemplo, usando --recursive
), el código fuente de los visores se encuentra en SIBR_viewers
. El visor de red se ejecuta dentro del marco SIBR para aplicaciones de renderizado basado en imágenes.
CMake debería encargarse de sus dependencias.
cd SIBR_visores cmake -Bbuild .cmake --build build --target install --config RelWithDebInfo
Puede especificar una configuración diferente, por ejemplo, Debug
si necesita más control durante el desarrollo.
Necesitará instalar algunas dependencias antes de ejecutar la configuración del proyecto.
# Dependenciassudo apt install -y libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3-dev libxxf86vm-dev libembree-dev# Configuración del proyectocd SIBR_viewers cmake-Bbuild. -DCMAKE_BUILD_TYPE=Versión # agregue -G Ninja para compilar más rápidocmake --build build -j24 --target install
La compatibilidad con versiones anteriores de Focal Fossa no está completamente probada, pero la compilación de SIBR con CMake debería seguir funcionando después de invocarla
git checkout fossa_compatibilidad
La interfaz SIBR proporciona varios métodos para navegar por la escena. De forma predeterminada, se iniciará con un navegador FPS, que puede controlar con W, A, S, D, Q, E
para la traducción de la cámara y I, K, J, L, U, O
para la rotación. Alternativamente, es posible que desee utilizar un navegador estilo Trackball (seleccione en el menú flotante). También puede tomar una cámara desde el conjunto de datos con el botón Snap to
o buscar la cámara más cercana con Snap to closest
. Los menús flotantes también te permiten cambiar la velocidad de navegación. Puede utilizar el Scaling Modifier
para controlar el tamaño de las gaussianas mostradas o mostrar la nube de puntos inicial.
Después de extraer o instalar los visores, puede ejecutar la aplicación SIBR_remoteGaussian_app[_config]
compilada en
, por ejemplo:
.//bin/SIBR_remoteGaussian_app
El visor de red le permite conectarse a un proceso de capacitación en ejecución en la misma máquina o en una diferente. Si está entrenando en la misma máquina y sistema operativo, no se deben requerir parámetros de línea de comando: el optimizador comunica la ubicación de los datos de entrenamiento al visor de red. De forma predeterminada, el optimizador y el visor de red intentarán establecer una conexión en el host local en el puerto 6009 . Puede cambiar este comportamiento proporcionando parámetros --ip
y --port
coincidentes tanto al optimizador como al visor de red. Si por alguna razón el visor de red no puede acceder a la ruta utilizada por el optimizador para encontrar los datos de entrenamiento (por ejemplo, debido a que se ejecutan en diferentes máquinas (virtuales)), puede especificar una ubicación de anulación para el visor usando -s
.
Argumento para anular la ruta del modelo al conjunto de datos de origen.
IP que se utilizará para la conexión a un script de entrenamiento en ejecución.
Puerto que se utilizará para la conexión a un script de entrenamiento en ejecución.
Se necesitan dos números separados por espacios para definir la resolución a la que se produce la representación de la red, 1200
de ancho de forma predeterminada. Tenga en cuenta que para aplicar un aspecto que difiere de las imágenes de entrada, también necesita --force-aspect-ratio
.
Marcar para cargar imágenes del conjunto de datos de origen que se mostrarán en la vista superior de cada cámara.
Después de extraer o instalar los visores, puede ejecutar la aplicación SIBR_gaussianViewer_app[_config]
compilada en
, por ejemplo:
.//bin/SIBR_gaussianViewer_app -m
Debería ser suficiente proporcionar el parámetro -m
que apunte a un directorio de modelo entrenado. Alternativamente, puede especificar una ubicación de anulación para los datos de entrada de entrenamiento usando -s
. Para utilizar una resolución específica distinta a la elegida automáticamente, especifique --rendering-size
. Combínelo con --force-aspect-ratio
si desea la resolución exacta y no le importa la distorsión de la imagen.
Para desbloquear la velocidad de cuadros completa, desactive V-Sync en su máquina y también en la aplicación (Menú → Pantalla). En un sistema multi-GPU (por ejemplo, una computadora portátil), su GPU OpenGL/Display debe ser la misma que su GPU CUDA (por ejemplo, configurando la preferencia de GPU de la aplicación en Windows, consulte a continuación) para obtener el máximo rendimiento. Además de la nube de puntos inicial y los símbolos, también tienes la opción de visualizar los gaussianos representándolos como elipsoides desde el menú flotante. SIBR tiene muchas otras funcionalidades; consulte la documentación para obtener más detalles sobre el visor, las opciones de navegación, etc. También hay una Vista superior (disponible en el menú) que muestra la ubicación de las cámaras de entrada y la nube de puntos SfM original; tenga en cuenta que la Vista superior ralentiza el procesamiento cuando está habilitada. El visor en tiempo real también utiliza una selección rápida y ligeramente más agresiva, que se puede alternar en el menú flotante. Si alguna vez encuentra un problema que pueda resolverse desactivando la selección rápida, háganoslo saber.
Nuestros cargadores COLMAP esperan la siguiente estructura de conjunto de datos en la ubicación de la ruta de origen:
|---images | |--- | |--- | |---... |---sparse |---0 |---cameras.bin |---images.bin |---points3D.bin
Para la rasterización, los modelos de cámara deben ser una cámara SIMPLE_PINHOLE o PINHOLE. Proporcionamos un script convertidor convert.py
para extraer imágenes sin distorsiones e información SfM de las imágenes de entrada. Opcionalmente, puede utilizar ImageMagick para cambiar el tamaño de las imágenes sin distorsiones. Este reescalado es similar a MipNeRF360, es decir, crea imágenes con 1/2, 1/4 y 1/8 de la resolución original en las carpetas correspondientes. Para usarlos, primero instale una versión reciente de COLMAP (idealmente con tecnología CUDA) e ImageMagick. Coloque las imágenes que desea utilizar en un directorio
.
|---input |--- |--- |---...
Si tiene COLMAP e ImageMagick en la ruta de su sistema, simplemente puede ejecutar
python convert.py -s[--resize] #Si no se cambia el tamaño, ImageMagick no es necesario
Alternativamente, puede usar los parámetros opcionales --colmap_executable
y --magick_executable
para señalar las rutas respectivas. Tenga en cuenta que en Windows, el ejecutable debe apuntar al archivo COLMAP .bat
que se encarga de configurar el entorno de ejecución. Una vez hecho esto,
contendrá la estructura del conjunto de datos COLMAP esperada con imágenes de entrada redimensionadas y sin distorsiones, además de sus imágenes originales y algunos datos temporales (distorsionados) en el directorio distorted
.
Si tiene su propio conjunto de datos COLMAP sin distorsión (por ejemplo, usando una cámara OPENCV
), puede intentar ejecutar simplemente la última parte del script: coloque las imágenes en input
y la información COLMAP en un subdirectorio distorted
:
|---input | |--- | |--- | |---... |---distorted |---database.db |---sparse |---0 |---...
Entonces corre
python convert.py -s--skip_matching [--resize] #Si no se cambia el tamaño, ImageMagick no es necesario
Marcar para evitar el uso de GPU en COLMAP.
Bandera para indicar que la información COLMAP está disponible para imágenes.
Ubicación de las entradas.
Qué modelo de cámara usar para los primeros pasos de coincidencia, OPENCV
de forma predeterminada.
Bandera para crear versiones redimensionadas de imágenes de entrada.
Ruta al ejecutable COLMAP ( .bat
en Windows).
Ruta al ejecutable de ImageMagick.
Integramos los reemplazos directos de Taming-3dgs 1 con ssim fusionado en el código base original para acelerar los tiempos de entrenamiento. Una vez instalado, el rasterizador acelerado ofrece una --optimizer_type default
y un --optimizer_type sparse_adam
.
Para obtener tiempos de entrenamiento más rápidos, primero debe instalar el rasterizador acelerado en su entorno:
pip desinstalación diff-rasterización-gaussiana -ycd submódulos/diff-rasterización-gaussiana rm -r construir git pago 3dgs_accel instalación de pipas.
Luego puede agregar el siguiente parámetro para usar el optimizador disperso de Adam cuando ejecute train.py
:
--optimizer_type sparse_adam
Tenga en cuenta que este rasterizador personalizado tiene un comportamiento diferente al de la versión original; para obtener más detalles sobre los tiempos de entrenamiento, consulte las estadísticas de tiempos de entrenamiento .
1. Mallick y Goel, et al. 'Domar 3DGS: campos radiantes de alta calidad con recursos limitados'. Documentos de la conferencia SIGGRAPH Asia 2024, 2024, https://doi.org/10.1145/3680528.3687694, github
Para tener escenas mejor reconstruidas utilizamos mapas de profundidad como prioritarios durante la optimización con cada imagen de entrada. Funciona mejor en partes sin textura, por ejemplo: carreteras, y puede eliminar flotadores. Varios artículos han utilizado ideas similares para mejorar varios aspectos de 3DGS; (por ejemplo, DepthRegularizedGS, SparseGS, DNGaussian). La regularización de profundidad que integramos es la utilizada en nuestro documento Hierarchical 3DGS, pero aplicada al 3DGS original; para algunas escenas (por ejemplo, las escenas DeepBlending) mejora significativamente la calidad; para otros supone una pequeña diferencia o incluso puede ser peor. Para obtener resultados de ejemplo que muestran el beneficio potencial y estadísticas sobre la calidad, consulte aquí: Estadísticas para la regularización en profundidad.
Cuando se entrena en un conjunto de datos sintéticos, se pueden producir mapas de profundidad y no requieren procesamiento adicional para usarse en nuestro método.
Para conjuntos de datos del mundo real, se deben generar mapas de profundidad para cada imagen de entrada; para generarlos, haga lo siguiente:
Clonar profundidad cualquier cosa v2:
git clone https://github.com/DepthAnything/Depth-Anything-V2.git
Descargue pesos de Depth-Anything-V2-Large y colóquelos en Depth-Anything-V2/checkpoints/
Generar mapas de profundidad:
python Depth-Anything-V2/run.py --encoder vitl --pred-only --grayscale --img-path--outdir
Genere un archivo depth_params.json
usando:
python utils/make_depth_scale.py --base_dir--depths_dir
Se debe establecer un nuevo parámetro durante el entrenamiento si desea utilizar la regularización de profundidad -d
.
Para compensar los cambios de exposición en las diferentes imágenes de entrada, optimizamos una transformación afín para cada imagen tal como en Hierarchical 3dgs.
Esto puede mejorar enormemente los resultados de reconstrucción para capturas "en la naturaleza", por ejemplo, con un teléfono inteligente cuando el ajuste de exposición de la cámara no es fijo. Para obtener resultados de ejemplo que muestran el beneficio potencial y estadísticas sobre la calidad, consulte aquí: Estadísticas de compensación de exposición.
Agregue los siguientes parámetros para habilitarlo:
--exposure_lr_init 0.001 --exposure_lr_final 0.0001 --exposure_lr_delay_steps 5000 --exposure_lr_delay_mult 0.001 --train_test_exp
Nuevamente, otros artículos excelentes han utilizado ideas similares, por ejemplo, NeRF-W, URF.
Agregamos el filtro EWA de Mip Splatting en nuestro código base para eliminar el alias. Está deshabilitado de forma predeterminada, pero puede habilitarlo agregando --antialiasing
cuando entrene en una escena usando train.py
o renderice usando render.py
. El antialiasing se puede alternar en el visor SIBR; está deshabilitado de forma predeterminada, pero debes habilitarlo cuando visualizas una escena entrenada usando --antialiasing
. Esta escena fue entrenada usando --antialiasing
.
Views > Top view
La Top view
representa la nube de puntos SfM en otra vista con las cámaras de entrada correspondientes y la cámara de usuario Point view
. Esto permite visualizar, por ejemplo, qué tan lejos está el espectador de las cámaras de entrada.
Es una vista 3D por lo que el usuario puede navegar a través de ella como en la Point view
(modos disponibles: FPS, trackball, órbita).
Hay opciones disponibles para personalizar esta vista, las mallas se pueden habilitar/deshabilitar y se pueden modificar sus escalas.
Una funcionalidad adicional útil es moverse a la posición de una imagen de entrada y desaparecer progresivamente hasta la vista del punto SfM en esa posición (por ejemplo, para verificar la alineación de la cámara). Las vistas de las cámaras de entrada se pueden mostrar en la Top view
( tenga en cuenta que --images-path
debe configurarse en la línea de comando ). Se puede ajustar la cámara Top view
a la cámara de entrada más cercana desde la cámara del usuario en la Point view
haciendo clic en Top view settings > Cameras > Snap to closest
.
OpenXR es compatible con la rama gaussian_code_release_openxr
Dentro de esa rama, puede encontrar documentación para la compatibilidad con VR aquí.
¿Dónde obtengo conjuntos de datos, por ejemplo, aquellos a los que se hace referencia en full_eval.py
? El conjunto de datos MipNeRF360 lo proporcionan los autores del artículo original en el sitio del proyecto. Tenga en cuenta que dos de los conjuntos de datos no se pueden compartir abiertamente y requieren que consulte a los autores directamente. Para Tanks&Temples y Deep Blending, utilice los enlaces de descarga que se encuentran en la parte superior de la página. Alternativamente, puede acceder a los datos clonados (estado: ¡agosto de 2023!) desde HuggingFace
¿Cómo puedo usar esto para un conjunto de datos mucho más grande, como un distrito de una ciudad? El método actual no fue diseñado para estos, pero con suficiente memoria, debería funcionar. Sin embargo, el enfoque puede tener dificultades en escenas con detalles de múltiples escalas (primeros planos extremos, mezclados con tomas lejanas). Este suele ser el caso, por ejemplo, en conjuntos de datos de conducción (coches de cerca, edificios lejos). Para tales escenas, puede reducir --position_lr_init
, --position_lr_final
y --scaling_lr
(x0.3, x0.1, ...). Cuanto más extensa sea la escena, más bajos deberían ser estos valores. A continuación, utilizamos tasas de aprendizaje predeterminadas (izquierda) y --position_lr_init 0.000016 --scaling_lr 0.001"
(derecha).
Estoy en Windows y no logro construir los submódulos, ¿qué hago? Considere seguir los pasos del excelente video tutorial aquí; con suerte, le ayudarán. ¡El orden en el que se realizan los pasos es importante! Alternativamente, considere usar la plantilla Colab vinculada.
Todavía no funciona. Dice algo sobre cl.exe
. ¿Qué debo hacer? El usuario Henry Pearce encontró una solución. Puede intentar agregar la ruta de Visual Studio a sus variables de entorno (su número de versión puede diferir); C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30133binHostx64x64
Luego, asegúrese de iniciar un nuevo mensaje de conda y un CD en la ubicación de su repositorio e intente esto;
conda activate gaussian_splatting cd/gaussian-splatting pip install submodulesdiff-gaussian-rasterization pip install submodulessimple-knn
Estoy en macOS/Puppy Linux/Greenhat y no puedo compilar, ¿qué hago? Lo sentimos, no podemos brindar soporte para plataformas fuera de las que enumeramos en este README. Considere usar la plantilla Colab vinculada.
No tengo 24 GB de VRAM para entrenar, ¿qué hago? El consumo de VRAM está determinado por la cantidad de puntos que se están optimizando, la cual aumenta con el tiempo. Si solo desea entrenar con 7k iteraciones, necesitará significativamente menos. Para realizar la rutina de entrenamiento completa y evitar quedarte sin memoria, puedes aumentar --densify_grad_threshold
, --densification_interval
o reducir el valor de --densify_until_iter
. Sin embargo, tenga en cuenta que esto afectará la calidad del resultado. Intente también configurar --test_iterations
en -1
para evitar picos de memoria durante las pruebas. Si --densify_grad_threshold
es muy alto, no debería producirse ninguna densificación y el entrenamiento debería completarse si la escena se carga correctamente.
¡24 GB de VRAM para una formación de calidad de referencia sigue siendo mucho! ¿No podemos hacerlo con menos? Sí, muy probablemente. Por nuestra ca