
Xcube: modelado generativo 3D a gran escala utilizando jerarquías de vóxel dispersas
Xuanchi Ren, Jiahui Huang, Xiaohui Zeng, Ken Museth, Sanja Fidler, Francis Williams
Documento, página del proyecto
Resumen: Presentamos XCube (abreviado como x 3 ), un nuevo modelo generativo para cuadrículas vóxel 3D de alta resolución con atributos arbitrarios. Nuestro modelo puede generar millones de vóxeles con la mejor resolución efectiva de hasta 1024 3 de manera avanzada sin la optimización de tiempo de prueba que requiere mucho tiempo. Para lograr esto, empleamos un modelo jerárquico de difusión latente de vóxel que genera cuadrículas de resolución progresivamente más altas de manera gruesa a fina utilizando un marco personalizado construido en la estructura de datos VDB altamente eficiente. Además de generar objetos de alta resolución, demostramos la efectividad de Xcube en grandes escenas al aire libre a escamas de 100 m x 100m con un tamaño de vóxel tan pequeño como 10 cm. Observamos mejoras cualitativas y cuantitativas claras sobre los enfoques pasados. Además de la generación incondicional, mostramos que nuestro modelo puede usarse para resolver una variedad de tareas, como la edición guiada por el usuario, la finalización de la escena desde un solo escaneo y el texto a 3D.
Para consultas comerciales, visite nuestro sitio web y envíe el formulario: Licencias de investigación de NVIDIA. Para cualquier otra pregunta relacionada con el modelo, comuníquese con Xuanchi o Jiahui.
Tenga en cuenta que actualmente solo admitimos Linux. Agradecemos el soporte para otras plataformas.
(Opcional) Instale libmamba para una gran mejora de calidad de vida al usar conda
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 los usuarios de Docker, sugerimos usar una imagen base desde aquí y aplicar la configuración de condena anterior sobre ella.
Descargue los puntos de control previos al detenido desde Google Drive y colóquelos en checkpoints . Alternativamente, proporcionamos un script que podría descargar automáticamente todo para usted (temporalmente no disponible):
python inference/download_pretrain.py
Inferencia de Shapenet:
# 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}
Inferencia 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}
Inferencia objeca:
# 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}
El código publicado tiene algunas diferencias con la versión descrita en el documento:
- La red de refinamiento se omite para el código más limpio, lo que puede causar pequeñas variaciones en los resultados, pero estas diferencias no son significativas.
- El proceso de extracción de malla se ha movido de la VAE al postprocesamiento.
Hemos preparado instrucciones detalladas sobre la preparación de datos y trucos útiles en Xcube Misc.
Enlaces de descarga de datos:
../data/shapenet . O podría cambiar _shapenet_path en la configuración.Entrenamiento de modelos de autoencoder:
# 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
Entrenamiento de modelos de difusión latente:
# 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
Entrenamiento de modelos de autoencoder:
# 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
Entrenamiento de modelos de difusión latente:
# 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
Además, puede especificar manualmente diferentes configuraciones de capacitación para obtener modelos que se adapten a sus necesidades. Las banderas comunes incluyen:
--wname : Nombre del experimento adicional para especificar para Wandb Logger.--batch_size : Número de lote en total para autoencoder y Número de lotes por GPU para diffusion .--logger_type : usamos wandb por defecto; none también es compatible. Copyright © 2024, Nvidia Corporation & Affiliates. Reservados todos los derechos. Este trabajo está disponible bajo la licencia del código fuente 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 }
}