I fine-tuned an SSD model on a custom dataset (everything working properly), and I’m trying to export it to ONNX in order to run it on Android.
This is what I’m doing:
from os import path as osp
import numpy as np
import mxnet as mx
import gluoncv as gcv
from mxnet.contrib import onnx as onnx_mxnet
from mxnet import gluon
from gluoncv import model_zoo, data, utils
ctx = mx.cpu(0)
OUTPUT = 'oxnn/'
DATA = "./friends.png"
MODEL = "CML_exported"
INPUT_SHAPE = ((1,3,512,683))
dummy_img, _ = data.transforms.presets.ssd.load_test(DATA, short=512)
CML_classes = ["CML_mug"]
net = gcv.model_zoo.get_model('ssd_512_mobilenet1.0_custom', classes=CML_classes, pretrained_base=False, ctx=ctx)
net.load_parameters("saved_weights/CML_mobilenet_mug_00/ep_035.params", ctx=ctx)
net.hybridize()
_ = net(dummy_img)
net.export(osp.join(OUTPUT, MODEL))
sym = osp.join(OUTPUT, MODEL + "-symbol.json")
params = osp.join(OUTPUT, MODEL + "-0000.params")
onnx_file = osp.join(OUTPUT, MODEL + ".onnx")
converted_model_path = onnx_mxnet.export_model(sym, params, [INPUT_SHAPE], np.float32, onnx_file, verbose=True)
I’m getting the error:
File "/home/lews/anaconda3/envs/gluon/lib/python3.7/site-packages/mxnet/contrib/onnx/mx2onnx/_op_translations.py", line 1502, in convert_slice_axis
ends = int(attrs.get("end", None))
ValueError: invalid literal for int() with base 10: 'None'
This is a known problem, it is also discussed here …it seems there are some operatrions (in this case, convert_slice_axis, that are not corrcetly supported)
I found a few discussions here on the forum suggesting to uninstall onnx and reinstalling older version. I tried that, but if I run
pip install onnx==1.3.0
I get anothere error:
ERROR: Command errored out with exit status 1:
command: /home/lews/anaconda3/envs/gluon/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-rn77ezl3/onnx/setup.py'"'"'; __file__='"'"'/tmp/pip-install-rn77ezl3/onnx/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-8a5a5p6o
cwd: /tmp/pip-install-rn77ezl3/onnx/
Complete output (6 lines):
fatal: not a git repository (or any of the parent directories): .git
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-install-rn77ezl3/onnx/setup.py", line 71, in <module>
assert CMAKE, 'Could not find "cmake" executable!'
AssertionError: Could not find "cmake" executable!
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output
The issue reported in the git discussion I linked is kinda old. Have there been any updates since last year? Was this somehow fixed?
Anyway, the reason I need this is to try and run the fine-tuned model on Android, and it seems to be the most straightforward way.
Could I try anything else?