NoPoSplat prevê Gaussianos 3D em um espaço canônico a partir de imagens esparsas não colocadas,
permitindo uma nova síntese de visualização de alta qualidade e estimativa de pose precisa.
Instalação
Pontos de verificação pré-treinados
Convenções de câmera
Conjuntos de dados
Executando o Código
Agradecimentos
Citação
Nosso código é baseado em Python 3.10+ e é desenvolvido com base em PyTorch 2.1.2 e CUDA 11.8, mas também deve funcionar com versões superiores de Pytorch/CUDA.
Clonar NoPoSplat.
clone do git https://github.com/cvg/NoPoSplatcd NoPoSplat
Crie o ambiente, aqui mostramos um exemplo usando conda.
conda criar -y -n noposplat python=3.10 conda ativar noposplat pip instalar tocha==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118 pip instalar -r requisitos.txt
Opcional, compile os kernels cuda para RoPE (como no CroCo v2).
# NoPoSplat depende de embeddings posicionais RoPE para os quais você pode compilar alguns kernels cuda para um tempo de execução mais rápido.cd src/model/encoder/backbone/croco/curope/ python setup.py build_ext --inplacecd ../../../../../..
Nossos modelos estão hospedados no Hugging Face ?
Nome do modelo | Resoluções de treinamento | Dados de treinamento |
---|---|---|
re10k.ckpt | 256x256 | re10k |
ácido.ckpt | 256x256 | ácido |
mixRe10kDl3dv.ckpt | 256x256 | re10k, dl3dv |
mixRe10kDl3dv_512x512.ckpt | 512x512 | re10k, dl3dv |
Assumimos que os pesos baixados estão localizados no diretório pretrained_weights
.
Nosso sistema de câmera é igual ao pixelSplat. As matrizes intrínsecas da câmera são normalizadas (a primeira linha é dividida pela largura da imagem e a segunda linha é dividida pela altura da imagem). As matrizes extrínsecas da câmera são matrizes de câmera para mundo no estilo OpenCV (+X para a direita, +Y para baixo, +Z câmera olha para a tela).
Consulte DATASETS.md para preparação do conjunto de dados.
O ponto de entrada principal é src/main.py
. Ligue através de:
# 8 GPUs, com cada tamanho de lote = 16. Remova os dois últimos argumentos se não quiser usar wandb para loggingpython -m src.main +experiment=re10k wandb.mode=online wandb.name=re10k
Esta configuração de treinamento padrão requer 8 GPUs com um tamanho de lote de 16 em cada GPU (>=80 GB de memória). O treinamento levará aproximadamente 6 horas para ser concluído. Você pode ajustar o tamanho do lote para se adequar ao seu hardware, mas observe que a alteração do tamanho total do lote pode exigir a modificação da taxa de aprendizado inicial para manter o desempenho. Você pode consultar o re10k_1x8 para treinamento em 1 GPU A6000 (memória de 48 GB), que produzirá desempenho semelhante.
# RealEstate10Kpython -m src.main +experiment=re10k mode=test wandb.name=re10k dataset/[email protected]_sampler=evaluation dataset.re10k.view_sampler.index_path=assets/evaluation_index_re10k.json checkpointing.load=./pretrained_weights /re10k.ckpt test.save_image=true# RealEstate10Kpython -m src.main +experiment=modo ácido=teste wandb.name=conjunto de dados ácido/[email protected]_sampler=conjunto de dados de avaliação.re10k.view_sampler.index_path=assets/eavaliação_index_acid .json checkpointing.load=./pretrained_weights/acid.ckpt test.save_image=true
Você pode definir wandb.name=SAVE_FOLDER_NAME
para especificar o caminho de salvamento.
Para avaliar o desempenho da estimativa de pose, você pode executar o seguinte comando:
# RealEstate10Kpython -m src.eval_pose +experiment=re10k +evaluation=eval_pose checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt dataset/[email protected]_sampler=evaluation dataset.re10k.view_sampler.index_path=assets/evaluation_index_re10k .json # ACIDpython -m src.eval_pose +experiment=acid +evaluation=eval_pose checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt dataset/[email protected]_sampler=evaluation dataset.re10k.view_sampler.index_path=assets/evaluation_index_acid.json # ScanNet-1500python -m src.eval_pose +experiment=scannet_pose +eavaliação=eval_pose checkpointing.load=./pretrained_weights/mixRe10kDl3dv.ckpt
Observe que aqui mostramos a avaliação utilizando o modelo misto treinado em RealEstate10K e DL3DV. Você pode substituir o caminho do ponto de verificação por outros modelos treinados.
Este projeto é desenvolvido com vários repositórios fantásticos: pixelSplat, DUSt3R e CroCo. Agradecemos aos autores originais pelo excelente trabalho. Agradecemos a gentil ajuda de David Charatan por fornecer o código de avaliação e os modelos pré-treinados para alguns dos 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} }