Hi there,
Any help with this is greatly appreciated!
My goal is to get a PyTorch (Faster RCNN) model running on my OAK D. I have a program that can easily run a .blob file on the OAK D, however, my trouble has been in getting my PyTorch model converted into a .blob file. I have been trying to use the luxonis blob converter tool online but it has been throwing me errors.
As I understand it, I am doing the following file conversion:
Torch (.pth) -> .onnx -> openVINO (.xml & .bin) -> .blob
Here is what I think my issue is:
In the luxonis blob converter, I have been choosing openVINO version 2022.1 as it is the depthAI default. I am trying to use this tool to convert my .onnx file to a .blob but have been encountering an error when trying:
"""Cannot create Interpolate layer Resize_62 id:61 from unsupported opset: opset11"""
My assumption is that this error is a result of trying to convert an .onnx file, which was created with opset version 11, using openVINO v 2022.1. I learned after that openVINO version 2022.1 is associated with opset version 8.
Accordingly, I believe the solution to the problem above is to export the .onnx file with opset version 8, but trying this is where I run into another issue, this time from my python runtime.
"""RuntimeError: Unsupported: ONNX export of Pad in opset 9. The sizes of the padding must be constant. Please try opset version 11."""
My best guess that this is occurring because of my torch version so here is what my python environment is looking like
Package Version
----------------------- -----------------
absl-py 2.1.0
blobconverter 1.4.3
certifi 2024.7.4
charset-normalizer 3.3.2
contourpy 1.2.1
cycler 0.12.1
filelock 3.15.4
filterpy 1.4.5
fonttools 4.53.1
fsspec 2024.6.1
grpcio 1.65.1
idna 3.7
importlib_metadata 8.1.0
importlib_resources 6.4.0
intel-openmp 2021.4.0
Jinja2 3.1.4
kiwisolver 1.4.5
Markdown 3.6
markdown-it-py 3.0.0
MarkupSafe 2.1.5
matplotlib 3.9.1
mdurl 0.1.2
mkl 2021.4.0
ml-dtypes 0.4.0
mpmath 1.3.0
networkx 3.2.1
numpy 1.24.0
onnx 1.16.1
onnx-simplifier 0.4.36
onnxscript 0.1.0.dev20240725
onnxsim 0.4.36
opencv-python 4.10.0.84
packaging 24.1
pillow 10.4.0
pip 24.1.2
protobuf 4.25.3
Pygments 2.18.0
pyparsing 3.1.2
python-dateutil 2.9.0.post0
PyYAML 6.0.1
requests 2.32.3
rich 13.7.1
scipy 1.13.1
setuptools 58.1.0
six 1.16.0
sympy 1.13.1
tbb 2021.13.0
tensorboard 2.17.0
tensorboard-data-server 0.7.2
torch 1.8.1+cu111
torchaudio 0.8.1
torchvision 0.9.1+cu111
typing_extensions 4.12.2
urllib3 2.2.2
Werkzeug 3.0.3
zipp 3.19.2
And here is the function that is throwing the error demanding that I use opset v 11
def Create(self):
if self.Width and self.Height and self._Model_Path:
self.Device = torch.device('cpu')
self.Model = self.Get_Model()
Save_Path = self.Extension(self._Model_Path, '.onnx')
Input_Tensor = torch.zeros(1, 3, self.Height, self.Width).to(self.Device)
torch.onnx.export(self.Model, Input_Tensor, Save_Path, opset_version=8)
self._Save_Path = Save_Path
return 'Success'
else:
return 'Error'
Any help or insight is super appreciated. I am still guessing it’s a problem with my torch version but if anyone knows an entirely different way to accomplish my goal of using torch with the OAK then Im open to that also.
Best,
Andy p 63