4

我有一个在 pytorch 中训练的神经网络,我想将它部署到 Unity 应用程序中。最好的方法是什么?我也有兴趣让用户在 Unity 应用程序中进一步训练神经网络,我想这需要将 pytorch 的某些部分集成到 Unity 中(也许有一种方法可以将 pytorch 的 C++/torchscript API 与 Unity 集成?)。如果有人有这方面的经验,我想知道最好的选择是什么。

4

3 回答 3

8

查看 Unity ML 代理中的新功能。Unity ML Agents(称为梭子鱼)中有一个推理引擎,允许您在应用程序中使用预训练模型。AFAIK,您可以将 Tensorflow 和 ONNX 模型转换为梭子鱼。这应该不是问题,因为 Pytorch 模型可以转换为 ONNX 格式。如果模型直接受应用程序影响(例如,如果它是 RL 代理),您可能需要重新训练模型。

编辑:要回答您的第二个问题,您可以继续训练模型,但不能实时训练。您可以做的是从用户那里收集数据,并使用它来进一步训练模型(这就是 TensorFlow Serving 的工作方式)。您可以通过 ONNX 将 PyTorch 模型转换为 TensorFlow 模型来做到这一点。

编辑 2:梭子鱼现在是一个独立的生产就绪推理引擎,专门在 ONNX 格式上运行。只要包含支持的运算符,任何可以转换为格式的框架(例如 Keras、Pytorch、MXNet)都可以工作。

于 2019-09-16T22:19:16.363 回答
3

这不是一个完整的答案。但它应该能够帮助你进一步进步。

本质上,正如我所见,您只需要能够在 C# 代码中运行 Python 代码。在这种情况下与 Unity 的框架协作。

我做了一些搜索,发现了 4 个部分解决方案:

  1. Unity python 解释器:https ://forum.unity.com/threads/python-interpreter-in-unity.86461/

  2. 在 Unity 中使用 IronPython 运行代码的示例:https ://gamedev.stackexchange.com/questions/123526/a-python-script-controlling-a-unity-game

  3. Unity3D C# 和 Python 之间的通信示例,使用 ZeroMQ:https ://unitylist.com/p/hc8/Unity3D-Python-Communication

  4. 通过 XML 文件自己实现对其他语言的语言支持:https ://forum.unity.com/threads/add-multiple-language-support-to-your-unity-projects.206271/

一旦你能够运行代码,你就需要参考你的 python 文件的位置。这样,如果您运行它的环境也安装并正确设置了 Python,您应该能够运行它。

您必须确保这些文件在部署时位于您的项目中。Unity 可以访问它们。

希望这对您有所帮助。

于 2019-05-27T05:27:05.567 回答
0

https://github.com/asus4/tf-lite-unity-sample展示了如何在Android和IOS应用tensorflow模型,通过梭子鱼也可以在移动平台应用onnx模型,tf-lite-unity-sample更快比梭鱼。

于 2021-11-27T03:44:07.187 回答