Fall in Coding

^_^

Unity/Inference Engine

Unity Inference Engine (구 Sentis)

jjunoXD 2025. 5. 17. 16:18

※ 해당 내용은 Inference Engine 2.2를 기준으로 작성된 글입니다.

 

1. Inference Engine이란?

  1. 유니티에서 제공하는 신경망 추론 라이브러
  2. 유니티 내에서 신경망 모델을 이용해 CPU 또는 GPU로 실시간 추론이 가능

 

2. Inference Engine의 작동 흐름

1. 네임스페이스 사용

using Unirt.InferenceEngine;

2. 모델 로드

// 1번
ModelAsset modelAsset = Resources.Load("model-file-in-assets-folder") as ModelAsset;
var runtimeModel = ModelLoader.Load(modelAsset);

//2번
[SerializeField] private ModelAsset modelAsset;
private Model runtimeModel;

runtimeModel = ModelLoader.Load(modelAsset);
  1. 모델은 ONNX (Open Neural Network Exchange) 형식을 로드할 수 있습니다.
  2. 저는 2번 방법을 사용하여 인스펙터 창에서 준비한 모델을 modelAsset 변수에 할당합니다.

3. 텐서 생성

//1.텍스처 정보를 텐서로 변환 작업
Texture2D inputTexture = Resources.Load("image-file") as Texture2D;
Tensor<float> inputTensor = new Tensor<float>(new TensorShape(1, 4, inputTexture.height, inputTexture.width));
TextureConverter.ToTensor(inputTexture, inputTensor);

//2.배열을 텐서로 변환 작업
int[] array = new int[] {1,2,3,4};
Tensor<int> inputTensor = new Tensor<int>(new TensorShape(4), array);
  1.  1번은 이미지 정보를 텐서로 변환하는 작업입니다.
    1. TensorShape(1, 4, inputTexture.height, inputTexture.width)의 매개변수는 차원(Dimention)을 뜻합니다. NCHW 포맷으로 N은 배치 사이즈, C는 채널의 수, H는 높이, W는 너비를 의미합니다.
    2. 그래서 이미지 정보이므로 N = 1, C = 4 (RGBA), H = inputTexture.height, W = inputTexture.width가 됩니다.

 

4. 추론 엔진 생성 및 실행

Worker worker = new Worker(runtimeModel, BackendType.GPUCompute);
  1. Worker 클래스는 추론 모델과 추론을 할 하드웨어 장치(CPU or GPU)에 대한 정보를 받습니다.
worker.Schedule(inputTensor);
  1. 추론 엔진은 지정된 백엔드에서 비동기적으로 처리합니다 .

 

5. 출력값

Tensor<float> outputTensor = worker.PeekOutput() as Tensor<float>;
  1. 기본 출력 텐서에 대한 데이터를 반환합니다.

 

 

+ Worker, Model 등 핵심 클래스와 Schedule()과 같은 핵심 메서드를 분석 할 예정