AI Development/ONNX

    [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..

    [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 으로 대체한다. 원래 ..

    [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..

    [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..

    [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..