目录
1.加载转换为ONNX的PyTorch官方预训练目标检测模型问题讨论
2.加载转换为ONNX的yolov5官方预训练目标检测模型问题讨论
4.QT 6.6.0 基于OpenCV4.5.5加载yolov5的ONNX文件目标检测
| PyTorch实现一个简单的图像分类(代码详细) |
| PyTorch 训练之后的网络模型.pth转.onnx文件并对图像进行预测 |
| 使用pytorch实现预训练模型迁移学习中的目标检测 |
| PyTorch加载预训练目标检测模型实现物体检测,同时将预训练模型转换为ONNX模型文件(过程详解) |
本文最初的目的是基于PyTorch官方提供的目标检测预训练模型转换为ONNX之后应用到QT中,但是在将ONNX模型文件应用到QT中存在很多问题,并且opencv官方也有针对该问题进行讨论,目前并没有得到一个可行的解决方案。因此,为了达到在QT中加载目标检测模型ONNX的目的,最终选择转换yolov5目标检测模型到ONNX,然后应用到QT中,但是还是存在很多问题,以下将会讨论这些问题。建议读者可以先去看之前的几篇相关博文。
说实话,写这篇博文感觉很不容易,中间遇到了很多的问题,而且是目前并没有解决方案的,只能转换问题,便于解决问题,我相信读者就算去复现这篇博文的过程也不是很容易,特别是环境的问题,希望大家坚持跟着这篇博文做完所有的过程,最终将会有不小的收获。
1.加载转换为ONNX的PyTorch官方预训练目标检测模型问题讨论

注:加载FCOS_Resnet50_FPN的ONNX模型报错结果,相关opencv官方讨论OpenCV官方问题讨论 截至目前官方并没有提供一个可行的解决方案。因此,最终转向下面的方案解决问题。
2.加载转换为ONNX的yolov5官方预训练目标检测模型问题讨论
| torch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 opencv==4.5.5 qt==6.6.0(不一定是这个版本) |
报错问题1:

注:开始使用opencv==4.7.0或者更高版本报以上错误,针对以上报错,yolov5官方并没有给出可行的解决方案,建议使用4.5.5版本,这样问题好解决一点。
报错问题2:

注:使用的opencv==4.5.5报以上错误,yolov5官方讨论给出的可行解决方案链接(更改torch版本)https://github.com/ultralytics/yolov5/issues/10665
3.yolov5目标检测模型pt转换为ONNX模型文件
写了一个对图像和实时检测的demo代码:yolov5图像和实时检测
关于yolov5目标检测模型pt转换为ONNX模型文件,官方已经在export中提供了相关的代码,读者直接使用即可,只需要修改参数权重文件weight路径以及配置文件,opset = 11以及include参数为onnx模式,图像分辨率(默认为640 x 640)。


4.QT 6.6.0 基于OpenCV4.5.5加载yolov5的ONNX文件目标检测

第一步:加载模型

第二步:图像预处理(重点)

第三步:输入模型检测

第四步:坐标值转换(重点)

第五步:NMS冗余坐标框过滤(重点)

第六步:坐标相对输入图像大小映射到实际图像大小(重点)

第七步:绘制坐标框相关信息

最后可选的实时检测

参考代码:https://github.com/doleron/yolov5-opencv-cpp-python/blob/main/cpp/yolo.cpp
QT6.6.0加载yolov5的ONNX模型文件进行目标检测

5362






