pytorch训练的Unet,转onnx, 用opencv调用。readNetFromONNX, Assertion failed) layerId != layer_id.end()

本文探讨了如何将PyTorch模型转换为ONNX并在OpenCV中使用,过程中遇到opencv450版本的内存异常问题。通过升级到opencv453并解决bug,分享了部署步骤和环境配置。希望opencv能及时更新以优化兼容性。

1. 部署思路

 pytorch中训练好模型,然后在python中转为onnx格式。通过opencv的dnn模块调用 onnx格式模型。

2. 转onnx成功后,发现opencv导入onnx模型, 报错

第一次变异的opencv版本是opencv450,cua10.1. 在c++中导入onnx模型时发现,出现内存异常。检查发现路径没有问题,怀疑是opencv 的bug,使用opencv-python,发现error:

error: OpenCV(4.5.0)
C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-6sxsq0tp\opencv\modules\dnn\src\onnx\onnx_importer.cpp:970: error: (-215:Assertion failed) layerId != layer_id.end() in function cv::dnn::dnn4_v20200609::ONNXImporter::populateNet’

3. github上有人issue了这个bug,并且已经被修复

https://github.com/opencv/opencv/issues/19359

https://github.com/opencv/opencv/pull/19372

3. 解决方案:

从新编译gpu版本的opencv453,测试发现没问题。

我的配置1:

	uda11.1 
	opencv4.5.3 
	pytorch1.9

我的配置2:

	cuda10.1 
	opencv4.5.3 
	pytorch1.1.1

5. 总结

这个部署思路比较简单,容易实现。但是受限于opencv的支持。希望opencv多多更新,大家发现问题多多反馈。

参考链接:

https://docs.opencv.org/4.5.3/d2/d58/tutorial_table_of_content_dnn.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值