-2 opencv module_error ai_generated partial

cv2.error: OpenCV(4.9.0) ../modules/dnn/src/onnx/onnx_importer.cpp:1122: error: (-2:Unspecified error) in function 'importNode': OpenCV does not support ONNX operator 'ScatterND'

ID: opencv/dnn-readnet-from-onnx-unsupported-op

Also available as: JSON · Markdown · 中文
80%Fix Rate
87%Confidence
1Evidence
2024-01-15First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
4.8.0 active
4.9.0 active
4.10.0 active

Root Cause

The ONNX model uses an operator (e.g., ScatterND, NonMaxSuppression) that is not implemented in OpenCV's DNN module.

generic

中文

ONNX 模型使用了 OpenCV DNN 模块未实现的算子(例如 ScatterND, NonMaxSuppression)。

Official Documentation

https://docs.opencv.org/4.x/d6/d0f/group__dnn.html

Workarounds

  1. 70% success Export the ONNX model from PyTorch/TensorFlow with opset version 10 or lower, avoiding newer operators: torch.onnx.export(model, dummy_input, 'model.onnx', opset_version=10)
    Export the ONNX model from PyTorch/TensorFlow with opset version 10 or lower, avoiding newer operators: torch.onnx.export(model, dummy_input, 'model.onnx', opset_version=10)
  2. 95% success Use a different inference backend like ONNX Runtime instead of OpenCV DNN: import onnxruntime; session = onnxruntime.InferenceSession('model.onnx')
    Use a different inference backend like ONNX Runtime instead of OpenCV DNN: import onnxruntime; session = onnxruntime.InferenceSession('model.onnx')

中文步骤

  1. Export the ONNX model from PyTorch/TensorFlow with opset version 10 or lower, avoiding newer operators: torch.onnx.export(model, dummy_input, 'model.onnx', opset_version=10)
  2. Use a different inference backend like ONNX Runtime instead of OpenCV DNN: import onnxruntime; session = onnxruntime.InferenceSession('model.onnx')

Dead Ends

Common approaches that don't work:

  1. 60% fail

    OpenCV's DNN backend has limited ONNX operator coverage; many ops remain unimplemented across versions.

  2. 80% fail

    Conversion tools often map unsupported ops to other unsupported ops or fail entirely.