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

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

你可能感兴趣的:(opencv,pytorch)