※ 해당 내용은 Inference Engine 2.2를 기준으로 작성된 글입니다.
1. Inference Engine이란?
- 유니티에서 제공하는 신경망 추론 라이브러
- 유니티 내에서 신경망 모델을 이용해 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);
- 모델은 ONNX (Open Neural Network Exchange) 형식을 로드할 수 있습니다.
- 저는 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번은 이미지 정보를 텐서로 변환하는 작업입니다.
- TensorShape(1, 4, inputTexture.height, inputTexture.width)의 매개변수는 차원(Dimention)을 뜻합니다. NCHW 포맷으로 N은 배치 사이즈, C는 채널의 수, H는 높이, W는 너비를 의미합니다.
- 그래서 이미지 정보이므로 N = 1, C = 4 (RGBA), H = inputTexture.height, W = inputTexture.width가 됩니다.
4. 추론 엔진 생성 및 실행
Worker worker = new Worker(runtimeModel, BackendType.GPUCompute);
- Worker 클래스는 추론 모델과 추론을 할 하드웨어 장치(CPU or GPU)에 대한 정보를 받습니다.
worker.Schedule(inputTensor);
- 추론 엔진은 지정된 백엔드에서 비동기적으로 처리합니다 .
5. 출력값
Tensor<float> outputTensor = worker.PeekOutput() as Tensor<float>;
- 기본 출력 텐서에 대한 데이터를 반환합니다.