ONNX란

❗ 중요

ONNX의 장점은 다음과 같이 설명될 수 있다.

  1. 타 프레임워크로 개발된 모델을 호환해서 사용 가능
  2. Netron과 같은 시각화 툴로 시각화 가능
  3. 추론 및 양자화 가능 (추후 포스팅)

ONNX는 Open Neural Network Exchange라는 뜻.

한마디로 정의하자면 Tensorflow, PyTorch, Matlab, MXNet과 같은, 서로 다른 딥러닝 프레임워크 환경에서 만들어진 모델들을, 서로 호환해서 사용할 수 있도록 도와주는 공유 플랫폼이다.

각 프레임워크마다 ONNX 모델로 Export하는 방법이 있다.

예를 들어 Tensorflow의 경우 onnx-tf 라이브러리를 이용하면 되고,

pytorch는 설치에 내장되어 있는 torch.onnx.export() 함수를 이용하면 된다.

import torch
torch.onnx.export()

pytorch 기준으로 설명하자면, 입력될 기대값의 shape 을 가진 더미값을 정의해야 한다.

import torch.onnx

dummy_data = torch.empty(1, 3, 224, 224)
torch.onnx.export(model, dummy_data, "model.onnx")

여기서 torch.empty는 말 그대로 해당 차원을 가지며 초기화되지 않은 값이 있는 텐서를 의미하는데,

초기화 되지 않았다는 의미는 랜덤한 값으로 채워진 것으로 이해하는 것이 쉽다.

torch.empty를 꼭 사용해야하는 것은 아니고 torch.rand나 torch.ones, zeros 등 입력될 기대값의 shape를 정의해줄만한 것이 있으면 충분. (이미 사전 정의된 것이 있다면 torch.rand_like 등으로 정의해도 좋음)

onnx 모델이 export 되었으면 다른 프레임워크에서 불러올 수 있다.

(기본적인 operator 들은 (add, mul 등) 지원되지만 복잡한 연산 (fft 등)은 아직 지원이 되지 않으니 유념)

밑의 주소에서 지원하는 operator를 확인 가능하다.

!https://github.com/onnx/onnx/blob/main/docs/Operators.md

image

Leave a comment