Skip to content

[Bug]: ONNX Slice Operator Fails During OpenVINO Conversion #28485

Open
@ndzhizhin

Description

@ndzhizhin

OpenVINO Version

2022.1.0

Operating System

Windows System

Device used for inference

CPU

Framework

ONNX

Model used

No response

Issue description

Hello!

I successfully converted a model from PyTorch to ONNX. However, I am currently trying to convert the ONNX model to OpenVINO. My ONNX model contains a Slice operator, and while converting to OpenVINO, I encounter the following error:

OpenVINO runtime found in:      C:\Users\zhizhin\PycharmProjects\gtrcn_model_wenv\Lim_narabotki\venv\lib\site-packages\openvino
OpenVINO runtime version:       2022.1.0-7019-cdb9bec7210-releases/2022/1
Model Optimizer version:        2022.1.0-7019-cdb9bec7210-releases/2022/1
[ ERROR ]  -------------------------------------------------
[ ERROR ]  ----------------- INTERNAL ERROR ----------------
[ ERROR ]  Unexpected exception happened.
[ ERROR ]  Please contact Model Optimizer developers and forward the following information:
[ ERROR ]  Check 'node->visit_attributes(visitor)' failed at C:\j\workspace\private-ci\ie\build-windows-vs2019@3\b\repos\openvino\src\core\src\pass\serialize.cpp:926:
Visitor API is not supported in v0::NullNode NullNode_9 () -> (dynamic...)

[ ERROR ]  Traceback (most recent call last):
  File "C:\Users\zhizhin\PycharmProjects\gtrcn_model_wenv\Lim_narabotki\venv\Lib\site-packages\openvino\tools\mo\main.py", line 533, in main
    ret_code = driver(argv)
  File "C:\Users\zhizhin\PycharmProjects\gtrcn_model_wenv\Lim_narabotki\venv\Lib\site-packages\openvino\tools\mo\main.py", line 493, in driver
    ret_res = moc_emit_ir(ngraph_function, argv)
  File "C:\Users\zhizhin\PycharmProjects\gtrcn_model_wenv\Lim_narabotki\venv\lib\site-packages\openvino\tools\mo\moc_frontend\serialize.py", line 44, in moc_emit_ir
    serialize(ngraph_function, (orig_model_name + ".xml").encode('utf-8'), (orig_model_name + ".bin").encode('utf-8'))
RuntimeError: Check 'node->visit_attributes(visitor)' failed at C:\j\workspace\private-ci\ie\build-windows-vs2019@3\b\repos\openvino\src\core\src\pass\serialize.cpp:926:
Visitor API is not supported in v0::NullNode NullNode_9 () -> (dynamic...)

I also tried converting my Torch model to ONNX with the "dynamic_axes" parameter, but I also received error about Slice usage

I hope you can answer my question or tell me about workaround. I need to convert the model to OpenVINO exactly with version 2022.1.0.
Hope to hear from you soon!

Version of ONNX: 1.16.2
Version of Torch: 2.1.2+cu118
Version of OpenVINO and OpenVINO-dev: 2022.1.0

Step-by-step reproduction


import math
import torch.nn as nn
import torch
import onnx
from onnxsim import simplify

class DummyModel(nn.Module):
    def __init__(self,
                 emb_dim,
                 emb_ks,
                 emb_hs,
                 n_head=4):
        super().__init__()
        self.emb_dim = emb_dim
        self.emb_ks = emb_ks
        self.emb_hs = emb_hs
        self.n_head = n_head

    def __getitem__(self, item):
        return getattr(self, item)

    def forward(self, x):

        B, C, old_T, old_F = x.shape
        T = math.ceil((old_T - self.emb_ks) / self.emb_hs) * self.emb_hs + self.emb_ks
        F = math.ceil((old_F - self.emb_ks) / self.emb_hs) * self.emb_hs + self.emb_ks
        x = nn.functional.pad(x, (0, F - old_F, 0, T - old_T))

        inter_rnn = x[:, :, :, :old_F]


        return inter_rnn



stream_model = DummyModel(emb_dim=64,
                              emb_hs=2,
                              emb_ks=4)

    input_names = ["inp_noisy"]
    output_names =["out_enh"]

    onnx_name = "Dummy_Model.onnx"
    torch.onnx.export(
        stream_model,
        args=(noisy),
        input_names=input_names,
        output_names=output_names,
        f=onnx_name,
        verbose=False,
        opset_version=13,

    )

    onnx_model = onnx.load(onnx_name)
    onnx.checker.check_model(onnx_model)

    model_simp, check = simplify(onnx_model)
    assert check, "Simplified ONNX model could not be validated"
    onnx.save(model_simp, "simplified_Dummy_Model.onnx")

After conversion to ONNX, I am trying to convert my model to OpenVINO with: mo --input_model "simplified_Dummy_Model.onnx" --output_dir "path_to_output_dir"

ONNX GRAPH

Image

Relevant log output

Issue submission checklist

  • I'm reporting an issue. It's not a question.
  • I checked the problem with the documentation, FAQ, open issues, Stack Overflow, etc., and have not found a solution.
  • There is reproducer code and related data files such as images, videos, models, etc.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions