You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YOLOv5自定义训练模型转ONNX后OpenCV加载报错求助

问题:YOLOv5转ONNX后OpenCV加载失败

我使用YOLOv5自定义训练数据集,生成的best.pt文件检测与评估均正常,但转换为ONNX模型后,用OpenCV加载时出现报错。

报错信息

C:\Users\admin\.conda\envs\yolov5\python.exe D:\Demo\yolov5\test_onnx.py 
[ERROR:0@0.012] global onnx_importer.cpp:1054 cv::dnn::dnn4_v20221220::ONNXImporter::handleNode DNN/ONNX: ERROR during processing node with 3 inputs and 1 outputs: [Conv]:(onnx_node!/model.2/m/m.0/cv1/conv/Conv) from domain='ai.onnx'
Traceback (most recent call last):
  File "D:\Demo\yolov5\test_onnx.py", line 2, in <module>
    net = cv2.dnn.readNetFromONNX('runs/train/exp8/weights/best.onnx')
cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\onnx\onnx_importer.cpp:1073: error: (-2:Unspecified error) in function 'cv::dnn::dnn4_v20221220::ONNXImporter::handleNode'
> Node [Conv@ai.onnx]:(onnx_node!/model.2/m/m.0/cv1/conv/Conv) parse error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\layers\convolution_layer.cpp:394: error: (-215:Assertion failed) !hasBias() || blobs[1].total() == (size_t)weightShape[0] in function 'cv::dnn::ConvolutionLayerImpl::getMemoryShapes'

解决办法

  • 指定低版本ONNX算子集转换:转换时添加--opset 12参数,OpenCV的DNN模块对高版本ONNX算子支持有限。执行命令:
    python export.py --weights runs/train/exp8/weights/best.pt --include onnx --opset 12
    
  • 升级OpenCV版本:当前使用的OpenCV 4.7.0对部分ONNX算子兼容性不足,升级到4.8.0及以上版本可改善适配问题。
  • 禁用动态维度转换:转换ONNX时添加--dynamic False参数,避免动态轴导致OpenCV解析卷积层时出错。
  • 验证ONNX模型有效性:用onnxruntime测试模型是否正常,代码示例:
    import onnxruntime as rt
    sess = rt.InferenceSession('runs/train/exp8/weights/best.onnx')
    print("输入形状:", sess.get_inputs()[0].shape)
    print("输出形状:", sess.get_outputs()[0].shape)
    
    如果能正常输出形状,说明模型本身无问题,问题出在OpenCV的DNN模块适配。

内容的提问来源于stack exchange,提问作者user21499510

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:42:42