Unity Sentis:Runtime 使用 AI 模型

SentisUnity 推出的一个用于在 Unity 环境中运行机器学习模型的框架,可以简化将机器学习模型集成到 Unity 项目中的过程。

使用方法

1. 安装 Sentis

打开 Window > Package Manager
点击 + 选择 Add package by name
输入 com.unity.sentis 安装

2. 导入模型

Hugging Face 选择并下载你需要的模型,或者去 ModelZoo 之类下载。
Hugging Face 上,模型通常以 PyTorchTensorFlow 格式提供,需要转换为 ONNX 格式。

假设你使用的是 PyTorch 模型,可以使用 torch.onnx.export 方法来完成转换。

import torch
from transformers import AutoModel

# Load your Hugging Face model
model = AutoModel.from_pretrained("your-model-name")

# Set the model to evaluation mode
model.eval()

# Dummy input for model export
dummy_input = torch.randn(1, 3, 224, 224)  # Adjust dimensions as needed

# Export the model to ONNX format
torch.onnx.export(model, dummy_input, "model.onnx", opset_version=11)

Tips:

如果不使用 Unity 想直接在 iOS 中使用,则需要再讲 ONNX 转化为 Core Ml 格式。

3. 加载和运行模型

using UnityEngine;
using Unity.Sentis;
using System.IO;

public class SentisExample : MonoBehaviour
{
    private Model runtimeModel;
    private IWorker worker;

    void Start()
    {
        // 加载 ONNX 模型文件
        var modelFilePath = Application.dataPath + "/model.onnx";
        var modelData = File.ReadAllBytes(modelFilePath);

        // 加载模型到 Sentis
        runtimeModel = ModelLoader.Load(modelData);
        worker = WorkerFactory.CreateWorker(WorkerFactory.Type.ComputePrecompiled, runtimeModel);

        // 准备输入数据(示例)
        // 根据模型调整维度
        var inputTensor = new Tensor(1, 3, 224, 224); 

        // 执行推理
        worker.Execute(inputTensor);
        var outputTensor = worker.PeekOutput();

        // 处理输出数据
        Debug.Log(outputTensor);

        // 清理资源
        inputTensor.Dispose();
        outputTensor.Dispose();
        worker.Dispose();
    }
}

模型优化技术

为了在移动设备上高效运行,模型通常需要经过优化,包括:

1. 量化(Quantization)

将模型从32位浮点数表示转换为8位整数表示,可以显著减少模型的大小和计算需求。

2. 模型剪枝(Pruning)

移除模型中冗余的权重和节点,减少计算复杂度。

3. 知识蒸馏(Knowledge Distillation)

将复杂模型的知识转移到一个较小的模型中。

最新的iPhone能够运行包含数百万到数千万参数的优化模型。例如,MobileNetTinyBERT 等模型经过量化和其他优化技术处理后,可以在iPhone上高效地运行。

–EOF–

王小兵 /
Published under (CC) BY-NC-SA in categories Unity  AI  tagged with Unity  AI