1、问题描述

关键词:YOLOV5; ONNX; CPU; GPU;DNN推理; OpenCV-cuda 4.5.3;
问题:模型pt文件经过export.py导出CPU后,使用编译好cuda的OpenCV453版本进行DNN部署推理功能正常;同一份模型文件将“device”参数由“cpu“修改为”0“后代表导出CUDA设备推理的文件,一切正常,再用DNN部署推理时出现抛异常情况。

  • 参数设置

在这里插入图片描述

  • DNN部署推理CUDA版本的onnx抛的异常
模型加载异常:OpenCV(4.5.3) E:\opencv\opencv\sources\modules\dnn\src\onnx\onnx_importer.cpp:2146: error: (-2:Unspecified error) in function 'cv::dnn::dnn4_v20210608::ONNXImporter::handleNode'
> Node [Identity]:(onnx::Resize_475) parse error: OpenCV(4.5.3) E:\opencv\opencv\sources\modules\dnn\src\dnn.cpp:5298: error: (-215:Assertion failed) inputs.size() in function 'cv::dnn::dnn4_v20210608::Layer::getMemoryShapes'

2、解决方案

这是部署中典型的「模型导出时的设备配置与推理环境不兼容」问题,核心原因集中在 导出时绑定了 GPU 专属算子 / 设备信息、导出参数未适配推理环境GPU 版模型包含推理端不支持的优化 这三点。正常来说,可以检查自己虚拟环境关于CUDA相关环境包有没有异常,或者直接升级OpenCV 4.5.3版本,我这边懒得升级版本,回想到当初为了解决YOLOv5 segment导出onnx后output1输出维度在netron上被隐藏无法显示问题,修改过export.py文件关于onnx参数设置(do_constant_folding设为True),细节可以看这篇文章

  • export.py文件关于onnx参数设置
  • do_constant_folding状态由True改为False后问题得以解决
    在这里插入图片描述
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐