在深度学习模型部署时,从pytorch转换onnx的过程中,踩了一些坑。本文总结了这些踩坑记录,希望可以帮助其他人。
首先,简单说明一下pytorch转onnx的意义。在pytorch训练出一个深度学习模型后,需要在TensorRT或者openvino部署,这时需要先把Pytorch模型转换到onnx模型之后再做其它转换。因此,在使用pytorch训练深度学习模型完成后,在TensorRT或者openvino或者opencv和onnxruntime部署时,pytorch模型转onnx这一步是必不可少的。接下来通过几个实例程序,介绍pytorch转换onnx的过程中遇到的坑。
1. opencv里的深度学习模块不支持3维池化层
起初,我在微信公众号里看到一篇文章《使用Python和YOLO检测车牌》。文中展示的检测结果如下,其实这种检测结果并不是一个优良的结果,可以看到检测框里的车牌是倾斜的,如果要识别车牌里的文字,那么倾斜的车牌会严重影响车牌识别结果的。

对于车牌识别这种场景,在做车牌检测时,一种优良的检测结果应该是这样的,如下图所示。
本文详细记录了在深度学习模型部署中,从PyTorch转换到ONNX过程中遇到的坑,包括opencv不支持3维池化层,opencv与onnxruntime的差异,以及onnxruntime对3维操作的支持。作者通过实例演示了如何解决这些问题,并分享了在动态分辨率输入上的疑问。这些经验总结对深度学习开发者具有参考价值。
订阅专栏 解锁全文

5万+

被折叠的 条评论
为什么被折叠?



