
Xcube: النمذجة التوليدية ثلاثية الأبعاد واسعة النطاق باستخدام التسلسلات الهرمية Voxel متناثرة
Xuanchi Ren ، Jiahui Huang ، Xiaohui Zeng ، Ken Museth ، Sanja Fidler ، Francis Williams
ورقة ، صفحة المشروع
الخلاصة: نقدم Xcube (مختصرة كـ X 3 ) ، وهو نموذج توليدي جديد لشبكات فوكسل ثلاثية الأبعاد متناثرة عالية الدقة مع سمات تعسفية. يمكن أن يولد نموذجنا ملايين من الفوكسل بأرقى دقة فعالة تصل إلى 1024 3 بأسلوب التغذية إلى الأمام دون تحسين وقت الاختبار المستهلك للوقت. لتحقيق ذلك ، نستخدم نموذج نشر فوكسل الهرمي الذي يولد شبكات دقة أعلى تدريجياً بطريقة خشنة إلى حدوث إطار مخصص مبني على بنية بيانات VDB عالية الكفاءة. بصرف النظر عن توليد كائنات عالية الدقة ، فإننا نوضح فعالية Xcube على مشاهد كبيرة في الهواء الطلق على مقاييس 100 متر × 100 متر مع حجم فوكسل صغير يصل إلى 10 سم. نلاحظ تحسينات نوعية وكمية واضحة على الأساليب السابقة. بالإضافة إلى الجيل غير المشروط ، نوضح أنه يمكن استخدام نموذجنا لحل مجموعة متنوعة من المهام مثل التحرير الموجهة للمستخدم ، وإكمال المشهد من فحص واحد ، ونص إلى 3D.
للاستفسارات التجارية ، يرجى زيارة موقعنا على الويب وتقديم النموذج: ترخيص NVIDIA Research. لأي أسئلة أخرى تتعلق بالنموذج ، يرجى الاتصال بـ Xuanchi أو Jiahui.
لاحظ أننا ندعم Linux حاليًا فقط. نرحب بالدعم للمنصات الأخرى.
(اختياري) قم بتثبيت libmamba للحصول على نوعية كبيرة من الحياة عند استخدام كوندا
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 . أو يمكنك تغيير _shapenet_path في التكوين.تدريب نماذج 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
تدريب نماذج الانتشار الكامن:
# 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
تدريب نماذج 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
تدريب نماذج الانتشار الكامن:
# 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 of Batch in Total for autoencoder و NUM من الدفعة لكل وحدة معالجة الرسومات 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 }
}