目录
一、Sentis 介绍
1、Sentis 概述
2、支持的平台
3、支持的模型类型
二、Sentis 接入流程
1、安装 Sentis
2、Sentis 工作流程
a、加载模型
b、为模型创建输入
c、创建推理引擎(Worker)
d、Schedule模型
e、获取模型输出
f、解析模型数据
一、Sentis 介绍
1、Sentis 概述
Sentis 是 Unity 的一个神经网络推理库。该软件包目前处于“发布”状态,所有 Unity 用户均可通过软件包管理器获取。您可以使用 Sentis 将训练好的神经网络模型导入 Unity,然后实时运行它们。Sentis 利用最终用户的设备计算能力(GPU 或 CPU),并且可以运行任何支持的 Unity 运行时平台。
接入运行模型流程:
| 部分 | 描述 |
|---|---|
| 开始 | 安装 Sentis,查找并使用示例项目,并了解 Sentis 工作流程。 |
| 创建模型 | 通过导入 ONNX 模型文件或使用 Sentis 模型 API 来创建运行时模型。 |
| 运行模型 | 为模型创建输入数据,创建引擎来运行模型并获取输出。 |
| 使用张量 | 获取、设置和修改输入和输出数据。 |
| 分析模型 | 使用 Unity 工具来分析模型的速度和性能。 |
2、支持的平台
Sentis 适用于所有 Unity 运行时平台。
性能可能会有所不同,取决于:
- 模型运算符和复杂性。
- 最终用户硬件和软件平台的限制。
- 所用引擎的类型。有关更多信息,请参阅模型和创建引擎。
3、支持的模型类型
Sentis 支持大多数开放神经网络交换 (ONNX) 格式的模型,其opset 版本在 7 到 15 之间。
二、Sentis 接入流程
1、安装 Sentis
Sentis 包可从 Unity 包管理器获取。Sentis 2.0.0 与 Unity 2023.2(或更高版本)兼容。可以根据编辑器版本选择对应的Sentis版本。
要将 Sentis 包添加到 Unity 项目:
- 创建一个新的 Unity 项目或打开一个现有项目。
- 要打开包管理器,请导航至窗口>包管理器。
- 单击+并选择按名称添加包...。
- 进入
com.unity.sentis。 - 单击“添加”将包添加到您的项目中。

2、Sentis 工作流程
要使用 Sentis 在 Unity 中运行神经网络,请按照以下步骤操作:
- 使用
Unity.Sentis命名空间。 - 加载神经网络模型文件。
- 为模型创建输入。
- 创建一个推理引擎(一个工作者)。
- 使用输入运行模型来计算结果(推理)。
- 得到结果。
a、加载模型
Sentis 可以导入开放神经网络交换(ONNX) 格式的模型文件。要加载模型,请按照以下步骤操作:
-
从机器学习框架将模型导出为 ONNX 格式或从互联网下载 ONNX 模型。
-
将模型文件添加到Project
Assets窗口的文件夹中。 -
在脚本中创建运行时模型:
你也可以public ModelAsset modelAsset在 GameObjects 中添加一个公共变量。在这种情况下,需要手动指定模型。ModelAsset modelAsset = Resources.Load("model-file-in-assets-folder") as ModelAsset; var runtimeModel = ModelLoader.Load(modelAsset);
b、为模型创建输入
使用Tensor API 为模型创建包含数据的张量。您可以将数组或纹理转换为张量。例如:
// Convert a texture to a tensor
Texture2D inputTexture = Resources.Load("image-file") as Texture2D;
Tensor<float> inputTensor = TextureConverter.ToTensor(inputTexture);
// Convert an array to a tensor
int[] array = new int[] {1,2,3,4};
Tensor<int> inputTensor = new Tensor<int>(new TensorShape(4), array);
c、创建推理引擎(Worker)
在 Sentis 中,Worker 是推理引擎。您可以创建一个 Worker,将模型分解为可执行任务,在 GPU 或 CPU 上运行这些任务,并检索结果。例如,下面创建一个使用 Sentis 计算着色器在 GPU 上运行的工作器:
Worker worker = new Worker(runtimeModel, BackendType.GPUCompute);
d、Schedule模型
要运行模型,请使用Schedule带有输入张量的 worker 对象的方法。Sentis 在给定的后端调度模型层。执行是异步的,因此调用此方法后,张量操作可能仍处于待处理状态。
worker.Schedule(inputTensor);
e、获取模型输出
您可以使用诸如以下方法PeekOutput从模型中获取输出数据。例如:
Tensor<float> outputTensor = worker.PeekOutput() as Tensor<float>;
f、解析模型数据
具体模型需要具体分析,可参考之后的案例。