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

使用cv2.dnn.readNet读取YOLOv7 ONNX文件失败,寻求解决方法

解决YOLOv7 ONNX文件无法被OpenCV dnn读取的问题

一、先验证ONNX文件有效性

  • 安装ONNX官方校验工具,检查文件是否损坏或导出异常:
    !pip install onnx
    !onnxchecker yolov7.onnx
    
    若输出报错,说明文件本身有问题,需要重新导出。
  • 用Netron可视化检查网络结构:
    !pip install netron
    
    import netron
    netron.start('yolov7.onnx')
    
    打开生成的链接,查看网络节点是否完整,有无缺失层。

二、修正YOLOv7 u5分支的导出参数

u5分支默认导出参数可能不兼容OpenCV,调整命令重新导出:

!python export.py --weights yolov7.pt --grid --end2end --simplify --topk-all 100 --iou-thres 0.65 --conf-thres 0.35 --img-size 640 640 --opset 12
  • 关键参数说明:
    • --simplify:简化ONNX结构,去除冗余节点
    • --opset 12:指定opset版本为12,匹配OpenCV 4.6.0的支持范围
    • 不要加--dynamic,OpenCV dnn对动态尺寸ONNX支持有限

三、检查OpenCV的ONNX支持

Colab默认的OpenCV可能未编译ONNX支持,验证并重新安装:

  1. 检查支持状态:
import cv2
print("ONNX支持状态:", cv2.dnn.readNetFromONNX is not None)
  1. 若输出为False,重新安装带ONNX支持的版本:
!pip uninstall -y opencv-python opencv-contrib-python
!pip install opencv-contrib-python==4.6.0.66

四、替代方案:用ONNX Runtime推理

若以上步骤无效,改用ONNX Runtime完成检测:

  1. 安装依赖:
!pip install onnxruntime-gpu
  1. 基础推理代码:
import onnxruntime as ort
import cv2
import numpy as np

# 加载模型
session = ort.InferenceSession('yolov7.onnx', providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])

# 图片预处理
img = cv2.imread('test.jpg')
img_resized = cv2.resize(img, (640, 640))
img_rgb = cv2.cvtColor(img_resized, cv2.COLOR_BGR2RGB)
input_tensor = img_rgb.transpose(2, 0, 1)[np.newaxis, ...].astype(np.float32) / 255.0

# 推理
outputs = session.run(None, {session.get_inputs()[0].name: input_tensor})

# 后处理(参考YOLOv7官方detect.py逻辑解析检测框、类别、置信度)

五、额外注意事项

  • 尽量在Colab环境内直接导出ONNX,避免本地与Colab的PyTorch/ONNX版本差异导致的兼容性问题
  • 重新下载预训练权重确保完整性:
    !wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:15:33