UNeedCryDear / yolov5-opencv-dnn-cpp

使用opencv模块部署yolov5-6.0版本
Apache License 2.0
134 stars 37 forks source link

输出的Mat大小不对 #27

Open GuoYongyu opened 1 year ago

GuoYongyu commented 1 year ago

我用YOLOv5的.pt转为.onnx后(6.0版本的),C++调用得到的网络输出是13808085,用作者提供的方法解析是错误的,求助!本人不太会深度学习,只是在做一个小实验的时候需要用到目标检测的结果。

UNeedCryDear commented 1 year ago

opencv版本不一样的话,getUnconnectedOutLayersNames结果可能会不一样,你可以直接指定输出口来完成修改。 https://github.com/UNeedCryDear/yolov5-opencv-dnn-cpp/blob/57007e38e167020b076e55342b21bf24e9b3d42b/yolo.cpp#LL111C64-L111C64 这句换成下面这个看下

net.forward(netOutputImg,"output");

另外,如果有报错,请提供报错信息,而不是直接一句解析错误,解析错误是哪里错误。

GuoYongyu commented 1 year ago

是这样的,我照您说的方法改了以后,现在的代码是这样的

std::cout << netOutputImg[0].size << std::endl;
int netWidth = int(labels.size()) + 5;
auto pData = (float*)netOutputImg[0].data;

这里的输出是 1 x 25200 x 85,如果再按照代码中给的解析方法的话,for循环就会变得特别大,同时pdata += net_width那感觉也就不太对,而且是没有检测结果的

UNeedCryDear commented 1 year ago

1 x 25200 x 85结果是对的,没有检测结果是指是什么?demo图片有结果吗?

GuoYongyu commented 1 year ago

我用的是另一个数据集里的图片,是没有结果的。但是如果用YOLOv5提供的python代码检测是能检测到,但是用的是.pt文件,因为YOLOv5的python代码里调用.onnx也是有问题的。

UNeedCryDear commented 1 year ago

请先将demo图片和官方yolov5导出的onnx运行成功,然后再去换你自己的模型和数据集图片,你自己修改了写什么代码也没说,你用py调用onnx都有问题了,不是应该先看下onnx文件是什么问题吗?你pt文件可以转到onnx出现问题应该去yolov5官方或者pytorch或者onnx的库去问是什么问题而不是来我这里。 另外,你说的有问题是什么问题?具体报错信息还是哪行代码出现异常结果?我上面就给你强调你要给出报错信息,或者哪个异常的结果信息,你还是只说有问题,其他信息我是一抹黑,不是我不想帮你,但是我实在没时间也没心情陪你玩猜答案游戏。

GuoYongyu commented 1 year ago

不好意思给您带来麻烦了,怪我没有说清楚。我想表示的就是你最开始回复我的那个地方,因为opencv版本好像与您的有所不同,所以在输出上产生了一些误差。但是照您说的目前问题已经解决,是我在后续处理的地方存在问题。感谢您的帮助!也谢谢您耐心的回答!