
Xcube: การสร้างแบบจำลองการกำเนิด 3D ขนาดใหญ่โดยใช้ลำดับชั้นของ voxel กระจัดกระจาย
Xuanchi Ren, Jiahui Huang, Xiaohui Zeng, Ken Museth, Sanja Fidler, Francis Williams
กระดาษหน้าโครงการ
บทคัดย่อ: เรานำเสนอ Xcube (ตัวย่อเป็น x 3 ) แบบจำลองการกำเนิดใหม่สำหรับกริด voxel 3D ความละเอียดสูงที่มีความละเอียดสูงพร้อมคุณลักษณะโดยพลการ โมเดลของเราสามารถสร้าง voxels หลายล้านคนด้วยความละเอียดที่ดีที่สุดที่มีประสิทธิภาพสูงสุดถึง 1024 3 ในรูปแบบฟีดไปข้างหน้าโดยไม่ต้องเพิ่มประสิทธิภาพเวลาทดสอบที่ใช้เวลานาน เพื่อให้บรรลุเป้าหมายนี้เราใช้โมเดลการแพร่กระจายของ Voxel แฝงแบบลำดับชั้นซึ่งสร้างกริดความละเอียดที่สูงขึ้นอย่างต่อเนื่องในลักษณะที่หยาบไปจนถึงขั้นตอนโดยใช้เฟรมเวิร์กที่กำหนดเองที่สร้างขึ้นบนโครงสร้างข้อมูล VDB ที่มีประสิทธิภาพสูง นอกเหนือจากการสร้างวัตถุที่มีความละเอียดสูงแล้วเรายังแสดงให้เห็นถึงประสิทธิภาพของ Xcube ในฉากกลางแจ้งขนาดใหญ่ที่เครื่องชั่ง 100 ม. x 100 ม. ด้วยขนาด voxel มีขนาดเล็กถึง 10 ซม. เราสังเกตการปรับปรุงเชิงคุณภาพและเชิงปริมาณที่ชัดเจนเกี่ยวกับวิธีการที่ผ่านมา นอกเหนือจากการสร้างที่ไม่มีเงื่อนไขแล้วเรายังแสดงให้เห็นว่าโมเดลของเราสามารถใช้ในการแก้ปัญหาความหลากหลายของงานเช่นการแก้ไขที่ผู้ใช้นำมาซึ่งการสแกนครั้งเดียวและข้อความถึง 3D
สำหรับการสอบถามทางธุรกิจกรุณาเยี่ยมชมเว็บไซต์ของเราและส่งแบบฟอร์ม: Nvidia Research Licensing สำหรับคำถามอื่น ๆ ที่เกี่ยวข้องกับรูปแบบโปรดติดต่อ Xuanchi หรือ Jiahui
โปรดทราบว่าขณะนี้เรารองรับ Linux เท่านั้น เรายินดีต้อนรับการสนับสนุนสำหรับแพลตฟอร์มอื่น ๆ
(ไม่บังคับ) ติดตั้ง libmamba เพื่อการปรับปรุงคุณภาพชีวิตอย่างมากเมื่อใช้ 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 ../..
สำหรับผู้ใช้ Docker เราขอแนะนำให้ใช้ภาพพื้นฐานจากที่นี่และใช้การตั้งค่า conda ด้านบน
ดาวน์โหลดจุดตรวจสอบก่อนหน้าจาก Google Drive และวางไว้ใต้ checkpoints หรือเรามีสคริปต์ที่สามารถดาวน์โหลดทุกอย่างให้คุณโดยอัตโนมัติ (ไม่สามารถใช้งานได้ชั่วคราว):
python inference/download_pretrain.py
การอนุมาน 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}
การอนุมาน 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}
การอนุมาน 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}
รหัสที่ปล่อยออกมามีความแตกต่างจากเวอร์ชันที่อธิบายไว้ในกระดาษ:
- เครือข่ายการปรับแต่งถูกละเว้นสำหรับรหัสทำความสะอาดซึ่งอาจทำให้เกิดการเปลี่ยนแปลงเล็กน้อยในผลลัพธ์ แต่ความแตกต่างเหล่านี้ไม่สำคัญ
- กระบวนการสกัดตาข่ายถูกย้ายจาก VAE ไปยังโพสต์การประมวลผล
เราได้เตรียมคำแนะนำโดยละเอียดเกี่ยวกับการเตรียมข้อมูลและเทคนิคที่เป็นประโยชน์ที่ Xcube Misc
ลิงค์ดาวน์โหลดข้อมูล:
../data/shapenet data/shapenet หรือคุณควรเปลี่ยน _shapenet_path ในการกำหนดค่าโมเดลการฝึกอบรมอัตโนมัติ:
# 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
การฝึกอบรมแบบจำลองการแพร่กระจายแฝง:
# 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
โมเดลการฝึกอบรมอัตโนมัติ:
# 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
การฝึกอบรมแบบจำลองการแพร่กระจายแฝง:
# 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
นอกจากนี้คุณสามารถระบุการตั้งค่าการฝึกอบรมที่แตกต่างกันเพื่อรับโมเดลที่เหมาะกับความต้องการของคุณด้วยตนเอง ธงทั่วไปรวมถึง:
--wname : ชื่อการทดลองเพิ่มเติมเพื่อระบุสำหรับ Wandb Logger--batch_size : NUM ของชุด ทั้งหมด สำหรับ autoencoder และ NUM ของแบทช์ ต่อ GPU สำหรับ diffusion--logger_type : เราใช้ wandb โดยค่าเริ่มต้น; none การสนับสนุน ลิขสิทธิ์© 2024, Nvidia Corporation & Affiliates สงวนลิขสิทธิ์ งานนี้มีให้ภายใต้ใบอนุญาตซอร์สโค้ด 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 }
}