Project Icon

GeoDream

融合2D和几何先验实现高保真一致的3D生成

GeoDream是一种创新的3D生成方法,通过结合广义3D先验和2D扩散先验,提高了生成一致3D几何结构的能力,同时保持多样性和保真度。该方法生成的3D纹理网格具有更高一致性,可渲染1024x1024分辨率的逼真图像,并改善语义连贯性。GeoDream还首次提出Uni3D-score指标,将语义一致性评估从2D提升到3D。

我们提出了GeoDream,这是一种将显式广义3D先验与2D扩散先验相结合的3D生成方法,以增强获得明确的3D一致几何结构的能力,同时不牺牲多样性或保真度。 我们的数值和视觉比较表明,GeoDream生成的3D一致纹理网格具有更高分辨率的真实渲染效果(即1024 × 1024),并且在语义连贯性方面表现更好。 据我们所知,为了全面评估语义连贯性,我们首次提出了Uni3D-score度量,将测量从2D提升到3D。您可以在下面找到GeoDream训练和3D度量Uni3D-score评估代码的详细使用说明。

GeoDream通过将显式3D先验与2D扩散先验相结合来缓解双面问题。GeoDream生成一致的多视角渲染图像和丰富细节的纹理网格

与基线方法的定性比较。后视图用红色矩形突出显示,以清晰观察多个面。

新闻

[2024年1月5日] 为GeoDream添加了ThreeStudio扩展支持。扩展实现可以在threestudio分支找到。

[2023年12月20日] 添加了对Stable-Zero123的支持。按照这里的说明尝试使用。

[2023年12月2日] 代码发布。

安装

git clone https://github.com/baaivision/GeoDream.git
cd GeoDream

由于预训练的多视图扩散用于预测源视图和构建代价体积的代码之间存在环境冲突,我们目前不得不使用两个独立的虚拟环境。这对研究人员来说很不方便,我们正在努力解决这些冲突,作为未来更新计划的一部分。

安装用于预测源视图的环境

有关安装的其他信息,请参见mv-diffusion/README.md

安装用于构建代价体积的环境

有关其他信息(包括通过Docker安装),请参见installation.md

以下步骤已在Ubuntu20.04上进行了测试。

  • 您必须拥有至少24GB VRAM的NVIDIA显卡,并安装了CUDA
  • 安装Python >= 3.8
  • (可选,推荐)创建虚拟环境:
python3 -m virtualenv venv
. venv/bin/activate

# 较新版本的pip(如pip-23.x)可能比旧版本(如pip-20.x)快得多。
# 例如,它会缓存git包的轮子,以避免以后不必要的重新构建。
python3 -m pip install --upgrade pip
  • 安装PyTorch >= 1.12。我们已在torch1.12.1+cu113torch2.0.0+cu118上进行了测试,但其他版本也应该可以正常工作。
# torch1.12.1+cu113
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
# 或 torch2.0.0+cu118
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
  • (可选,推荐)安装ninja以加速CUDA扩展的编译:
pip install ninja
  • 安装依赖项:
pip install -r requirements.txt
pip install inplace_abn
FORCE_CUDA=1 pip install --no-cache-dir git+https://github.com/mit-han-lab/torchsparse.git@v1.4.0

如果您在连接Hugging Face时遇到不稳定的情况,我们建议您:(1) 在第一次运行获取所有需要的文件后,在运行命令之前设置环境变量TRANSFORMERS_OFFLINE=1 DIFFUSERS_OFFLINE=1 HF_HUB_OFFLINE=1,以避免每次运行时都连接到Hugging Face,或者 (2) 按照这里这里的说明将您使用的指导模型下载到本地文件夹,并在configs/geodream-neus.yamlconfigs/geodream-dmtet-geometry.yamlconfigs/geodream-dmtet-texture.yaml中将pretrained_model_name_or_pathpretrained_model_name_or_path_lora设置为本地路径。

快速开始

3D生成需要以下两个步骤。

  1. 预测源视图并构建代价体积(从以下两种方式中选择一种)
  2. GeoDream训练

预测源视图并构建代价体积

从两种方式中选择一种。

通过给定的参考视图和提示驱动预测源视图并构建代价体积

conda activate geodream_mv
cd ./mv-diffusion
sh run-volume-by-zero123.sh "An astronaut riding a horse" "ref_imges/demo.png"
# 默认使用Zero123。如果生成的结果不令人满意,可以考虑使用Stable Zero123。
sh run-volume-by-sd-zero123.sh "An astronaut riding a horse" "ref_imges/demo.png"
conda deactivate
cd ..

通过给定的提示驱动预测源视图并构建代价体积

conda activate geodream_mv
cd ./mv-diffusion
sh step1-run-mv.sh "An astronaut riding a horse"
conda deactivate
. venv/bin/activate
sh step2-run-volume.sh "An astronaut riding a horse"
cd ..

GeoDream训练

第一阶段获得的渲染图像

第二+三阶段获得的渲染图像

注意:我们压缩了这些动图以加快预览速度。

conda deactivate
. venv/bin/activate
# --------- 第一阶段 (NeuS) --------- #
# 使用512x512 NeuS渲染进行物体生成,~25GB VRAM
python launch.py --config configs/geodream-neus.yaml --train --gpu 0 system.prompt_processor.prompt="an astronaut riding a horse" system.geometry.init_volume_path="mv-diffusion/volume/An_astronaut_riding_a_horse/con_volume_lod_150.pth"
# 如果您没有足够的VRAM,可以尝试使用64x64 NeuS渲染进行训练,~15GB VRAM
python launch.py --config configs/geodream-neus.yaml --train --gpu 0 system.prompt_processor.prompt="an astronaut riding a horse" system.geometry.init_volume_path="data/con_volume_lod_150.pth" data.width=64 data.height=64
# 对预训练和LoRA使用相同的模型可以使用<10GB VRAM进行64x64训练
# 但由于使用了epsilon预测模型进行LoRA训练,质量会较差
python launch.py --config configs/geodream-neus.yaml --train --gpu 0 system.prompt_processor.prompt="an astronaut riding a horse" system.geometry.init_volume_path="data/con_volume_lod_150.pth" data.width=64 data.height=64 system.guidance.pretrained_model_name_or_path_lora="stabilityai/stable-diffusion-2-1-base"

# --------- 第二阶段 (DMTet几何细化) --------- #
# 细化几何
python launch.py --config configs/geodream-dmtet-geometry.yaml --train system.geometry_convert_from=path/to/stage1/trial/dir/ckpts/last.ckpt --gpu 0 system.prompt_processor.prompt="an astronaut riding a horse" system.renderer.context_type=cuda system.geometry_convert_override.isosurface_threshold=0.0
# --------- 第3阶段(DMTet纹理化) --------- #
# 使用1024x1024分辨率光栅化、Stable Diffusion VSD引导进行纹理化,需要约20GB显存
python launch.py --config configs/geodream-dmtet-texture.yaml system.geometry.isosurface_resolution=256 --train data.batch_size=2 system.renderer.context_type=cuda --gpu 0 system.geometry_convert_from=path/to/stage2/trial/dir/ckpts/last.ckpt system.prompt_processor.prompt="一名宇航员骑马"
# 如果显存不足,可以尝试使用batch_size=1训练,需要约10GB显存
python launch.py --config configs/geodream-dmtet-texture.yaml system.geometry.isosurface_resolution=256 --train data.batch_size=1 system.renderer.context_type=cuda --gpu 0 system.geometry_convert_from=path/to/stage2/trial/dir/ckpts/last.ckpt system.prompt_processor.prompt="一名宇航员骑马"

我们还为研究人员提供了相应的脚本以供参考:neus-train.sh对应第1阶段,mesh-finetuning-geo.shmesh-finetuning-texture.sh分别对应第2和第3阶段。

从检查点恢复

如果你想从检查点恢复训练,请执行以下操作:

# 从最后一个检查点恢复训练,你可以用任何其他检查点替换last.ckpt
python launch.py --config path/to/trial/dir/configs/parsed.yaml --train --gpu 0 resume=path/to/trial/dir/ckpts/last.ckpt
# 如果训练已完成,你仍可以通过设置trainer.max_steps来继续训练更长时间
python launch.py --config path/to/trial/dir/configs/parsed.yaml --train --gpu 0 resume=path/to/trial/dir/ckpts/last.ckpt trainer.max_steps=20000
# 你也可以使用恢复的检查点进行测试
python launch.py --config path/to/trial/dir/configs/parsed.yaml --test --gpu 0 resume=path/to/trial/dir/ckpts/last.ckpt
# 注意,上述命令使用了先前试验的已解析配置文件
# 这将继续使用相同的试验目录
# 如果你想保存到新的试验目录,请在命令中将parsed.yaml替换为raw.yaml

# 仅从保存的检查点加载权重,但不恢复训练(即不加载优化器状态):
python launch.py --config path/to/trial/dir/configs/parsed.yaml --train --gpu 0 system.weights=path/to/trial/dir/ckpts/last.ckpt

导出渲染视频

python launch.py --config path/to/trial/dir/configs/parsed.yaml --test --gpu 0 resume=path/to/trial/dir/ckpts/last.ckpt

导出纹理网格

从第2+3阶段获得的纹理网格

要将场景导出为纹理网格,请使用--export选项。我们目前支持导出为obj+mtl格式,或带有顶点颜色的obj格式。

# 这使用默认的mesh-exporter配置,导出obj+mtl格式
python launch.py --config "path/to/stage3/trial/dir/configs/parsed.yaml"  --export --gpu 0 resume="path/to/stage3/trial/dir/ckpts/last.ckpt"  system.exporter_type=mesh-exporter system.exporter.context_type=cuda

计划

我们致力于开源GeoDream相关材料,包括:

  • 文本到3D推理代码
  • 导出渲染视频
  • 纹理网格提取
  • 基于单视图参考图像的文本到3D
  • Uni3D评分的评估代码,将语义一致性测量从2D提升到3D
  • 发布我们生成结果的检查点,以帮助研究人员进行公平比较
  • 测试提示词

致谢

GeoDream基于以下优秀的开源项目构建:Uni3DThreeStudioMVDreamOne2345Zero123Zero123++

感谢这些项目的维护者对社区的贡献!

引用

如果你觉得GeoDream有帮助,请考虑引用:

@inproceedings{Ma2023GeoDream,
    title = {GeoDream: Disentangling 2D and Geometric Priors for High-Fidelity and Consistent 3D Generation},
    author = {Baorui Ma and Haoge Deng and Junsheng Zhou and Yu-Shen Liu and Tiejun Huang and Xinlong Wang},
    journal={arXiv preprint arXiv:2311.17971},
    year={2023}
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号