[ONNX] Brevitas, QAT 모델을 Standard ONNX 모델로 생성하는 라이브러리
Quantization Aware Training로 학습된 모델은 QuantConv2d, QuantLinear 등의 layer 가 생성되는데 이를 Standard ONNX로 변환 시켜주는 Brevitas 라이브러리가 있다. FAQ(https://github.com/Xilinx/brevitas#faq) 를 보면 아직 알려진 이슈들은 많다. https://github.com/Xilinx/brevitas GitHub - Xilinx/brevitas: Brevitas: quantization-aware training in PyTorch Brevitas: quantization-aware training in PyTorch. Contribute to Xilinx/brevitas development by cre..
2022.07.04
no image
[ONNX] ONNX Simplifier 사용하여 모델 간소화 하기
ONNX Simplifier 는 복잡한 ONNX node 들 즉 ONNX 모델을 단순하게 만들어주는 툴이다. 전체 계산 그래프(the whole computation graph)를 추론한 다음 중복 연산자(the redundant operators)를 상수 출력(their constant outputs)으로 대체한다. 아래 그림의 왼쪽 그림은 어떤 모델의 ONNX 원본 모델이고, 오른쪽 그림은 onnx simplifier를 거친 ONNX 모델이다. (잘 보이진 않지만... 자세히 들여다보면 간소화 된 모습을 볼 수 있었다... 모델 크기도 줄어든다.) 아래 그림을 보면 더 명확히 와닿는다. 이런 느낌이다. 불필요한 Gather 및 Unsqueeze 연산자 등의 조합을 Reshape 으로 대체한다. 원래 ..
2021.07.26
no image
[ONNX] Pytorch 모델을 ONNX 모델로 변환 할 때 dynamic_axes 지정하는 방법
LSTM 같은 모델을 ONNX 모델로 변환할 경우, 이 모델은 입력 값을 동적으로 설정할 수 도 있기 때문에 ONNX 모델로 export 시 dynamic_axes 를 설정하여 동적인 입력 값을 갖는 ONNX 모델로 변환할 수 있다. torch 공식 문서에 나와있는 내용은 다음과 같다. dynamic_axes (dict or dict, default empty dict) – a dictionary to specify dynamic axes of input/output, such that: - KEY: input and/or output names - VALUE: index of dynamic axes for given key and potentially the name to be used for expo..
2021.06.29
[ONNX] ONNX 배치 사이즈 변경하는 방법 + 삽질
onnx batch size change 라는 키워드를 통해 나온 검색 결과에 의하면, 다음 코드를 사용하면 기존에 만들어 두었던 onnx 파일의 배치 사이즈를 변경할 수 있다고 하는데, 아래 코드는 입력 사이즈만 변경하는 코드이다. 절대 아래와 같이 사용하면 안된다. import onnx def change_input_dim(model): # Use some symbolic name not used for any other dimension sym_batch_dim = "N" # or an actal value actual_batch_dim = 4 # The following code changes the first dimension of every input to be batch-dim # Modif..
2021.02.02
[ONNX] Pytorch 모델을 ONNX 모델로 변환하기
ONNX 모델은 여러 다양한 플랫폼과 하드웨어에서 효율적인 추론을 가능하게 한다. 여기서 하드웨어는 리눅스, 윈도우, 맥 뿐만 아니라 여러 CPU, GPU 등의 하드웨어를 뜻한다. ONNX 모델 변환을 위해 필요한 import 문은 다음과 같다. # 필요한 import문 import io import numpy as np from torch import nn import torch.utils.model_zoo as model_zoo import torch.onnx 예제 모델은 아래에서 소개된 모델을 기반으로 한다. “Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Networ..
2020.08.23
no image
[ONNX] onnx-graphsurgeon 이용하여 plugin 사용하기 - Group Normalization
TensorRT 7.1.2 버전 부터 Group Normalization plugin 을 지원하기 시작했다. 아래 Github 에서 ONNX GraphSurgeon 을 사용할 수 있으며, https://github.com/NVIDIA/TensorRT/tree/master/tools/onnx-graphsurgeon NVIDIA/TensorRT TensorRT is a C++ library for high performance inference on NVIDIA GPUs and deep learning accelerators. - NVIDIA/TensorRT github.com python 샘플 코드에 onnx_packnet 을 이용하여 group normalization plugin 을 추가하여 onnx ..
2020.07.21
no image
[ONNX] Netron : ONNX model Visualization
ONNX 모델을 netron Visualization 할 수 있다. https://github.com/lutzroeder/netron lutzroeder/netron Visualizer for neural network, deep learning and machine learning models - lutzroeder/netron github.com Netron supports ONNX (.onnx, .pb, .pbtxt), Keras (.h5, .keras), Core ML (.mlmodel), Caffe (.caffemodel, .prototxt), Caffe2 (predict_net.pb), Darknet (.cfg), MXNet (.model, -symbol.json), Barracuda (.nn..
2020.07.16
[Onnx] Onnx Tutorials (정리중)
Onnx Tutorials https://github.com/onnx/tutorials onnx/tutorials Tutorials for creating and using ONNX models. Contribute to onnx/tutorials development by creating an account on GitHub. github.com https://github.com/onnx/onnx-tensorrt onnx/onnx-tensorrt ONNX-TensorRT: TensorRT backend for ONNX. Contribute to onnx/onnx-tensorrt development by creating an account on GitHub. github.com https://githu..
2020.05.14
no image
[ONNX] Pytorch 에서 Onnx 로 변환 시 Gather op 때문에 export 안되는 문제
Pytorch 에서 Onnx 모델로 변환시 Gather 와 같은 옵션 때문에 변환이 안되는 문제가 발생한다. 이유는 Onnx 에서 Gather 라는 옵션을 지원하지 않기 때문이다. (2020.04.28 기준) 아래와 같이 interpolate 를 scale factor 로 구현하였을 때 class ResizeModel(nn.Module): def __init__(self): super(ResizeModel, self).__init__() def forward(self, x): return F.interpolate(x, scale_factor=(2, 2), mode='nearest') 생성되는 그래프는 아래와 같다 위와 같이 구현할 경우 "Gather" 라는 op 이 붙어서 그래프가 생성되는데, Onnx ..
2020.04.28