YOLOV5 ONNX CUDA导出后DNN加载推理抛出异常
摘要:本文解决了YOLOv5模型从CPU切换到GPU导出ONNX文件时出现的DNN推理异常问题。异常表现为OpenCV(4.5.3)在加载GPU版ONNX时出现"Identity节点解析错误"。经排查发现,问题源于export.py中onnx参数设置不当,特别是do_constant_folding=True导致GPU导出时生成不兼容算子。解决方案是将do_constant_f
·
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后问题得以解决

更多推荐
所有评论(0)