-2 opencv module_error ai_generated partial

cv2.error: OpenCV(4.9.0) ../modules/dnn/src/onnx/onnx_importer.cpp:1122: 错误: (-2:未指定错误) 函数 'importNode': OpenCV 不支持 ONNX 算子 'ScatterND'

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

其他格式: JSON · Markdown 中文 · English
80%修复率
87%置信度
1证据数
2024-01-15首次发现

版本兼容性

版本状态引入弃用备注
4.8.0 active
4.9.0 active
4.10.0 active

根因分析

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

English

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

generic

官方文档

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

解决方案

  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')

无效尝试

常见但无效的做法:

  1. 60% 失败

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

  2. 80% 失败

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