NoPoSplat predice gaussianos 3D en un espacio canónico a partir de imágenes dispersas sin posición,
permitiendo una síntesis de vistas novedosas de alta calidad y una estimación precisa de la pose.
Instalación
Puntos de control previamente entrenados
Convenciones de cámara
Conjuntos de datos
Ejecutando el código
Expresiones de gratitud
Citación
Nuestro código se basa en Python 3.10+ y está desarrollado en base a PyTorch 2.1.2 y CUDA 11.8, pero también debería funcionar con versiones superiores de Pytorch/CUDA.
Clonar NoPoSplat.
clon de git https://github.com/cvg/NoPoSplatcd NoPoSplat
Crea el entorno, aquí mostramos un ejemplo usando conda.
conda crear -y -n noposplat python=3.10 conda activar noposplat pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118 instalación de pip -r requisitos.txt
Opcional, compila los kernels cuda para RoPE (como en CroCo v2).
# NoPoSplat se basa en incrustaciones posicionales de RoPE para las cuales puede compilar algunos núcleos cuda para un tiempo de ejecución más rápido.cd src/model/encoder/backbone/croco/curope/ python setup.py build_ext --inplacecd ../../../../../..
¿Nuestros modelos están alojados en Hugging Face?
Nombre del modelo | Resoluciones de entrenamiento | Datos de entrenamiento |
---|---|---|
re10k.ckpt | 256x256 | re10k |
acid.ckpt | 256x256 | ácido |
mezclaRe10kDl3dv.ckpt | 256x256 | re10k, dl3dv |
mezclaRe10kDl3dv_512x512.ckpt | 512x512 | re10k, dl3dv |
Suponemos que los pesos descargados se encuentran en el directorio pretrained_weights
.
Nuestro sistema de cámara es el mismo que el de pixelSplat. Las matrices intrínsecas de la cámara están normalizadas (la primera fila se divide por el ancho de la imagen y la segunda fila se divide por el alto de la imagen). Las matrices extrínsecas de la cámara son matrices de cámara a mundo de estilo OpenCV (+X derecha, +Y abajo, +Z la cámara mira hacia la pantalla).
Consulte DATASETS.md para la preparación del conjunto de datos.
El punto de entrada principal es src/main.py
. Llámalo vía:
# 8 GPU, con cada tamaño de lote = 16. Elimine los dos últimos argumentos si no desea utilizar wandb para loggingpython -m src.main +experiment=re10k wandb.mode=online wandb.name=re10k
Esta configuración de entrenamiento predeterminada requiere 8 GPU con un tamaño de lote de 16 en cada GPU (>=80 GB de memoria). La formación tardará aproximadamente 6 horas en completarse. Puede ajustar el tamaño del lote para que se ajuste a su hardware, pero tenga en cuenta que cambiar el tamaño total del lote puede requerir modificar la tasa de aprendizaje inicial para mantener el rendimiento. Puede consultar re10k_1x8 para entrenar con 1 GPU A6000 (memoria de 48 GB), que producirá un rendimiento similar.
# RealEstate10Kpython -m src.main +experiment=re10k mode=test wandb.name=re10k dataset/[email protected]_sampler=evaluación dataset.re10k.view_sampler.index_path=assets/evaluación_index_re10k.json checkpointing.load=./pretrained_weights /re10k.ckpt test.save_image=true# RealEstate10Kpython -m src.main +experiment=acid mode=test wandb.name=acid dataset/[email protected]_sampler=evaluación dataset.re10k.view_sampler.index_path=assets/evaluación_index_acid .json checkpointing.load=./pretrained_weights/acid.ckpt test.save_image=true
Puede configurar wandb.name=SAVE_FOLDER_NAME
para especificar la ruta para guardar.
Para evaluar el rendimiento de la estimación de pose, puede ejecutar el siguiente comando:
# RealEstate10Kpython -m src.eval_pose +experiment=re10k +evaluación=eval_pose checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt dataset/[email protected]_sampler=evaluación dataset.re10k.view_sampler.index_path=assets/evaluación_index_re10k .json # ACIDpython -m src.eval_pose +experiment=acid +evaluación=eval_pose checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt dataset/[email protected]_sampler=evaluación dataset.re10k.view_sampler.index_path=assets/evaluación_index_acid.json # ScanNet-1500python -m src.eval_pose +experiment=scannet_pose +evaluación=eval_pose checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt
Tenga en cuenta que aquí mostramos la evaluación utilizando el modelo mixto entrenado en RealEstate10K y DL3DV. Puede reemplazar la ruta del punto de control con otros modelos entrenados.
Este proyecto se desarrolla con varios repositorios fantásticos: pixelSplat, DUSt3R y CroCo. Agradecemos a los autores originales por su excelente trabajo. Agradecemos la amable ayuda de David Charatan por proporcionar el código de evaluación y los modelos previamente entrenados para algunos de los métodos anteriores.
@article{ye2024noposplat, title = {No Pose, No Problem: Surprisingly Simple 3D Gaussian Splats from Sparse Unposed Images}, author = {Ye, Botao and Liu, Sifei and Xu, Haofei and Xueting, Li and Pollefeys, Marc and Yang, Ming-Hsuan and Songyou, Peng}, journal = {arXiv preprint arXiv:xxxx.xxxx}, year = {2024} }