如何在Unity中部署PyTorch神经网络用于生产代码

5
我有一个在 pytorch 训练好的神经网络,我想将其部署到 Unity 应用程序中。有什么最好的方法吗?我还想让用户在 Unity 应用程序中进一步训练神经网络,这可能需要将 pytorch 的某些部分集成到 Unity 中(也许可以通过集成 pytorch 的 C++/torchscript API 和 Unity 来实现?)。如果有人有相关经验,请告诉我最佳的选择是什么。

Unity有一个机器学习工具包,你可能想要查看一下。 - Doh09
我熟悉ML agents,但这并不能回答我的问题。ML agents只是一组需要与外部ML框架通信的环境集合。我对将ML引擎嵌入到Unity应用程序中很感兴趣。 - Mei Zhang
从未声称它会回答你的问题。提到它只是为了让你知道它的存在。因此,我发表了评论而不是答案。 - Doh09
1
你在Unity应用中使用Pytorch进行训练有成功吗?你采取了什么方法? - Florian Wolf
3个回答

9
请查看Unity ML Agents的新功能。在Unity ML Agents中有一个推理引擎(称为Barracuda),可以让您在应用程序中使用预训练模型。据我所知,您可以将TensorFlow和ONNX模型转换为Barracuda格式。这应该不是问题,因为Pytorch模型可以转换为ONNX格式。如果模型直接受应用程序影响(例如,如果它是RL代理),则您可能需要重新训练模型。
EDIT:回答您的第二个问题,您可以继续训练模型,但不能实时进行。您可以通过收集用户数据并使用其来进一步训练模型来实现这一点(这就是TensorFlow Serving的工作原理)。您可以通过通过ONNX将PyTorch模型转换为TensorFlow模型来实现此目的。
EDIT 2:Barracuda现在是一个独立且可用于生产的推理引擎,它仅运行在ONNX格式上。任何可以转换为该格式(例如Keras、Pytorch、MXNet)的框架都可以正常工作,只要它们包含支持的运算符。

请问您能否详细说明支持的运算符及其实现方法? - Logic1

3
这不是一个完整的答案,但它应该能够帮助您进一步了解。基本上,您只需要在 C# 代码中运行 Python 代码,与 Unity 框架协作。我进行了一些搜索,并找到了 4 个部分解决方案:
  1. Unity Python 解释器:https://forum.unity.com/threads/python-interpreter-in-unity.86461/
  2. 使用 IronPython 在 Unity 中运行代码的示例: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 可以访问它们。希望这可以帮助到您。

你能否使用这些方法之一在构建中训练mlagents?另外,这是否意味着没有办法在构建中包含Python,以便最终用户不需要在计算机上安装Python?我正在尝试创建一个分发应用程序,其中用户可以训练自己的代理。目前,我遇到了Python障碍,并且正在考虑完全在C#中实现我选择的RL算法... - Florian Wolf

0

虽然这个链接可能回答了问题,但最好在这里包含答案的必要部分,并提供参考链接。仅链接的答案如果链接页面更改可能会变得无效。-【来自评论】 - miken32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接