
XCUBE: Modelagem generativa em larga escala 3D usando hierarquias de voxel esparsas
Xuanchi Ren, Jiahui Huang, Xiaohui Zeng, Ken Museth, Sanja Fidler, Francis Williams
Artigo, página do projeto
Resumo: Apresentamos o XCUBE (abreviado como x 3 ), um novo modelo generativo para grades de voxel 3D esparsas de alta resolução com atributos arbitrários. Nosso modelo pode gerar milhões de voxels com uma melhor resolução efetiva de até 1024 3 de maneira feed-forward sem otimização de tempo de teste demorado. Para conseguir isso, empregamos um modelo hierárquico de difusão latente de voxel que gera grades de resolução progressivamente mais alta de maneira grossa para a fila, usando uma estrutura personalizada construída sobre a estrutura de dados VDB altamente eficiente. Além de gerar objetos de alta resolução, demonstramos a eficácia do XCube em grandes cenas externas em escalas de 100m x 100m com um tamanho de voxel tão pequenos quanto 10 cm. Observamos melhorias qualitativas e quantitativas claras em relação às abordagens passadas. Além da geração incondicional, mostramos que nosso modelo pode ser usado para resolver uma variedade de tarefas, como edição guiada pelo usuário, conclusão da cena de uma única varredura e texto para 3D.
Para consultas de negócios, visite nosso site e envie o formulário: licenciamento de pesquisa da NVIDIA. Para quaisquer outras perguntas relacionadas ao modelo, entre em contato com Xuanchi ou Jiahui.
Observe que atualmente suportamos apenas o Linux. Congratulamo -nos com o suporte para outras plataformas.
(Opcional) Instale o libmamba para uma enorme melhoria de qualidade de vida ao usar o CONA
conda update -n base conda
conda install -n base conda-libmamba-solver
conda config --set solver libmamba
# Clone the repository
git clone [email protected]:nv-tlabs/XCube.git
cd XCube
# Create conda environment
conda env create -f environment.yml
conda activate xcube
# Install fVDB (3D learning framework; require GPU later than Ampere)
git clone https://github.com/AcademySoftwareFoundation/openvdb.git
cd openvdb
git fetch origin pull/1808/head:feature/fvdb
git checkout feature/fvdb
rm fvdb/setup.py && cp ../assets/setup.py fvdb/
cd fvdb && pip install .
cd ../..
# Mesh extraction
cd ext/nksr-cuda
python setup.py develop
cd ../..
Para usuários do Docker, sugerimos o uso de uma imagem base daqui e aplicar a configuração do CONDA acima.
Faça o download dos pontos de verificação pré -ridicularizados do Google Drive e coloque -os em checkpoints . Como alternativa, fornecemos um script que poderia baixar automaticamente tudo para você (temporariamente indisponível):
python inference/download_pretrain.py
Inferência de Sheaneta:
# Chair
python inference/sample_shapenet.py none --category chair --total_len 20 --batch_len 4 --ema --use_ddim --ddim_step 100 --extract_mesh
# Car
python inference/sample_shapenet.py none --category car --total_len 20 --batch_len 4 --ema --use_ddim --ddim_step 100 --extract_mesh
# Plane
python inference/sample_shapenet.py none --category plane --total_len 20 --batch_len 4 --ema --use_ddim --ddim_step 100 --extract_mesh
# Visualize
python visualize_object.py -p results/{YOUR_PATH} -i {YOUR_ID}
Inferência de Waymo:
# Unconditional sampling
python inference/sample_waymo.py none --total_len 20 --batch_len 4 --ema --use_ddim --ddim_step 100 --extract_mesh
# Single-scan condition (coming soon)
# Visualize
python visualize_scene.py -p results/{YOUR_PATH} -i {YOUR_ID}
Inferência de Objaverse:
# Text to 3D
python inference/sample_objaverse.py none --batch_len 4 --ema --use_ddim --ddim_step 100 --extract_mesh
# Visualize
python visualize_object.py -p results/{YOUR_PATH} -i {YOUR_ID}
O código lançado tem algumas diferenças em relação à versão descrita no artigo:
- A rede de refinamento é omitida para o código mais limpo, o que pode causar pequenas variações nos resultados, mas essas diferenças não são significativas.
- O processo de extração de malha foi movido do VAE para o pós-processamento.
Preparamos instruções detalhadas sobre a preparação de dados e truques úteis no Xcube Misc.
Links para download de dados:
../data/shapenet . Ou você mudou _shapenet_path na configuração.Modelos de autoencoder de treinamento:
# ShapeNet chair
python train.py ./configs/shapenet/chair/train_vae_16x16x16_dense.yaml --wname 16x16x16-kld-0.03_dim-16 --max_epochs 100 --cut_ratio 16 --gpus 8 --batch_size 32
# ShapeNet car
python train.py ./configs/shapenet/car/train_vae_16x16x16_dense.yaml --wname 16x16x16-kld-0.03_dim-16 --max_epochs 100 --cut_ratio 16 --gpus 8 --batch_size 32
# ShapeNet plane
python train.py ./configs/shapenet/plane/train_vae_16x16x16_dense.yaml --wname 16x16x16-kld-0.03_dim-16 --max_epochs 100 --cut_ratio 16 --gpus 8 --batch_size 32
# Waymo uncond
python train.py ./configs/waymo/train_vae_32x32x32_dense.yaml --wname 32x32x32-kld-0.03_dim-8 --max_epochs 50 --gpus 8 --batch_size 32 --eval_interval 1
Modelos de difusão latente de treinamento:
# ShapeNet chair
python train.py ./configs/shapenet/chair/train_diffusion_16x16x16_dense.yaml --wname 16x16x16_kld-0.03 --eval_interval 5 --gpus 8 --batch_size 8 --accumulate_grad_batches 4
# ShapeNet car
python train.py ./configs/shapenet/car/train_diffusion_16x16x16_dense.yaml --wname 16x16x16_kld-0.03 --eval_interval 5 --gpus 8 --batch_size 8 --accumulate_grad_batches 4
# ShapeNet plane
python train.py ./configs/shapenet/plane/train_diffusion_16x16x16_dense.yaml --wname 16x16x16_kld-0.03 --eval_interval 5 --gpus 8 --batch_size 8 --accumulate_grad_batches 4
# Waymo uncond
python train_auto.py ./configs/waymo/train_diffusion_32x32x32_dense.yaml --wname 32x32x32_kld-0.03 --eval_interval 1 --gpus 8 --batch_size 16 --accumulate_grad_batches 4 --save_topk 2
Modelos de autoencoder de treinamento:
# ShapeNet chair
python train.py ./configs/shapenet/chair/train_vae_128x128x128_sparse.yaml --wname 512_to_128-kld-1.0 --max_epochs 100 --gpus 8 --batch_size 8 --accumulate_grad_batches 2
# ShapeNet car
python train.py ./configs/shapenet/car/train_vae_128x128x128_sparse.yaml --wname 512_to_128-kld-1.0 --max_epochs 100 --gpus 8 --batch_size 8 --accumulate_grad_batches 2
# ShapeNet plane
python train.py ./configs/shapenet/plane/train_vae_128x128x128_sparse.yaml --wname 512_to_128-kld-1.0 --max_epochs 100 --gpus 8 --batch_size 8 --accumulate_grad_batches 2
# Waymo uncond
python train.py ./configs/waymo/train_vae_256x256x256_sparse.yaml --wname 1024_to_256-kld-0.3 --max_epochs 50 --gpus 8 --batch_size 8 --accumulate_grad_batches 2
Modelos de difusão latente de treinamento:
# ShapeNet chair
python train.py ./configs/shapenet/plane/train_diffusion_128x128x128_sparse.yaml --wname 128x128x128_kld-1.0_normal_cond --eval_interval 5 --gpus 8 --batch_size 8 --accumulate_grad_batches 8 --save_topk 2 --save_every 30
# ShapeNet car
python train.py ./configs/shapenet/car/train_diffusion_128x128x128_sparse.yaml --wname 128x128x128_kld-1.0_normal_cond --eval_interval 5 --gpus 8 --batch_size 8 --accumulate_grad_batches 8 --save_topk 2 --save_every 30
# ShapeNet plane
python train.py ./configs/shapenet/car/train_diffusion_128x128x128_sparse.yaml --wname 128x128x128_kld-1.0_normal_cond --eval_interval 5 --gpus 8 --batch_size 8 --accumulate_grad_batches 8 --save_topk 2 --save_every 30
# Waymo uncond
python train.py ./configs/waymo/train_diffusion_256x256x256_sparse.yaml --wname 256x256x64_kld-0.3_semantic_cond --eval_interval 1 --gpus 8 --batch_size 8 --accumulate_grad_batches 4 --save_topk 1
Além disso, você pode especificar manualmente diferentes configurações de treinamento para obter modelos que atendam às suas necessidades. As bandeiras comuns incluem:
--wname : Nome adicional do experimento para especificar para o Wandb Logger.--batch_size : NUM do lote no total para autoencoder e o número de lote por GPU para diffusion .--logger_type : usamos wandb por padrão; none também é suportado. Copyright © 2024, Nvidia Corporation & Affiliates. Todos os direitos reservados. Este trabalho é disponibilizado sob a licença de código -fonte da NVIDIA.
@inproceedings { ren2024xcube ,
title = { XCube: Large-Scale 3D Generative Modeling using Sparse Voxel Hierarchies } ,
author = { Ren, Xuanchi and Huang, Jiahui and Zeng, Xiaohui and Museth, Ken and Fidler, Sanja and Williams, Francis } ,
booktitle = { Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition } ,
year = { 2024 }
}