文章目录
1. 导入模型文件
要导入 ONNX 模型文件,请将文件从计算机拖到“Project”窗口的“Assets”文件夹中。
如果您的模型有外部权重文件,请将它们放在与模型文件相同的目录中,以便 Sentis 自动导入它们。
支持的模型
您可以导入 opset 版本在 7 到 15 之间的大多数 ONNX 模型文件。低于 7 或高于 15 的版本可能仍会导入 Sentis,但您可能会得到意外结果。
Sentis 不支持以下内容:
- 使用超过 8 个维度的张量的模型。
- 稀疏输入张量或常数。
- String张量。
- 复数张量。
Sentis 还将一些张量数据类型(如布尔值)转换为浮点数或整数。这可能会增加模型使用的内存。
当您导入模型文件时,Sentis 会优化模型。有关详细信息,请参阅了解 Sentis 中的模型。
创建运行时模型
要使用导入的模型,必须使用 ModelLoader.Load 创建运行时模型对象。
using UnityEngine;
using Unity.Sentis;
public class CreateRuntimeModel : MonoBehaviour
{
public ModelAsset modelAsset;
Model runtimeModel;
void Start()
{
runtimeModel = ModelLoader.Load(modelAsset);
}
}
然后,您可以创建一个引擎来运行模型。
导入错误
如果“模型资源导入设置”窗口显示警告,表明您的模型包含不受支持的运算符,您可以添加自定义层来实现缺少的运算符。有关示例,请参阅示例脚本中的添加自定义层示例。
2. 为模型创建输入
要检查模型所需输入的形状和大小,请打开 ONNX 模型导入设置并检查输入部分。
将数组转换为张量
要从一维数据数组创建张量,请按照下列步骤操作:
- 创建一个具有每个轴长度的 TensorShape 对象。
- 使用 TensorShape 对象和数据数组创建一个 Tensor 对象。
例如,以下代码为采用形状为 3 × 1 × 3 的输入张量的模型创建一个张量。
using UnityEngine;
using Unity.Sentis;
public class ConvertArrayToTensor : MonoBehaviour
{
void Start()
{
// 创建一个包含 9 个值的数据数组
float[] data