马宝瑞<sup>1*</sup>,邓浩歌<sup>2,1*</sup>,周俊生<sup>3,1</sup>,刘云生<sup>3</sup>,黄铁军<sup>1,4</sup>,王鑫龙<sup>1</sup>
<sup>1</sup>北京智源人工智能研究院,<sup>2</sup>北京邮电大学,<sup>3</sup>清华大学,<sup>4</sup>北京大学 <br> <sup>*</sup> 共同第一作者
我们提出了GeoDream,这是一种将显式广义3D先验与2D扩散先验相结合的3D生成方法,以增强获得明确的3D一致几何结构的能力,同时不牺牲多样性或保真度。 我们的数值和视觉比较表明,GeoDream生成的3D一致纹理网格具有更高分辨率的真实渲染效果(即1024 × 1024),并且在语义连贯性方面表现更好。 据我们所知,为了全面评 估语义连贯性,我们首次提出了<b style="color: rgb(255, 0, 0);">Uni3D-score度量</b>,将测量从2D提升到3D。您可以在下面找到GeoDream训练和3D度量<a href="https://github.com/baaivision/Uni3D">Uni3D</a>-score评估代码的详细使用说明。
GeoDream通过将显式3D先验与2D扩散先验相结合来缓解双面问题。GeoDream生成一致的<b style="color: rgb(255, 0, 0);">多视角渲染图像</b>和丰富细节的<b style="color: rgb(255, 0, 0);">纹理网格</b>。
与基线方法的定性比较。后视图用<b style="color: rgb(255, 0, 0);">红色矩形</b>突出显示,以清晰观察多个面。
[2024年1月5日] 为GeoDream添加了ThreeStudio扩展支持。扩展实现可以在<a href="https://github.com/baaivision/GeoDream/tree/threestudio">threestudio分支</a>找到。
[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上进行了测试。
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+cu113
和torch2.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
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.yaml
、configs/geodream-dmtet-geometry.yaml
和configs/geodream-dmtet-texture.yaml
中将pretrained_model_name_or_path
和pretrained_model_name_or_path_lora
设置为本地路径。
3D生成需要以下两个步骤。
从两种方式中选择一种。
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 ..
第一阶段获得的渲染图像
第二+三阶段获得的渲染图像
注意:我们压缩了这些动图以加快预览速度。
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.sh
和mesh-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相关材料,包括:
GeoDream基于以下优秀的开源项目构建:Uni3D、ThreeStudio、MVDream、One2345、Zero123、Zero123++。
感谢这些项目的维护者对社区的贡献!
如果你觉得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}
}
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者 提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号