Downloads · 30 days
0
Webaverse/Stable-Dreamfusion
Stable-Dreamfusion is a machine learning model from Webaverse. Use it for the machine learning task on the model card, and read the license before you ship it in a product. The card lists the license as mit.
A pytorch implementation of the text-to-3D model Dreamfusion, powered by the Stable Diffusion text-to-2D model.
Downloads · 30 days
0
Access
Public
Updated Oct 24, 2022
Repo size
—
Likes
60
Public
Click a slice to open those files.
.py192 KB · 57%
From the Hugging Face model README
A pytorch implementation of the text-to-3D model Dreamfusion, powered by the Stable Diffusion text-to-2D model.
The original paper's project page: DreamFusion: Text-to-3D using 2D Diffusion.
Examples generated from text prompt a high quality photo of a pineapple viewed with the GUI in real time:
This project is a work-in-progress, and contains lots of differences from the paper. Also, many features are still not implemented now. The current generation quality cannot match the results from the original paper, and many prompts still fail badly!
git clone https://github.com/ashawkey/stable-dreamfusion.git
cd stable-dreamfusion
Important: To download the Stable Diffusion model checkpoint, you should provide your access token. You could choose either of the following ways:
huggingface-cli login and enter your token.TOKEN under this directory (i.e., stable-dreamfusion/TOKEN) and copy your token into it.pip install -r requirements.txt
# (optional) install nvdiffrast for exporting textured mesh (--save_mesh)
pip install git+https://github.com/NVlabs/nvdiffrast/
# (optional) install the tcnn backbone if using --tcnn
pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
# (optional) install CLIP guidance for the dreamfield setting
pip install git+https://github.com/openai/CLIP.git
By default, we use load to build the extension at runtime.
We also provide the setup.py to build each extension:
# install all extension modules
bash scripts/install_ext.sh
# if you want to install manually, here is an example:
pip install ./raymarching # install to python path (you still need the raymarching/ folder, since this only installs the built extension.)
First time running will take some time to compile the CUDA extensions.
### stable-dreamfusion setting
## train with text prompt (with the default settings)
# `-O` equals `--cuda_ray --fp16 --dir_text`
# `--cuda_ray` enables instant-ngp-like occupancy grid based acceleration.
# `--fp16` enables half-precision training.
# `--dir_text` enables view-dependent prompting.
python main.py --text "a hamburger" --workspace trial -O
# if the above command fails to generate things (learns an empty scene), maybe try:
# 1. disable random lambertian shading, simply use albedo as color:
python main.py --text "a hamburger" --workspace trial -O --albedo_iters 10000 # i.e., set --albedo_iters >= --iters, which is default to 10000
# 2. use a smaller density regularization weight:
python main.py --text "a hamburger" --workspace trial -O --lambda_entropy 1e-5
# you can also train in a GUI to visualize the training progress:
python main.py --text "a hamburger" --workspace trial -O --gui
# A Gradio GUI is also possible (with less options):
python gradio_app.py # open in web browser
## after the training is finished:
# test (exporting 360 video)
python main.py --workspace trial -O --test
# also save a mesh (with obj, mtl, and png texture)
python main.py --workspace trial -O --test --save_mesh
# test with a GUI (free view control!)
python main.py --workspace trial -O --test --gui
### dreamfields (CLIP) setting
python main.py --text "a hamburger" --workspace trial_clip -O --guidance clip
python main.py --text "a hamburger" --workspace trial_clip -O --test --gui --guidance clip
This is a simple description of the most important implementation details. If you are interested in improving this repo, this might be a starting point. Any contribution would be greatly appreciated!
./nerf/sd.py > StableDiffusion > train_step:# 1. we need to interpolate the NeRF rendering to 512x512, to feed it to SD's VAE.
pred_rgb_512 = F.interpolate(pred_rgb, (512, 512), mode='bilinear', align_corners=False)
# 2. image (512x512) --- VAE --> latents (64x64), this is SD's difference from Imagen.
latents = self.encode_imgs(pred_rgb_512)
... # timestep sampling, noise adding and UNet noise predicting
# 3. the SDS loss, since UNet part is ignored and cannot simply audodiff, we manually set the grad for latents.
w = self.alphas[t] ** 0.5 * (1 - self.alphas[t])
grad = w * (noise_pred - noise)
latents.backward(gradient=grad, retain_graph=True)
./nerf/utils.py > Trainer > train_step.
./nerf/renderer.py > NeRFRenderer > run_cuda.
--cuda_ray) may harm the generation progress, since once a grid cell is marked as empty, rays won't pass it later...--cuda_ray also works now:
# `-O2` equals `--fp16 --dir_text`
python main.py --text "a hamburger" --workspace trial -O2 # faster training, but slower rendering
Training is faster if only sample 128 points uniformly per ray (5h --> 2.5h).
More testing is needed..../nerf/network*.py > NeRFNetwork > forward. Current implementation harms training and is disabled.
./nerf/provider.py > get_view_direction.
--angle_overhead, --angle_front to set the border. How to better divide front/back/side regions?./nerf/network*.py) can be chosen by the --backbone option, but tcnn and vanilla are not well tested../nerf/network*.py > NeRFNetwork > gaussian.The amazing original work: DreamFusion: Text-to-3D using 2D Diffusion.
@article{poole2022dreamfusion,
author = {Poole, Ben and Jain, Ajay and Barron, Jonathan T. and Mildenhall, Ben},
title = {DreamFusion: Text-to-3D using 2D Diffusion},
journal = {arXiv},
year = {2022},
}
Huge thanks to the Stable Diffusion and the diffusers library.
@misc{rombach2021highresolution,
title={High-Resolution Image Synthesis with Latent Diffusion Models},
author={Robin Rombach and Andreas Blattmann and Dominik Lorenz and Patrick Esser and Björn Ommer},
year={2021},
eprint={2112.10752},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
@misc{von-platen-etal-2022-diffusers,
author = {Patrick von Platen and Suraj Patil and Anton Lozhkov and Pedro Cuenca and Nathan Lambert and Kashif Rasul and Mishig Davaadorj and Thomas Wolf},
title = {Diffusers: State-of-the-art diffusion models},
year = {2022},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/huggingface/diffusers}}
}
The GUI is developed with DearPyGui.