onnx2torch와 onnx-modifier (feat. MMdnn)

eric9687·2022년 11월 5일
0

배경지식: https://velog.io/@eric9687/Onnx-simplifier-feat.-Netron

pth와 pb등을 모델과 함께 onnx로 포팅하여서 쓰는 경험이 조금씩 생기면서 든 의문이 "onnx는 모델 구조뿐만 아니라 가중치까지 다 들어 있는데, 다시 pytorch나 tensorflow로 바꿀 수 있지 않을까? 특히 자동으로!"였다.
와.... 역시나... 저만 이런 생각을 한 건 아니죠.. 실제로 존재했습니다. 그게 바로 onnx2torch입니다.

onnx2torch

  • url: https://github.com/ENOT-AutoDL/onnx2torch
  • 소개를 해석하자면,
    • onnx2torch는 onnx를 pytorch로 바꾸는 변환기
    • 사용하기 쉬워요! : convert함수만 사용하면 끝.
    • 확장하기 쉬워요! : 없는 함수는 @add_converter로 추가해요
    • 다시 변환할 수 있어요!: torch.onnx.export 사용하여 다시 onnx로
  • 사용방법:
    • 다운로드: pip install onnx2torch
    • 사용 예시:
import torch
from onnx2torch import convert

# Path to ONNX model
onnx_model_path = '/some/path/mobile_net_v2.onnx'
# You can pass the path to the onnx model to convert it or...
torch_model_1 = convert(onnx_model_path)

# Or you can load a regular onnx model and pass it to the converter
onnx_model = onnx.load(onnx_model_path)
torch_model_2 = convert(onnx_model)
  • 위에서 설명한 바와 같이, 지원하지 않는 함수는 추가할 수 있습니다. 특히, tensorflow로 만들어진 onnx를 pytorch로 변환하는 경우에 사용하면됩니다. 경험상, argmax와 gatherND 없어요...
  • 그런데!! 혹시나!! 아무리 함수를 추가해도 계속 오류가 난다!(경험담)하면....onnx-modifier를 쓰면 됩니다. 그걸로 일단 변환안되는 함수 앞뒤를 자르고, 변환한 후에, 중간에 변환하지 못한 operation정도는 직접 써주는 성의를 보이면 돼요 :)

onnx-modifier

  • url: https://github.com/ZhangGe6/onnx-modifier

  • (중국인이 만든 것이니, 중국어 readme를 해석하겠습니다)

  • netron을 베이스로 flask로 만든 onnx-modifier는 눈으로 보면서 직접 onnx모델을 수정할 수 있도록 합니다. 제공하는 기능으로는

    • 노드 삭제/복원
      • 노드 하나만 삭제
      • 특정 노드를 root로 하는 모든 노드 삭제
      • 삭제되 노드 복원
    • 노드 Input/Output 이름 변경
    • 모델 Input/output 이름 변경
    • 아웃풋 추가
    • 노드의 attribute(속성값) 변경
    • 노드 추가
    • batch size 변경
    • 모델 initializer 변경
  • 사용방법:

    • 다운로드 1:

      		git clone git@github.com:ZhangGe6/onnx-modifier.git
      		cd onnx-modifier
    • 다운로드 2:pip install onnx flask

    • 실행: python app.py

    • 그럼, 브라우저가 열리면서, 이런 페이지가 나옵니다.

    • 여기서, open model로 모델을 열면,

    • 이런 메뉴들을 통해, 모델을 변경하고 저장할 수 있습니다.

MMdnn

  • 추가로, "그럼 중간 onnx말고도 바로 pytorch에서 tensorflow로도 바꿀 수 있지 않을까"하다가 찾았습니다. 역시 Ms.....
  • url: https://github.com/microsoft/MMdnn#-mmdnn
  • MMdnn은 딥러닝 모델을 시각화하고 분석하고 변환하는 프레임워크 호환 툴입니다.
    • 모델 변환
    • 모델 재학습
    • 모델 찾기와 시각화
    • 모델 deploy
  • 사실, mmdnn을 이용하기 위해서는 dependency를 다 설정해줘야하는데, tensorflow는 1.15.2, pytorch는 0.4.0 or 1.5.1로 한정적이라는 단점이 있습니다.
profile
그러나 먼저 된 자로서 나중되고 나중 된 자로서 먼저될 자가 많으니라(마:19:30)

0개의 댓글