ONNX란
❗ 중요
ONNX의 장점은 다음과 같이 설명될 수 있다.
- 타 프레임워크로 개발된 모델을 호환해서 사용 가능
- Netron과 같은 시각화 툴로 시각화 가능
- 추론 및 양자화 가능 (추후 포스팅)
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를 확인 가능하다.
Leave a comment