blendtorch
blendtorch 是一个用于将 Blender 无缝集成到 PyTorch 中的 Python 框架,用于从人工视觉数据进行深度学习。我们利用 Eevee(一种新的基于物理的实时渲染器)来实时合成图像和注释,从而避免在许多情况下阻碍模型训练。
如果您发现这个项目有用,欢迎引用它。
功能摘要
- 数据生成:实时将 Blender 渲染流式传输到 PyTorch 数据管道中,用于监督学习和领域随机应用。支持将任意可封装的对象与图像/视频一起发送。内置录制功能可在无需 Blender 的情况下重播数据。双向通信通道允许 Blender 模拟在网络训练期间进行自适应。
更多信息 [examples/datagen], [examples/compositor_normals_depth], [examples/densityopt] - OpenAI Gym 支持:创建和远程控制 Blender 健身房,以训练强化代理。Blender 作为仿真、可视化和交互式实时操作环境。
更多信息 [examples/control]
下图可视化了 blendtorch 在实际检测任务中用于生成人工训练数据的基本概念。
图 1: 使用 Blendtorch,您能够在 Blender 模拟生成的大量随机人工数据上训练您的 PyTorch 模块。
入门
- 阅读下面的安装说明
- 要开始使用 blendtorch 进行训练数据训练,请阅读 [examples/datagen]。
- 要了解如何使用 blendtorch 创建强化训练环境,请阅读 [examples/control]。
先决条件
本程序包已在以下环境下进行了测试:
在 Windows 10 和 Linux 上运行。其他版本可能也能工作,但尚未经过测试。
安装
blendtorch 由两个不同的子包组成:
bendtorch.btt
位于 pkg_pytorch 中,blendtorch.btb
位于 pkg_blender 中,
分别提供 PyTorch 和 Blender 对 blendtorch 的视角。bendtorch.btt
将安装到您的本地 Python 环境中,而 blendtorch.btb
将安装到随 Blender 一起提供的 Python 环境中。
-
克隆此存储库
git clone https://github.com/cheind/pytorch-blender.git <DST>
-
扩展
PATH
确保 Blender 可执行文件在您的环境查找
PATH
中。在 Windows 上,可以通过以下方式实现:set PATH=c:\Program Files\Blender Foundation\Blender 2.91;%PATH%
在 Ubuntu 上,如果使用 snap 安装 blender,可以通过添加以下行到 ~/.bashrc 来包含该路径,
export PATH=/snap/blender/current/${PATH:+:${PATH}}
-
完成 Blender 设置
至少打开一次 Blender,并完成初始设置。如果跳过此步骤,某些测试(特别是与 RL 相关的测试)将会失败(Blender 2.91)。
-
安装
blendtorch.btb
运行
blender --background --python <DST>/scripts/install_btb.py
将
blendtorch-btb
安装到随 Blender 一起提供的 Python 环境中。 -
安装
blendtorch.btt
运行
pip install -e <DST>/pkg_pytorch
将
blendtorch-btt
安装到您打算运行 PyTorch 的 Python 环境中。 -
安装
gym
[可选]虽然不是必需的,但如果您打算将 blendtorch 用于强化学习,建议安装 OpenAI gym
pip install gym
-
安装开发依赖 [可选]
此步骤是可选的。如果您计划运行单元测试
pip install -r requirements_dev.txt pytest tests/
故障排查
运行
blender --version
并检查控制台中是否写出了正确的 Blender 版本(>=2.83)。接下来,确保 blendtorch-btb
安装正确
blender --background --python-use-system-env --python-expr "import blendtorch.btb as btb; print(btb.__version__)"
这应该会打印出 blendtorch 的版本号。接下来,确保 blendtorch-btt
安装正确
python -c "import blendtorch.btt as btt; print(btt.__version__)"
这应该会打印出 blendtorch 的版本号。
架构
请参阅 [examples/datagen] 和 [examples/control] 了解深入的架构讨论。双向通信在 [examples/densityopt] 中有解释。
运行时间
下表显示了简单立方体场景(640x480xRGBA)的每批(8)和每个图像的平均运行时间。有关详细信息,请参见 benchmarks/benchmark.py。计时包括渲染、传输、解码和批量整理。报告的时间是针对 Blender 2.8 的。Blender 2.9 在这个场景上的性能同样出色,但对于更复杂的渲染通常更快。
Blender 实例 | 每批运行时间(秒) | 每图像运行时间(秒) | 参数 |
---|---|---|---|
1 | 0.236 | 0.030 | 刷新 UI |
2 | 0.14 | 0.018 | 刷新 UI |
4 | 0.099 | 0.012 | 刷新 UI |
5 | 0.085 | 0.011 | 无 UI 刷新 |
注意: 如果不需要图像传输,即在物理模拟的强化学习中,可以轻松达到 2000Hz。
引用
本代码伴随我们在机器学习人工图像领域的学术工作 [1],[2]。在引用 blendtorch 时,请考虑以下出版物
@inproceedings{blendtorch_icpr2020_cheind,
author = {Christoph Heindl, Lukas Brunner, Sebastian Zambal and Josef Scharinger},
title = {BlendTorch: A Real-Time, Adaptive Domain Randomization Library},
booktitle = {
1st Workshop on Industrial Machine Learning
at International Conference on Pattern Recognition (ICPR2020)
},
year = {2020},
}
@inproceedings{robotpose_etfa2019_cheind,
author={Christoph Heindl, Sebastian Zambal, Josef Scharinger},
title={Learning to Predict Robot Keypoints Using Artificially Generated Images},
booktitle={
24th IEEE International Conference on
Emerging Technologies and Factory Automation (ETFA)
},
year={2019}
}
注意事项
- 尽管 Blender 2.8x 支持离屏渲染,但它需要 UI 前端,因此无法在
--background
模式下运行。如果您的应用程序不需要离屏渲染,您可以启用后台使用(请参见 tests/ 中的示例)。 - Blender 生成的渲染默认采用线性色彩空间,因此在显示时会比预期暗。