[Pytorch] ONNX export할 때 RuntimeError: step!=1 is currently not supported 에러 해결 방법
Computer Vision/Pytorch

[Pytorch] ONNX export할 때 RuntimeError: step!=1 is currently not supported 에러 해결 방법

반응형

 

torch.onnx.export할 때 
RuntimeError: step!=1 is currently not supported 
에러 해결 방법

 

 

 

 

서론


아래 코드와 같이

모델을 onnx로 변환하고자 했는데

import torch
import torch.onnx

model = get_net(False)
params = torch.load("/home/slrnd/test/00.work/BDD/YOLOP/runs/BddDataset/_2023-09-15-11-11/final_state.pth", map_location="cpu")
model.load_state_dict(params)
model.cpu()

params = model.state_dict()
torch.save(params, "./net.prm", pickle_protocol=4)

prm = torch.load("./net.prm", map_location='cpu')
model.load_state_dict(prm)
model.eval

dummy_data = torch.empty(1, 3, 224, 224, dtype=torch.float32)
torch.onnx.export(model, dummy_data, "./output.onnx")

 

 

 

 

RuntimeError: step!=1 is currently not supported

이라는 에러가떴다. (아래는 에러코드 전체)

 

구글링 하면서 찾은 결과,

onnx는 opset의 버전이 여러가지인데,

과거 버전에서 충돌이 좀 많이 나는 것 같더라.

pytorch의 버전마다 충돌이 많이나는 onnx 과거버전이 들어있는 듯 했다.   (참고 링크)

 

 

 

 

 

 

 

 

해결방법


 

링크에서는 답변이 2가지인데,

내가 적용한 방법은 아래 사진과 같다.

opset version upgrade이다.

 

 

그래서 나는 opset version을 9에서 11로 upgrade하는 명령어만 추가했다. (opset_version=11)

수정한 코드는 아래와 같다. (마지막 줄 참고)

import torch
import torch.onnx

model = get_net(False)
params = torch.load("/home/slrnd/test/00.work/BDD/YOLOP/runs/BddDataset/_2023-09-15-11-11/final_state.pth", map_location="cpu")
model.load_state_dict(params)
model.cpu()

params = model.state_dict()
torch.save(params, "./net.prm", pickle_protocol=4)

prm = torch.load("./net.prm", map_location='cpu')
model.load_state_dict(prm)
model.eval

dummy_data = torch.empty(1, 3, 224, 224, dtype=torch.float32)
torch.onnx.export(model, dummy_data, "./output.onnx", opset_version=11) #바뀐 부분

 

 

 

 

 

 

 

 

 

여담


 

  • onnx opset version 어떻게 알아?
    • 알려고 안건 아니지만, slice step 관련 에러 코드에 나와있다.
    •   File "/home/slrnd/anaconda3/envs/yolop/lib/python3.7/site-packages/torch/onnx/symbolic_opset9.py", line 1660, in slice
          raise RuntimeError("step!=1 is currently not supported")
  • opset version 왜 하필 11로 한거야?
    • 잘모른다, 첨부 링크에서는 "10은 써봤는데 11이 더 좋더라!"고 설명하고 있다.

 

 

반응형