无限逼真世界的创造:采用程序生成技术
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/princeton-vl/infinigen
项目简介
Infinigen是一个使用程序化生成技术生成无限真实世界的项目。通过使用Blender3D建立了一个生成管道,可以生成逼真的场景和对象,包括建筑、道路、树木和车辆等。该项目的主要目的是为计算机视觉领域的研究者和开发者提供一个生成真实图像的工具。
相关技术点
- 程序化生成技术
- Blender3D建模
- 计算机视觉领域的图像生成技术
项目用途
- 生成真实场景和对象用于计算机视觉领域的研究和开发
- 为研究者提供一个生成真实图像的工具,用于测试和评估计算机视觉模型的性能
- 探索程序化生成技术在图像生成领域的应用和发展
无限生成真实世界的 Infinigen 项目
请访问我们的网站 https://infinigen.org
如果您在工作中使用 Infinigen,请引用我们的学术论文:
使用程序生成实现无限真实世界
Alexander Raistrick*, Lahav Lipson*, Zeyu Ma* (*平等贡献,按字母顺序排列)
Lingjie Mei, Mingzhe Wang, Yiming Zuo, Karhan Kayan, Hongyu Wen, Beining Han,
Yihan Wang, Alejandro Newell, Hei Law, Ankit Goyal, Kaiyu Yang, Jia Deng
计算机视觉与模式识别会议 (CVPR) 2023
@inproceedings{infinigen2023infinite,
title={Infinite Photorealistic Worlds Using Procedural Generation},
author={Raistrick, Alexander and Lipson, Lahav and Ma, Zeyu and Mei, Lingjie and Wang, Mingzhe and Zuo, Yiming and Kayan, Karhan and Wen, Hongyu and Han, Beining and Wang, Yihan and Newell, Alejandro and Law, Hei and Goyal, Ankit and Yang, Kaiyu and Deng, Jia},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={12630--12641},
year={2023}
}
安装
该项目已在以下平台上经过测试并可用:
- Ubuntu 22.04.2 LTS
- GPU 选项测试:仅 CPU、GTX-1080、RTX-2080、RTX-3090、RTX-4090(驱动程序 525、CUDA 12.0)
- RAM:16GB
- MacOS Monterey & Ventura,Apple M1 Pro,16GB RAM
我们正在为使用 AMD GPU 进行渲染的支持工作。Windows 用户应使用 WSL2。更多指令即将推出。
运行以下命令以开始
git clone https://github.com/princeton-vl/infinigen.git
cd infinigen
conda create --name infinigen python=3.10
conda activate infinigen
bash install.sh
install.sh 可能需要相当长的时间来下载 Blender3.3 并编译所有源文件。
忽略非致命警告。有关发布 GitHub 问题的指导方针,请参阅 获取帮助
运行以下命令或将其添加到您的 ~/.bashrc(Linux/WSL)或 ~/.bash_profile(Mac)中
# on Linux/WSL
export BLENDER="/PATH/TO/infinigen/blender/blender"
# on MAC
export BLENDER="/PATH/TO/infinigen/Blender.app/Contents/MacOS/Blender"
(可选) OpenGL Ground Truth 安装
上述默认安装说明使您能够运行完整的 Infinigen 场景生成系统
本节将允许您使用我们自己的 --pipeline_configs opengl_gt 地面真实值提取配置,该配置可以避免在 Blender 中进行两次渲染,并提供附加标签,例如遮挡边界、子对象分割、3D 流和简单的 3D 边界框。如果您不需要这些功能,请跳过此部分并使用 在一个命令中生成图像 中所示的 --pipeline_configs blender_gt。本节面向计算机视觉研究人员和高级用户。
git submodule init
git submodule update
sudo apt-get install libglm-dev libglew-dev libglfw3-dev libgles2-mesa-dev zlib1g-dev
如果您没有 sudo 访问权限,则可以尝试以下方法:# Infinigen:生成你的第一个场景
Infinigen通过运行多个任务(通常自动执行,如生成一个命令中的图像(s))来生成场景。本指南将逐步运行它们以演示。这些命令在M1 Mac或Linux桌面上执行需要大约10分钟和16GB的内存。
逐步生成一个场景
cd worldgen
mkdir outputs
# 生成场景布局
$BLENDER -noaudio --background --python generate.py -- --seed 0 --task coarse -g desert simple --output_folder outputs/helloworld/coarse
# 填充独特的资产
$BLENDER -noaudio --background --python generate.py -- --seed 0 --task populate fine_terrain -g desert simple --input_folder outputs/helloworld/coarse --output_folder outputs/helloworld/fine
# 渲染RGB图像
$BLENDER -noaudio --background --python generate.py -- --seed 0 --task render -g desert simple --input_folder outputs/helloworld/fine --output_folder outputs/helloworld/frames
# 为准确的ground-truth再次渲染
$BLENDER -noaudio --background --python generate.py -- --seed 0 --task render -g desert simple --input_folder outputs/helloworld/fine --output_folder outputs/helloworld/frames -p render.render_image_func=@flat/render_image
输出日志应指示代码正在处理什么。使用--debug以获得更多详细信息。每个命令完成后,您可以检查它的--output_folder以获取结果,包括运行$BLENDER outputs/helloworld/coarse/scene.blend或类似的以查看blender文件。出于视口稳定性的考虑,默认情况下我们隐藏了许多网格;要查看它们,请单击“渲染”或使用UI取消隐藏它们。
一键生成图像
我们提供tools/manage_datagen_jobs.py,一个可自动执行这些或类似步骤的实用程序。
python -m tools.manage_datagen_jobs --output_folder outputs/hello_world --num_scenes 1
--pipeline_configs local_16GB monocular blender_gt --specific_seed 0 --configs desert simple
准备好移除保护栏了吗?尝试以下内容:- 将 desert 替换为 config/scene_types 中的任何一个以获得不同的生物群系(或编写自己的疯狂配置文件!)。您还可以添加 configs 中任何文件的名称。
- 将
--specific_seed更改为任何数字以生成不同的场景,或将其删除并设置--num_scenes 50以尝试许多随机种子。 - 删除
simple以生成更详细(但更昂贵)的场景,如预告片所示。 - 阅读并自定义
generate.py以了解 infinigen 在幕后如何工作。 - 在第一个命令中添加
-p compose_scene.grass_chance=1.0以强制出现草(或任何generate.py的 'run_stage' 资产名称)。您可以通过此机制修改整个存储库中的 kwargs @gin.configurable()python 函数。
--configs 使您可以自定义视觉内容的随机分布。如果您没有在文件夹 config/scene_types 中选择任何配置,则代码会随机选择一个配置。
--pipeline_configs 确定将使用哪些计算资源以及每个场景需要哪些渲染作业。可以在 tools/pipeline_configs 中找到配置列表。您必须选择一个配置来确定计算类型(例如 local_64GB 或 slurm)和一个配置来确定数据集类型(例如 monocular 或 monocular_video)。运行 python -m tools.manage_datagen_jobs --help 以获取有关数据集生成的更多选项。
如果您打算使用 CUDA 加速地形(--pipeline_configs enable_gpu),则必须在启用 CUDA 的计算机上运行 install.sh。
Infinigen 在很大程度上使用了 Google 的 "Gin Config",我们鼓励您查阅其文档以熟悉其功能。
探索 Infinigen 代码库
Infinigen 自我们的 CVPR 论文描述的版本以来已经发生了重大变化。它现在具有一些从互联网上获得的以 CC-0 许可证标记的过程代码,在适用的代码注释中标记——CVPR 版本中不存在这样的代码。
Infinigen 是一个正在进行的研究项目,存在一些已知问题。通过使用 Infinigen 的代码和配置文件进行实验,您将找到会在您的硬件上崩溃或无法处理的场景。Infinigen 场景是随机的,具有长尾可能的场景复杂性和计算要求。如果遇到不适合您计算硬件的场景,您应该尝试其他种子,使用其他配置文件,或寻求帮助。
即将推出
Infinigen 将在未来几个月内快速发展。请关注我们的 https://twitter.com/PrincetonVL 获取更新。
我们用于启动视频的代码的某些方面仍在完善中,将尽快发布,包括:
- 动态水和火的流体模拟
- 植物的某些类别,即蛇树和蜘蛛植物
教程和文档
我们将为 Infinigen 的所有方面添加全面的教程和文档。本 README 是 初步版本,我们的文档将扩展到详细介绍项目的所有方面。
贡献
我们欢迎贡献!您可以通过以下方式做出贡献:
- 向此存储库贡献代码 - 我们欢迎代码贡献。更多指南即将推出。
- 贡献程序生成器 -
worldgen/nodes/node_transpiler/dev_script.py提供了将艺术家友好的 Blender 节点 转换为 python 代码的工具。教程和指南即将推出。 - 贡献预生成的数据 - 任何人都可以贡献他们的计算能力来创建数据并与社区共享。请关注预生成数据的存储库。
获取帮助
请在此存储库的 Github 问题页面上寻求帮助。请使用 --debug 运行您的命令,并让我们知道:
- 您的计算设置,包括操作系统版本、CPU、RAM、GPU(s) 和任何驱动程序?- 你使用的代码版本是什么(链接到一个提交哈希),并且你是否进行了任何修改(新配置、代码编辑)?
- 你运行了什么确切的命令?
- 你运行的命令的输出日志是什么?
- 如果使用了
manage_datagen_jobs,请查看outputs/MYJOB/MYSEED/logs/来找到正确的日志文件。 - 如果适用,确切的 Python 错误和堆栈跟踪是什么?
- 如果使用了