반응형
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이 더 좋더라!"고 설명하고 있다.
반응형