Stable-Dreamfusion 是一个基于 PyTorch 的文本到 3D 与图像到 3D 生成实现,核心思路来自 DreamFusion 论文,并使用 Stable Diffusion 作为文本到 2D 的扩散模型。项目通过 NeRF 与扩散模型结合,支持网格导出。
主要能力:
- 文本到 3D(Text-to-3D)生成。
- 图像到 3D(Image-to-3D)生成。
- 网格导出(Mesh Exportation)。
- 支持 Perp-Neg,用于缓解 Text-to-3D 中的多头部问题(multi-head problem),适用于 Stable Diffusion 和 DeepFloyd-IF。
- 提供 Instant-NGP 骨干(-O)和 Vanilla NeRF 骨干(-O2)的 Colab notebooks。
实现与论文差异:
- 由于 Imagen 模型未公开,项目使用 Stable Diffusion 替代(实现来自 diffusers)。Stable Diffusion 是 latent diffusion 模型,在潜在空间扩散,因此需要损失从 VAE 编码器部分反向传播,带来额外训练时间成本。
- 使用多分辨率网格编码器实现 NeRF 骨干(来自 torch-ngp),渲染速度更快(800x800 下约 10FPS)。
- 默认使用 Adan 优化器。
使用方式:
- 可选:创建 python 虚拟环境(推荐使用 conda 或 venv 避免包冲突)。
- 使用 pip 安装。
- 下载预训练模型:
- 图像条件 3D 生成需要下载 Zero-1-to-3 的 zero123-xl.ckpt,路径硬编码在 guidance/zero123_utils.py。
- 深度和法线预测需要 Omnidata 的 omnidata_dpt_depth_v2.ckpt 与 omnidata_dpt_normal_v2.ckpt,路径硬编码在 preprocess_image.py。
- 使用 DeepFloyd-IF 需接受 Hugging Face 使用条件并 huggingface-cli login。
- DMTet 提供预生成的 32/64/128 分辨率四面体网格,256 分辨率需另行获取。
- 构建扩展(可选):默认在运行时构建,也提供 setup.py。
- Taichi 后端(可选):用于 Instant-NGP,无需 CUDA 构建,性能与 CUDA 实现相当。
适用场景:
- 文本或图像驱动的 3D 内容生成研究与实验。
- 对 DreamFusion 复现与改进的探索。
限制与注意事项:
- 项目为进行中工作,与论文存在许多差异,当前生成质量无法匹配原论文,许多提示词仍会失败。
- 首次运行需编译 CUDA 扩展,耗时较长。
- 已知问题包括 OpenGL 安装问题(eglInitialize 失败)、扩展版本不兼容(TypeError: xxx_forward(): incompatible function arguments)。
- 测试环境:Ubuntu 22,torch 1.12 & CUDA 11.6,V100。
- 提供脚本(scripts)与高级技巧(Advanced Tips)文档。
- 支持复现论文 CLIP R-precision 评估。
项目还致谢了 DreamFusion、Magic3D、Zero-1-to-3、Perp-Neg、RealFusion、Fantasia3D、Make-It-3D、Stable Diffusion 与 diffusers 等研究。GUI 使用 DearPyGui 开发。